As reported by Emad Alizade:
According to "Issue255 256 257 paging reesta release" that has been
merged in develop version, we have a question: In rrc_eNB_free_UE()
function only all ulsch related memory of user has been cleaned, but
I think not only ulsch memory but also dlsch memory must be cleaned.
I tested the latest develop version and with repetition UE attach-detach
procedures we find that the dlsch memory has not been cleaned and after
repeat this sequence (45 times) assertion with cause UE_id!=-1 (no free
or exiting dlsch_context, dci_tools.c: fill_dci_and_dlsch() ) occurred
and no UE will be attached to system.
The fixes in this commit are from Emad Alizade.
(cherry picked from commit 4b5b556493)
# Conflicts:
# openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
# openair2/LAYER2/MAC/eNB_scheduler.c
# openair2/RRC/LITE/rrc_eNB.c
The problem is the following (as reported by an user):
"one UE is attached to OAI system. UE is near the antenna. Try to detach
the UE and attach again. Repeat this procedure for 5-6 times. OAI system
does not work and any the UE can not attach to this system. I use TEMS
software and I can see MIB signaling on this UE but UE can not decode SIB1
and SIB2."
What happens is that the DCI for SIB1 and SIB2 is not cleared before
use. That is the bits in the 'padding' field keep the values that were
set before. If the structure has been used to transmit other DCIs
(eg. for UEs) in the past, it may be reused with some of those bits set
to 1. When receiving this DCI, the UE won't accept it because it
gets some bits at 1 where it expects them to be 0.
The short-term/quick solution is to clear the 'padding' field.
A better solution would be to rewrite this part of the code,
which is way too complicated for what it does. But this takes
too much time.
In dci.h the field 'dummy' of some structures was renamed to 'padding'.
The fields 'padding32' and 'padding64' were also renamed to 'padding'
for consistency.
Some structures (DCI2B_1_5MHz_TDD, DCI2B_10MHz_FDD, DCI2D_1_5MHz_FDD,
DCI2D_5MHz_FDD, DCI2D_10MHz_FDD) had a 'padding' field at the end, which
was renamed to 'padding0'. I don't know if this field should be here at all.
To me this field looks very suspicious. When we test DCIs 2B and 2D we
should be careful.
(cherry picked from commit c5ca2bd862)
- remove global variables in the function lte_est_timing_advance_pusch
- do the smoothing logic that was in lte_est_timing_advance_pusch
in rx_sdu (is it necessary? is it correct?)
- put back the value 100 in prach_procedures for the test on prach energy
- change the value of timing_advance_update
it was:
timing_advance_update = sync_pos - eNB->frame_parms.nb_prefix_samples/4; //to check
it is now:
timing_advance_update = sync_pos; // - eNB->frame_parms.nb_prefix_samples/4; //to check
this should be checked somehow. The computation looked suspicious. Maybe
the new one is wrong.
The warning was:
/roux/ru/openairinterface5g/openair1/PHY/LTE_TRANSPORT/pucch.c: In function 'generate_pucch2x':
/roux/ru/openairinterface5g/openair1/PHY/LTE_TRANSPORT/pucch.c:729:73: warning: array subscript is above array bounds [-Warray-bounds]
AssertFatal(1==0,"Illegal modulation symbol %d for PUCCH %s\n",B2,pucch_format_string[fmt]);
^
/roux/ru/openairinterface5g/common/utils/./itti/assertions.h:52:53: note: in definition of macro '_Assert_'
__FUNCTION__, __FILE__, __LINE__, ##aRGS); \
^~~~
/roux/ru/openairinterface5g/openair1/PHY/LTE_TRANSPORT/pucch.c:729:7: note: in expansion of macro 'AssertFatal'
AssertFatal(1==0,"Illegal modulation symbol %d for PUCCH %s\n",B2,pucch_format_string[fmt]);
^
The root cause was that the array pucch_format_string was not in sync with
the structure. (This plus why force its size and put \0 in the string...)
phy_init_lte_ue_signal was renamed init_lte_ue_signal in openair1/PHY/INIT/defs.h
maybe it's the opposite that should have been done?
Functions used in one file and defined in another may have been
declared in the wrong header file.