RRC: Multi-cell handling architecture This MR implements a foundational multi-cell handling architecture for RRC by separating DU management from cell management and establishing a hierarchical cell organization within each DU container. The changes enable proper multi-cell support where each DU can serve multiple cells, addressing the previous limitation where DU and cell management were tightly coupled with the assumption of one cell per DU. Key Changes: - Data Structure Separation: Separated for DU containers (DU-specific info) from cell containers (cell-specific data) - Global DU and Cell Trees: Cells are now stored in global RB trees in RRC, similarly to DUs - Du-specific cell seq_arr: within each DU container (du->cells) is stored a seq_arr of cells belonging to the DU - UE Cell Association Framework: Introduced serving_cells array to track PCell and SCells for each UE with servCellIndex indexing - Cell Management Library: Extracted cell management functions into rrc_cell_management.c/h for better testability and maintainability Other relevant changes: - F1AP Refactoring: cell list definitions, heap allocation to prevent stack overflow - 5G-S-TMSI Helpers: Common helper functions for 3GPP TS 23.003 compliant construction - Integration Tests: Comprehensive test suite for DU lookup, cell lookup, and UE cell association - Cell Duplication Checks: Validation in F1 DU configuration update to prevent duplicate cells - Documentation: Updated RRC developer documentation with multi-cell architecture details Validated with RFsim in re-establishment and handover scenarios.
5.7 KiB
This document describes the basic functioning of the 5G RRC layer, describes the periodic output, and explains the various configuration options that influence its behavior.
Developer documentation, such as UE connection control flow, reestablishment, or handover, are described in a separate page.
[[TOC]]
General
The RRC layer controls the basic connection setup of UEs as well as additional procedures. It is the fundamental building block of OAI's CU-CP, and interacts with lower layers (DU, basically MAC and RLC) through F1AP messages, and with the CU-UP through E1AP messages. More information can be found in the respective F1AP page and E1AP page.
Periodic output and interpretation
Similarly to the scheduler, the RRC periodically prints information about
connected UEs and DUs into file nrRRC_stats.log in the current working
directory of the executable running the RRC (typically, nr-softmodem). The
output lists first all UEs that are currently connected, and then all DUs, in
order.
For each UE, it prints:
UE 0 CU UE ID 1 DU UE ID 40352 RNTI 9da0 random identity c0f1ac9824000000:
last RRC activity: 5 seconds ago
PDU session 0 ID 10 status established
associated DU: DU assoc ID 8
where UE 0 is the UE index, CU UE ID and DU UE IDs are the IDs used to
exchange over F1 (cf. scheduler logs). Further, it shows RNTI, when the last
RRC activity happened, the status of PDU sessions and which DU is associated
(through the SCTP association ID).
For each DU, it prints:
1 connected DUs
[1] DU ID 3584 (gNB-OAI) integrated DU-CU: 1 cell
[1] nrCellID 12345678, PCI 0, Mode TDD, SSB ARFCN 641280
TDD: band 78 ARFCN 640008 SCS 30 (kHz) PRB 106
The output shows:
- Total number of connected DUs
- For each DU: an index (
[1]), the DU ID and name, connection type (eitherintegrated DU-CUfor monolithic deployments orassoc_id Xfor split deployments), and the number of cells served by this DU - For each cell served by the DU: a cell index (
[1]), the NR Cell ID, Physical Cell ID (PCI), operating mode (TDD or FDD), and SSB ARFCN - Cell-specific frequency information: for TDD mode, the band, Point A ARFCN, subcarrier spacing (SCS), and number of resource blocks (PRB); for FDD mode, separate DL and UL frequency information
The RRC enables the support of multiple cells per DU (though currently each DU typically serves one cell in practice).
As of now, it does not print information about connected CU-UPs or AMFs.
Configuration of the RRC
Split-related options (when running in a CU or CU-CP)
See F1 documentation for information about the F1 split. See E1 documentation for information about the E1 split.
RRC-specific configuration options
In the gNBs section of the gNB/CU/CU-CP configuration file is the
RRC-specific configuration
cell-specific options
Note that some SIBS are configured at the CU and some at the DU; please consult the MAC configuration as well for SIB configuration.
gNB_IDandgNB_name: ID and name of the gNBtracking_area_code: the current tracking area code in the range[0x0001, 0xfffd]plmn: the PLMN, which is a list of entries consisting of:mcc: mobile country codemnc: mobile network codemnc_length: length of mobile network code, allowed values: 2, 3snssaiList: list of NSSAI (network selection slice assistence information, "slice ID"), which itself consists insst: slice service type, in[1,255]sd(default0xffffff): slice differentiator, in[0,0xffffff],0xffffffis a reserved value and means "no SD" Note that: SST=1, no SD is "eMBB"; SST=2, no SD is "URLLC"; SST=3, no SD is "mMTC"
enable_sdap(default: true): enable the use of the SDAP layer. If deactivated, a transparent SDAP header is prepended to packets, but no further processing is being done.cu_sibs(default:[]) list of SIBs to give to the DU for transmission. Currently, SIB2 is supported.
UE-specific configuration
um_on_default_drb(default: false): use RLC UM instead of RLC AM on default bearers
Neighbor-gNB configuration
Refer to the handover tutorial for detailed information about gNB neighbors and handover procedures.
Required configuration parameters
To define a neighbor cell in the configuration file, the following parameters are required:
gNB_ID- identifier of the neighbor gNB (e.g.,0xe01)nr_cellid- cell identifier of the neighbor cell (e.g.,11111111)physical_cellId- physical cell ID for radio identification (e.g.,1)absoluteFrequencySSB- SSB frequency in ARFCN notation (e.g.,643296)subcarrierSpacing- numerology index: 0=15kHz, 1=30kHz, 2=60kHz, 3=120kHzband- 3GPP frequency band number (e.g.,78for 3.5GHz)plmn- PLMN configuration object with:mcc- mobile country code (3 digits, e.g.,001)mnc- mobile network code (2-3 digits, e.g.,01)mnc_length- number of digits in MNC (must be2or3)
tracking_area_code- tracking area identifier (e.g.,1)
Example configuration structure:
neighbour_list = (
{
nr_cellid = 12345678;
neighbour_cell_configuration = (
{
gNB_ID = 0xe01;
nr_cellid = 11111111;
physical_cellId = 1;
absoluteFrequencySSB = 643296;
subcarrierSpacing = 1; # 30 kHz
band = 78;
plmn = { mcc = 001; mnc = 01; mnc_length = 2 };
tracking_area_code = 1;
}
);
}
);
Refer to the handover tutorial for complete examples and detailed setup instructions.