1. 16 Apr, 2026 3 commits
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/rrc-sibs' into integration_2026_w16 (!3983) · dc550eba
      Robert Schmidt authored
      Add SIB 3,4 support, configurable SIB2 and refactor CU/DU SIB management
      
      This MR makes neighbour and inter-frequency configuration drive how
      SIB2/SIB3/SIB4 are built and sent from CU to DUs. It standardizes SIB
      payloads as byte_array_t with typed SIB IDs across RRC, F1AP and MAC,
      reducing ad‑hoc buffer handling. Neighbour parsing, validation and
      lookup are tightened.
      
      Changes
      
      - Minor refactor to gNB neighbour parsing and storage (shared PLMN
        extraction, safer allocation, etc).
      - Represent SIB containers uniformly as byte_array_t plus nr_sib_type_t,
        and adapt F1AP, MAC and RRC users to the new container API.
      - Make SIB2 cell-reselection information fully config-driven with
        explicit bounds checking and SIB2 ASN.1 building from that config.
      - Generate SIB3 intra-frequency neighbours from the per-cell neighbour
        list and propagate them from CU to DU over F1, with MAC
        decoding/attaching them to SystemInformation.
      - Generate SIB4 inter-frequency neighbours from a new frequency_list
        plus neighbour SIB3/SIB4 offsets, and propagate them from CU to DU
        over F1, with MAC decoding/attaching them.
      - Add basic ASN.1 round-trip tests for SIB2/SIB3/SIB4 and SIB4 range
        checks, and update RRC docs to describe the neighbour/inter-frequency
        configuration model.
      
      Testing:
      
      1. in gNB conf file:
      
          cu_sibs = (2, 3, 4);
      
      2. Update neighbour config file with SIB3/SIB4 conf:
      
          (see documentation)
      
      3. run gNB and UE as usual
      
      ---
      
      Logs & configs: see MR on Gitlab
      dc550eba
    • Guido Casati's avatar
      doc (RRC): document neighbour configuration, SIB3/4 and MeasGaps design · 22783bb3
      Guido Casati authored
      Expand RRC usage and handover documentation to describe the two-level
      neighbour configuration layout, lookup-key semantics,
      and config-time SIB4 grouping behaviour. Expand the example config
      to include a `frequency_list` block and per-neighbour SIB3/SIB4
      offset fields. Add SIB2 config example.
      
      Update handover-tutorial.md to describe the same nested model and
      note that F1 and N2 handover share the same serving-cell keyed
      mapping.
      
      Add documentation about SIB3/SIB4 and MeasGaps implementation
      in OAI with stress on the shared neighbour configuration data model.
      
      Update FEATURE_SET.
      22783bb3
    • Jaroslava Fiedlerova's avatar
      Merge remote-tracking branch 'origin/fix-fill_srs_channel_matrix' into integration_2026_w16 (!4024) · 0b752116
      Jaroslava Fiedlerova authored
      Fix fill_srs_channel_matrix
      
      Fix incorrect SRS subcarrier mapping in fill_srs_channel_matrix
      
      The previous implementation of fill_srs_channel_matrix assumed an incorrect
      SRS subcarrier mapping, leading to wrong indexing of the estimated channel
      in frequency domain.
      0b752116
  2. 15 Apr, 2026 1 commit
    • Jaroslava Fiedlerova's avatar
      Merge remote-tracking branch 'origin/update-docker-compose' into integration_2026_w16 (!3994) · 7fc1d183
      Jaroslava Fiedlerova authored
      Update CN5G images to release v2.2.1 and update traffic generator image
      
      - Updated all CN5G image tags to v2.2.1
      - Updated image oaisoftwarealliance/trf-gen-cn5g to latest tag supporting
        multi-architecture platforms See here
      - Enabled iperf3 server in daemon mode in oai-ext-dn
      - Handover: Since MR oai/cn5g/oai-cn5g-amf!372 has been merged, the AMF
        image tag is updated to the latest release v2.2.1
      - upgrade MySQL image to 9.6
      7fc1d183
  3. 14 Apr, 2026 8 commits
  4. 13 Apr, 2026 1 commit
    • Aswanth KC's avatar
      fix: issue 911 - replace timer oneshot to periodic. · d33466d6
      Aswanth KC authored
      Updated SCTP reconnect timer from TIMER_ONE_SHOT to
      TIMER_PERIODIC so gNB continuously retries AMF lookup every
      30 seconds after disconnect.
      
      Timer is now removed only when ngap_amf_associated_nb > 0,
      AMF association is actually back.
      d33466d6
  5. 10 Apr, 2026 18 commits
    • Guido Casati's avatar
      Tests: enable SIB2/SIB3/SIB4 example config in F1 rfsim CI · c866078b
      Guido Casati authored
      Update the shared neighbour config used by the F1 rfsim pipeline to
      enable CU-provided SIB2 and neighbour-derived SIB3/SIB4 inputs.
      
      In `ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf`
      - Add `cu_sibs = (2, 3, 4)
      
      In `ci-scripts/conf_files/neighbour-config.conf`:
      - Add a complete `sib2_config` block
      - Add `frequency_list` / `frequency_config` for inter-frequency SIB4 fields
      - Extend both neighbour entries with per-cell offsets
      c866078b
    • Guido Casati's avatar
      Tests: add SIB2/SIB3/SIB4 ASN.1 round-trip coverage · 3e515d9c
      Guido Casati authored
      Add encode/decode helpers and basic round-trip tests for NR SIB2, SIB3
      and SIB4 in test_asn1_msg.cpp to ensure we produce decodable messages
      with expected fields. Extend SIB4 coverage with an
      inter_freq_carrier_freq_info_ranges test that exercises boundary and
      out-of-range values for carrier reselection parameters and checks
      encoder failures for invalid configurations.
      
      Changes:
      - Introduce encode_and_decode_sib2, encode_and_decode_sib3 and
        encode_and_decode_sib4 helpers that call do_SIB2_NR, do_SIB3_NR,
        do_SIB4_NR and uper_decode and assert non-empty, non-null byte
        arrays and successful decoding.
      - Add sib2_basic_encode_decode, sib3_basic_encode_decode and
        sib4_basic_encode_decode tests that populate minimal but
        representative NR_SIB2_t, NR_SIB3_t and NR_SIB4_t instances and
        verify selected decoded fields match the originals.
      - Add inter_freq_carrier_freq_info_ranges test that builds an NR_SIB4_t
        with NR_InterFreqCarrierFreqInfo_t and varies different offsets and
        thresholds to confirm valid combinations encode and invalid ones
        are rejected.
      3e515d9c
    • Guido Casati's avatar
      Reorganize and document nr_neighbour_cell_t structure · da705409
      Guido Casati authored
      - Add comprehensive documentation header explaining the structure's role
        as single source of truth for neighbor cell information across multiple
        protocols (NGAP/XnAP handover, measurement config, DU validation, SIB3/SIB4)
      
      - Add detailed field comments documenting protocol-specific mappings:
        * Core identification fields (gNB_ID, nrcell_id, physicalCellId)
        * Frequency/RF parameters (absoluteFrequencySSB, subcarrierSpacing, band)
        * Handover target identification (plmn, tac)
      
      - Document NGAP/XnAP IE mappings for plmn and tac fields
      da705409
    • Guido Casati's avatar
      Refactor (RRC): drop isIntraFrequencyNeighbour flag and labelling · 4569ef19
      Guido Casati authored
      Remove the isIntraFrequencyNeighbour field and all code that sets or
      uses it, simplifying neighbour cell handling and avoiding redundant
      state in the RRC gNB code. The flag duplicated information that can be
      derived from the neighbour absoluteFrequencySSB and the serving cell
      SSB ARFCN, and intra-frequency neighbours are logged in the SIB3
      preparation flow.
      
      Changes:
      - Remove isIntraFrequencyNeighbour from nr_neighbour_cell_t in
        openair2/RRC/NR/nr_rrc_defs.h
      - Delete is_intra_frequency_neighbour() and
        label_intra_frequency_neighbours() helpers from
        openair2/RRC/NR/rrc_gNB_du.c
      - Remove calls to label_intra_frequency_neighbours() from
        rrc_gNB_process_f1_setup_req() and
        rrc_gNB_process_f1_du_configuration_update() in rrc_gNB_du.c
      - Stop setting .isIntraFrequencyNeighbour in the local
        nr_neighbour_cell_t neighbourConfig initializer in
        openair2/RRC/NR/rrc_gNB_mobility.c
      4569ef19
    • Guido Casati's avatar
      RRC/MAC: add SIB4 inter-frequency neighbour support · 6f9a716e
      Guido Casati authored
      Add SIB4 encode/decode helpers and populate SIB4 from configured
      inter-frequency carriers and neighbour cells, wiring it into DU F1
      Setup handling and MAC SystemInformation.
      
      Changes:
      - Add do_SIB4_NR() and NR_SIB4.h inclusion in asn1_msg.c/asn1_msg.h to
        UPER-encode NR_SIB4_t into a byte_array_t.
      - Extend nr_mac_configure_other_sib() in NR_MAC_gNB/config.c with an
        NR_SIB_4 case that validates the SIB container, decodes NR_SIB4_t via
        uper_decode, logs failures, and appends SIB4 to SystemInformation.
      - Introduce build_inter_freq_carrier_from_cfg() and
        get_sib4_inter_freq_neighbors() in rrc_gNB_du.c to build
        NR_InterFreqCarrierFreqInfo_t and NR_SIB4_t from inter-frequency and
        neighbour cell configuration, skipping invalid or empty carriers.
      - Handle NR_SIB_4 in rrc_gNB_process_f1_setup_req() by deriving SIB4
        from neighbour/inter-frequency configuration, encoding it with
        do_SIB4_NR(), validating the resulting byte_array_t and adding the SI
        message for the DU cell when encoding succeeds.
      6f9a716e
    • Guido Casati's avatar
      RRC/MAC: add SIB3 intra-freqeuncy neighbour support · 817d1a6c
      Guido Casati authored
      Introduce NR SIB3 encoding in RRC and wire SIB3 neighbour information
      into CU–DU F1 Setup and DU SystemInformation. Extend MAC to decode NR
      SIB3 from CU-provided SIB containers and attach the decoded SIB3 to the
      DU SystemInformation structure.
      
      Changes:
      - Add NR_SIB3 ASN.1 include and a do_SIB3_NR() encoder in asn1_msg
        so SIB3 can be serialized into a byte_array_t buffer.
      - Introduce get_q_offset_asn1() and get_sib3_intra_freq_neighbors() in
        rrc_gNB_du.c to build an intra-frequency neighbour cell list for SIB3,
        mapping q_OffsetCell dB values to NR_Q_OffsetRange and optionally
        filling q_RxLevMinOffsetCell and q_QualMinOffsetCell.
      - Limit the number of intra-frequency neighbours in SIB3 to
        NR_maxCellIntra, logging a warning and skipping additional cells when
        the limit is reached.
      - Hook SIB3 construction and encoding into rrc_gNB_process_f1_setup_req()
        so SIB type 3 entries are added to the F1 Setup Response when
        neighbour configuration and matching neighbours are available.
      - Handle NR_SIB_3 in nr_mac_configure_other_sib() by validating the CU
        SIB3 container buffer, decoding it with uper_decode into an NR_SIB3_t,
        and attaching the resulting SIB3 to the MAC SystemInformation via
        add_sib_to_systeminformation().
      817d1a6c
    • Guido Casati's avatar
      RRC: add SIB3/SIB4 neighbour offsets and inter-frequency SIB4 config · c53b28f5
      Guido Casati authored
      Introduce typed SIB3/SIB4 neighbour and inter-frequency carrier
      configuration structures, wire them into the RRC neighbour and gNB
      instances, and centralise parsing and bounds checking of per-frequency
      SIB4 parameters from the gNB frequency list.
      
      Changes:
      - Define SIB3/SIB4 reselection and offset bound macros in gnb_config.c
        and apply them when parsing SIB4 frequency_config and
        per-carrier q_RxLevMin/t_ReselectionNR.
      - Add add_inter_freq and parse_inter_freq_list helpers in gnb_config.c
        to populate a shared inter_freqs seq_arr_t from gNB_CONFIG_STRING_GNB_LIST
        frequency_list entries, enforcing unique (ARFCN,SCS) combinations and
        logging duplicates.
      - Extend neighbour cell parameters in gnb_paramdef.h with SIB3 per-
        neighbour offset fields and define frequency_list/frequency_config
        option names, descriptor tables, and index constants for SIB4 inter-
        frequency configuration.
      - Introduce nr_neighbour_cell_neighbor_offset_t, nr_neighbour_cell_sib3_t,
        nr_neighbour_cell_sib4_freq_t, nr_neighbour_cell_sib4_t, and
        nr_inter_freq_cfg_t in nr_rrc_defs.h, and extend nr_neighbour_cell_t
        and gNB_RRC_INST with sib3/sib4 and inter_freqs members respectively.
      - udpated fill_neighbour_cell_configuration to use GET_PARAMS_LIST
        with params bound check
      c53b28f5
    • Guido Casati's avatar
      RRC/SIB2: load cell reselection config from gNB · 9afa9404
      Guido Casati authored
      Introduce a typed SIB2 cell reselection configuration, load it from the
      gNB configuration into the RRC gNB instance, and use it to build and
      encode SIB2 instead of relying on a fixed SIB2 definition.
      Validate SIB2 parameters against explicit bounds and make the SIB2
      encoder consume a pre-built ASN.1 structure with safer error handling.
      
      Changes:
      - Add SIB2 mobility timer and q-HystSF enums plus SIB2 config structs
        (`sib2_speed_state_reselection_pars_t`, `sib2_config_t`) and a
        `sib2_config` field on `gNB_RRC_INST` in `nr_rrc_defs.h`.
      - Define SIB2 configuration option names, defaults
        (`GNB_CONFIG_STRING_SIB2_*`, `GNBSIB2PARAMS_DESC`)
        in `gnb_paramdef.h` for q_Hyst, thresholds, mobility timers, scaling
        factors and deriveSSB_IndexFromCell.
      - Add `sib2_config` parameter keys, defaults, and range/value checks in
        `gnb_paramdef.h` (`GNBSIB2PARAMS_DESC`).
      - Add SIB2 `fill_sib2_configuration()` in `gnb_config.c` to read SIB2
        parameters from the config file log the resulting configuration and
        store it in `rrc->sib2_config` via `RCconfig_NRRRC()`.
      - Add `get_q_hyst_asn1()` and `get_sib2_from_cfg()` in `rrc_gNB_du.c`, and
        update `rrc_gNB_process_f1_setup_req()` to encode/add SIB2 from config with
        explicit encode-failure handling and logging.
      - Change `do_SIB2_NR` signature in `asn1_msg.h/.c` to
        `byte_array_t do_SIB2_NR(const NR_SIB2_t *sib2)`, remove internal default
        SIB2 construction, and add ASN.1 constraint/encode error logging.
      9afa9404
    • Guido Casati's avatar
      Neighbour config: log neighbour presence and counts during parsing · 52d5705f
      Guido Casati authored
      Add info logs for neighbour cell configuration parsing
      without changing functional behaviour.
      52d5705f
    • Guido Casati's avatar
      Refactor (F1AP/RRC): convert SIB containers to byte_array_t · e27f8c24
      Guido Casati authored
      Unify SIB container handling by introducing a typed SIB enum and storing
      SIB payloads as byte_array_t across common NR types, F1AP helpers, MAC,
      and RRC DU setup code.
      
      Changes:
      - Include byte_array support in nr_common.h, add nr_sib_type_t (NR_SIB_1–NR_SIB_21),
        and change nr_SIBs_t to hold only nr_sib_type_t SIB_type.
      - Switch f1ap_sib_msg_t in f1ap_messages_types.h to use a byte_array_t SI_container
        instead of raw pointer and length fields.
      - Update F1AP encode/decode, equality, copy, and free helpers in
        f1ap_interface_management.c to work on SI_container.buf / SI_container.len and
        use eq_byte_array, copy_byte_array, and free_byte_array.
      - Adapt F1AP tests in f1ap_lib_test.c to build and inspect SIB containers via
        SI_container.buf and SI_container.len.
      - Replace magic SIB numbers with nr_sib_type_t values in gnb_config.c
        (get_sys_info and fill_du_sibs) to validate and configure DU SIBs.
      - Rework nr_mac_configure_other_sib in NR_MAC_gNB/config.c to decode SIB2
        from a byte_array_t container, fix freeing by releasing the decoded sib2 on
        failure, and use NR_SIB_2 / NR_SIB_19 for CU/DU SIB selection.
      - Add an add_si_msg helper in rrc_gNB_du.c and refactor the SIB2 branch of
        rrc_gNB_process_f1_setup_req to populate cell->SI_msg from encoded local
        byte array while iterating SIBs with FOR_EACH_SEQ_ARR.
      e27f8c24
    • Guido Casati's avatar
      Refactor (RRC): validate neighbour-cell params and use gpd lookups · 7606a93f
      Guido Casati authored
      Tighten neighbour-cell config parsing by enforcing parameter constraints in
      the descriptor and switching parsing code to name-based lookups with gpd.
      
      Changes:
      - Update `GNBNEIGHBOURCELLPARAMS_DESC` in `openair2/GNB_APP/gnb_paramdef.h`
        to add checks for `physical id`, `absoluteFrequencySSB`, `scs`, `band`
        `tracking_area_code`.
      - Remove neighbour-cell parameter index macros.
      - Refactor `parse_neighbour_cells_list` in `openair2/GNB_APP/gnb_config.c`
        to use `gpd()` lookups for neighbour fields instead of fixed indexes.
      - Extend `parse_neighbour_cells_list` with an `n_cell_params` argument and
        update `fill_neighbour_cell_configuration` to pass
        `sizeofArray(ncell_params)`.
      7606a93f
    • Guido Casati's avatar
      Refactor (RRC): inline neighbour cell arrays and constify access · 185690cb
      Guido Casati authored
      Inline neighbour cell arrays into the RRC neighbour configuration and
      update RRC/DU helpers to use const-aware access and shared iteration
      helpers when walking neighbour lists and building measurement configs.
      
      Changes:
      - Change neighbour_cells in neighbour_cell_configuration_t from a
        seq_arr_t * to an embedded seq_arr_t field.
      - Initialize and populate the embedded neighbour_cells directly in
        parse_neighbour_cells_list in gnb_config.c, dropping dynamic
        allocation of the neighbour list container.
      - Refactor get_neighbour_cell_by_pci and nr_rrc_get_measconfig in
        rrc_gNB.c to access the embedded neighbour_cells via const pointers,
        introduce a local meas_cfg and a3_event_list, and iterate neighbour
        cells with FOR_EACH_SEQ_ARR.
      - Treat neighbour cell configuration entries as const in rrc_gNB_du.c
        (get_cell_neighbour_list, label_intra_frequency_neighbours,
        valid_du_in_neighbour_configs) and iterate neighbour lists with
        FOR_EACH_SEQ_ARR instead of index-based loops.
      185690cb
    • Guido Casati's avatar
      Refactor (gNB Config): look up neighbour-list nr_cellid by name with gpd · 442b3045
      Guido Casati authored
      Outer gNB neighbour_list entries now only declare the serving cell
      nr_cellid. The code resolves that field with gpd instead of a fixed column
      index.
      
      Changes:
      - gnb_paramdef.h: remove unused NEIGHBOUR_CELL_PHYSICAL_ID from
        GNB_NEIGHBOUR_LIST_PARAM_LIST (keep NRCELLID only).
      - gnb_config.c: in fill_neighbour_cell_configuration, set nr_cell_id
        from gpd
      442b3045
    • Guido Casati's avatar
      19685536
    • Guido Casati's avatar
      Refactor (gNB Config): reuse PLMN helper and neighbour config parsing · afb3005a
      Guido Casati authored
      Refactor gNB configuration code to share PLMN extraction logic and to
      split neighbour-cell configuration into smaller helpers with safer
      allocation and clearer list handling.
      
      Changes:
      - Add `extract_plmn_from_params()` in `gnb_config_common.c` and declare
        it in `gnb_config_common.h` to centralize PLMN extraction from
        `paramdef_t`.
      - Update `set_plmn_config()` to use `extract_plmn_from_params()` when
        filling the PLMN array instead of duplicating field assignments.
      - Refactor `fill_neighbour_cell_configuration()` in `gnb_config.c` to
        delegate per-cell neighbour parsing to
        `parse_neighbour_cells_list()` and sorting to
        `sort_neighbour_configuration()`, simplifying the main loop.
      - Use `extract_plmn_from_params()` when parsing neighbour PLMNs in
        `parse_neighbour_cells_list()` and log each neighbour with its PLMN,
        PCI, and other radio parameters before adding it to the sequence.
      - Switch allocation of `rrc->neighbour_cell_configuration` in
        `fill_neighbour_cell_configuration()` from `malloc` to
        `malloc_or_fail()` to enforce consistent handling of allocation
        failures.
      afb3005a
    • Guido Casati's avatar
      fix (Config API): make config integer checks type-correct and add unsigned range validator · 425ea41b
      Guido Casati authored
      Change 1: config_check_intval() now uses the correct integer pointer for TYPE_INT
      
      Problem: config_check_intval() previously dereferenced param->uptr regardless
      of param->type. For parameters declared as signed (TYPE_INT / TYPE_INT32), the
      active union member is param->iptr, and param->uptr may be NULL -> using uptr
      makes validation unsafe and type-inconsistent.
      
      What changed: Updated config_check_intval() behavior (signature unchanged).
      Handle both param->type, param->iptr and param->uptr.
      
      Change 1: new config_check_uintrange() for unsigned range constraints
      
      Problem: there was a signed range checker (config_check_intrange()) that reads
      param->iptr, but there was no dedicated unsigned range validator using param->uptr.
      
      What changed: added config_check_uintrange() in config_userapi.h/.c
      The new function reads param->uptr as uint32_t and validates against
      param->chkPptr->s2.okintrange[] endpoints.
      
      Change 3: constify input params for f2 function pointers
      
      Problem: checkedparam_t.s2.f2 was typed with non-const input params, even though
      range checks only read. A safer const-safe signature is required.
      
      What changed: s2.f2 now takes const configmodule_interface_t *
      and const paramdef_t *. config_check_intrange() and config_check_uintrange() use
      the same const-qualified parameters.
      425ea41b
    • Guido Casati's avatar
      Fix (config API): print correct integer pointer in range check · dc260bd4
      Guido Casati authored
      Use the integer pointer when reporting invalid integer values:
      in `config_check_intrange()` error print from `param->uptr` to
      `param->iptr`.
      dc260bd4
    • Jaroslava Fiedlerova's avatar
      Merge branch 'integration_2026_w15' into 'develop' · 5fcd456a
      Jaroslava Fiedlerova authored
      Integration `2026.w15`
      
      * !4014 Microamp FR2 configuration file and documentation
      * !4029 nr rlc: tolerate bogus data
      * !4032 build_oai fixes: harmonize duplicate options, remove wrong --build-lib handling
      * !3977 Further unused arguments cleanup
      * !4009 Fix for NULL pucch-ResourceCommon at MSG4
      * !4037 Increase reliability of ltebox start
      * !4034 Prevent infinite loop on Single Entry PHR handling
      * !4038 doc(record_db): explain how to use record_db
      * fix compilation of T tracers with 'make'
      * !3489 Thread-pool support for TX symbol processing.
      
      See merge request oai/openairinterface5g!4033
      5fcd456a
  6. 09 Apr, 2026 7 commits
  7. 08 Apr, 2026 2 commits