- import RRC ASN.1 defintions from the specifications
(file openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e10.asn)
contrary to rel8/10, all modules have been imported, maybe it's too much
to refine in case of problems
- deal with rel14 in fix_asn1
- all code that was for Rel10 is now for Rel10/Rel14
- some incompatible changes (mostly in naming) were resolved in favor
of rel14, see in openair2/RRC/LITE/defs.h
- unsure about the rlc layer, some arrays have changed (values appended),
I only changed the definition and in tests in the code, I changed
the index limit, maybe it's not enough
Rel14 is the default compilation mode.
The compilation line was:
./build_oai --eNB -w USRP
The file openairinterface5g/cmake_targets/log/lte-softmodem.Rel10.txt
has been checked and all LOG_X (and 'msg') warnings have been fixed.
This commit follows 7d9945e884.
lte-softmodem UE in S1 and lte-softmodem UE in noS1 modes behave
differently here.
This commit fixes the issue for thoses cases.
Other cases (eNB S1, eNB noS1, oaisim S1/noS1) have to be checked.
This commit is a continuation of 614d6bbe2a
(ue_ip: use correct instance).
Now in openair2/NETWORK_DRIVER/UE_IP/common.c the 'inst' is not
forced to 1 anymore, we take the value 'pdcph_p->inst'.
It turns out that 'pdcph_p->inst' is 0 instead of 1 when we
run lte-softmodem as an UE.
So let's modify PDCP to set 'inst' to 1 where it was set to 0 for
the UE softmodem case, and skip the places where it is reset to 0,
still for the UE softmodem case.
This may break things, I am not sure.
When using abstraction mode, layer2_init_UE() and openair_rrc_ue_init()
are called according to first_sync state and only without MME support.
We added the global variable abstraction_flag to allow abstraction mode
when MME is enabled.
Openair2 is also used in lte-softmodem, so it must have a global variable
abstraction_flag. So we moved it out from the main() scope.
The previous version did not seem to work properly with
several UEs. I too often ended up with a list 'next' where
next[i] = i, leading to an infinite loop, crashing the
processing.
The sorting functions were hard to understand and too slow
anyway (O(n*n)).
We now use qsort_r and comparison functions, that should
define the same order as the previous version.
One important point is that the "next" lists and the "head"
variable are now considered invalid before calling sort_UE.
So all the code (coming before sort_UE) that looped using those
variables has been rewritten to loop over all possible UEs and
the first instruction of the loop is to exit the loop if the UE
is not 'active'. There is room for improvement here. We will
reintroduce a list of some kind at some point. Let's first
have something that works and then optimize. Today NUMBER_OF_UE_MAX
is 16, that's not a big deal.
Consequently, the add_new_ue and rrc_mac_remove_ue have also
been rewritten, hopefully for the better.
This commit is not a basic work and may introduce some
problems.
The RA process may be in the state:
RA_active == FALSE and wait_ack_Msg4 == 1
Testing only the rnti should be enough, if everything else works
properly.
Also, don't break, just in case. (Not sure it makes a
difference.)
The previous version was calling taus(), which
may return any value in [0..65535].
The new version restricts it to [1024..59999]
(arbitrary values, big enough, and in the valid range).
It also checks that the new RNTI is not already present
in the MAC.
I think we should also check that it's not used by a RA
process.
The "loop" thing may not be the best solution either.
To be refined.
A RA process is not available if
and RA_template[i].wait_ack_Msg4 != 0
We can have RA_active==FALSE and wait_ack_Msg4==1,
in which case the RA process is in use and cannot
be reassigned.
Here is the problem:
Sometimes the UE has no PHY context but
is still present in the MAC with 'ul_failure_timer' = 0 and
'ul_out_of_sync' = 0. It seems wrong and the UE stays there forever. Let's
start an UL out of sync procedure in this case.
The root cause of this problem has to be found and corrected.
In the meantime, this hack...
This has to be redone at some point.
Here is the problem:
UE comes. SRB2 is configured via message to RRC.
At some point the RLC AM is created but not configured yet.
At this moment (I think) MAC calls mac_rlc_status_ind
which calls this function. But the init was not finished yet
and we have a crash below when testing mem_block != NULL.
The "solution" is to test if rlc->input_sdus is NULL.
This is a very dirty hack. I would say the solution
is to use proper locking mechanism because RLC is used
by two threads: PHY/MAC on one hand and RRC on another
hand (I think).
The management of uplink failure generates a DCI to send
a RA PDCCH order. It calls add_ue_spec_dci which increases
DCI_pdu[CC_id]->Num_ue_spec_dci, but this was reset to 0
*after* the DCI generation. Let's reset *before*.
Bug reported by Liang Yong on openair5g-user mailing list.