to use faster code
- replaced hundreds mallocs by either local arrays or by the OAI multi-dimensionalarray (G_N_tab array)
- made in SIMD a one bit per byte packing function to packed (ordinary) bits in bytes
The CellGroup is created considering UID, for example:
'pucchres0->startingPRB = 8 + uid;' and since we keep the CellGroup from
the previous RNTI/UID we should keep also the previous UID.
Considering the scenario where a UE did successful RRCReestablishment,
it was getting uid = 1, and uid = 0 was removed.
When another UE connected, it was getting UID = 0 (because 0 was already
free), and so the PUCCH 0 resource was conflicting with the first UE.
On that occasion, also correct the comment that describes the code, as
it was wrong/misleading.
See merge request oai/openairinterface5g!2459
* !2419 chore(ci): running 5G RF simulator scenarios with address sanitizer
* !2455 Remove mac_LogicalChannelConfig from RLC (handled at MAC)
* !2456 Setting uniform periodicity for CSI-RS and measurement report
* !2429 LDPC encoding/decoding offload to the T2 card
* !2447 E2 agent: build in CI, fix slice support, add gNB-DU and gNB-CU-UP IDs
* !2452 Include sample advance option in UE tutorial
* !2430 bugfix: nr-ue: set first_tx=1 at first transmission of a harq process
* !2457 Fix scaling for FR2
Position of SSB from Point A depends on offsetToPointA and Kssb, and for both, the unit for RB is expressed as 15KHz for FR1 and 60 KHz for FR2, so scaling must be 4 for FR2 frequencies
- Implement: Extend the F1 encoding and decoding with Qos
- Implement: E1 decoding for QoS
- Fix: Modify the UE_MODIFICATION_REQUEST_MSG towards DU to contain QoS info based on E1AP context response
- Fix: Modify the E1AP and F1AP message structures
- Fill the Qos configuration to send to MAC
The macrlc_has_f1 (static) variable was introduced to signal when we use
F1 in the configuration. It is superfluous: the node_type already passes
this information in a unique manner; hence, remove.
Correctly match UEs based on the NSSAI in MAC and RRC. There is a
convenience function capture_sst_sd() that extracts SST and SD (which
form the NSSAI). Because a previous version used integers to convey the
slice identifier, this function gracefully handles this case, although
it is not spec-compliant.
Prior to this commit, the RAN function for KPM is leaking memory: it
allocates using calloc() but never frees it.
The fix consists of not allocating this memory on the heap in the first
place, but on the stack. Therefore, there are changes to pass in a
pointer to various functions to the structure on the stack, instead of
passing the "container" for the heap memory by value.
Further, the MAC was allocating an excessive amount of memory (N times
sizeof(NR_UE_info_t)). Instead of copying the entire struct, the present
code stores a pointer to the MAC UE container (NR_UE_info_t *). For the
RRC, there is a similar simplification that consists in not storing the
entire struct f1_ue_data_t (which is not required), but only the RRC UE
ID.
Note that both MAC and RRC might suffer from race conditions. For the
MAC, we should lock the scheduler for the time we read statistics. For
the RRC, the problem is more delicate as no mutex exists; the RRC
assumes everything is executed synchronously in the ITTI task loop. In
both cases, this commit does not address this problem
Filtering UEs by NSSAI is broken, so remove it. A later commit will
reestablish this functionality.
Simplify the code: we only handle one condition, so we can check for it
upfront.
This commit introduces an additional (implicit) option that signals if
the E2 agent is to be activated or not. When reading the configuration,
we now check if all fields are set, and activate the E2 agent only if
this is the case. If not, we only print a warning and start the gNB
without the agent.
Note that previously, if not all fields are set correctly, the gNB
stopped.
To implement this behavior, it is necessary to change the defaults of
the RIC IP and the directory for SMs to a (non-NULL) default value.
Otherwise, the configuration system would not consider the field to be
set to the default, and wrongly assumes the field is set, even though it
is not; at least, this change is necessary to make config_isparamset()
return NULL if the configuration is not set.
3GPP has the concept of a gNB-CU-UP ID and a (separate) gNB ID (for gNB,
CU-CP). This commit introduces the gNB-CU-UP as a separate ID that has to be
set in the configuration file when running as a CU-UP. For the
CU/monolithic gNB, it is optional (but needs to be the same as the
gNB-ID if specified).
The CU-UP ID is necessary, as some entities, e.g., the e2 agent, need to
signal both IDs, e.g., to reconcile a CU-CP and (multiple) CU-UP(s)
belonging together.
3GPP has the concept of a gNB-DU ID and a (separate) gNB ID (for gNB,
CU). This commit introduces the gNB-DU as a separate ID that has to be
set in the configuration file. It is necessary, as some entities, e.g.,
the e2 agent, need to signal both IDs, e.g., to reconcile a CU and
(multiple) DU(s) belonging together.
* Dockerfile argument is now a generic BUILD_OPTION for any build_oai available option
* docker-compose files are only modified at deployment time. Not needed for undeployment
* fixes for oai-nr-cuup
* cleaner section for the private registry push
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>