1. 16 Jul, 2026 5 commits
    • Noemi Giustini's avatar
      Add RRC.ConnMean metric · fe228e57
      Noemi Giustini authored
      Implement RRC.ConnMean (3GPP TS 28.552 §5.1.1.4.1): mean number of UEs in
      RRC-CONNECTED state over the granularity period, computed as a time-average
      of periodic samples.
      
      - ran_func_kpm.c: append RRC.ConnMean to kpm_node_meas_cu[] and
        kpm_node_meas_gnb[].
      - ran_func_kpm_subs.h: add rrc_conn_count_sum and rrc_conn_count_samples to
        e2_node_level_stats_t for per-report start/end snapshots.
      - ran_func_kpm_subs.c: add fill_RRC_ConnMean(); snapshots the live RRC
        counters into node_stats[1], computes the mean as Δsum/Δsamples over the
        granularity window, returns a real-valued record (noLabel); extend
        cp_node_level_stats() to copy the two new fields; add dispatch entry to
        lst_measure[].
      - nr_rrc_defs.h: add rrc_conn_count_sum and rrc_conn_count_samples to
        gNB_RRC_INST.
      - rrc_gNB.c: add nr_rrc_sample_conn_count(); it samples the connected-UE
        count and accumulates it into the cumulative counters, invoked from the
        existing stats timer in the RRC task loop. It is always compiled: counting
        is harmless when the E2 agent is disabled, and it leaves the timer setup
        and write_rrc_stats() untouched.
      
      Advertised by CU and monolithic gNB node types.
      Signed-off-by: default avatarNoemi Giustini <giustini.n@northeastern.edu>
      fe228e57
    • Noemi Giustini's avatar
      Add MR.NRScSSSINR metric · 97dee1ac
      Noemi Giustini authored
      Implement MR.NRScSSSINR (3GPP TS 28.552 §5.1.1.32): distribution of the NR
      serving-cell SS-SINR reported by UEs. Level L maps to (L-46)/2 dB (0.5 dB
      steps, range -23..+40.5 dB) per TS 38.133 §10.1.16.
      
      This is the RRC serving-cell SS-SINR (TS 38.331 Measurement Report), so it
      is collected at RRC and kept as a per-cell RRC statistic.
      
      - ran_func_kpm.c: introduce kpm_node_meas_cu[] with MR.NRScSSSINR; add it to
        kpm_node_meas_gnb[]; wire kpm_node_meas_cu into the ran_def_kpm table for
        the CU and CU-CP rows.
      - ran_func_kpm_subs.c: add fill_MR_NRScSSSINR(); distBinX (SINR level) is
        0-based on the wire (valid range 0..127) and used directly as the array
        index, returning RC.nrrrc[0]->ss_sinr_cell_dist[bin]; requests without
        distBinX yield NO_VALUE; add dispatch entry to lst_measure[].
      - nr_rrc_defs.h: add ss_sinr_cell_dist[128] to gNB_RRC_INST.
      - rrc_gNB.c: add nr_rrc_count_ss_sinr_dist(); it reads the serving-cell SINR
        of a periodic Measurement Report and increments the histogram. It is
        invoked from rrc_gNB_process_MeasurementReport() on the report itself,
        before process_Periodical_Measurement_Report() consumes it, so the latter
        keeps its original signature. It is always compiled: counting is harmless
        when the E2 agent is disabled.
      
      Advertised by CU, CU-CP, and monolithic gNB node types.
      Signed-off-by: default avatarNoemi Giustini <giustini.n@northeastern.edu>
      97dee1ac
    • Noemi Giustini's avatar
      Add L1M.SS-RSRP metric · 1ba5150f
      Noemi Giustini authored
      Implement L1M.SS-RSRP (3GPP TS 28.552 §5.1.1.22.1): distribution of the L1
      SS-RSRP reported by UEs, resolved per SSB beam. Each bin accumulates the
      count of reports at a given (beam, RSRP-level); level L maps to (L-157) dBm
      per TS 38.133 §10.1.6.
      
      SS-RSRP used as L1-RSRP originates in L1 (TS 38.214), so it is collected at
      MAC when the per-beam L1-RSRP report is decoded, not from RRC Measurement
      Reports (which carry the L3-filtered RRC measurement). The histogram is
      therefore a per-cell DU statistic.
      
      - nr_mac_gNB.h: add ss_rsrp_ssb_dist[64][128] to NR_du_stats, plus the
        NR_KPM_NB_SSB / NR_KPM_SS_RSRP_NB_LEVELS dimensions.
      - gNB_scheduler_uci.c: in evaluate_rsrp_report(), for SS-RSRP (per-SSB)
        reports, increment ss_rsrp_ssb_dist[ssb][level] for every reported beam.
        RSRP is available in dBm; the 0..127 report level is recovered as
        (RSRP + 157), so that level L maps back to (L-157) dBm per TS 38.133
        §10.1.6, and both the strongest beam and the differential beams are binned.
      - ran_func_kpm_subs.c: add fill_L1M_SS_RSRP(); distBinX (RSRP level) and the
        optional ssbIndex are 0-based on the wire and used directly as array
        indices (valid ranges 0..127 and 0..63); returns the per-beam value
        du_stats->ss_rsrp_ssb_dist[ssb][bin] or the cell-wide sum over beams when
        ssbIndex is absent; add dispatch entry to lst_measure[].
      - ran_func_kpm.c: advertise L1M.SS-RSRP as a DU measurement (kpm_node_meas_du
        and kpm_node_meas_gnb).
      
      Advertised by DU and monolithic gNB node types.
      Signed-off-by: default avatarNoemi Giustini <giustini.n@northeastern.edu>
      1ba5150f
    • Noemi Giustini's avatar
      Add CARR.PUSCHMCSDist metric · 471df044
      Noemi Giustini authored
      Implement CARR.PUSCHMCSDist (3GPP TS 28.552 §5.1.1.12.2): uplink
      counterpart of CARR.PDSCHMCSDist; PRB-weighted 3D histogram over
      (rank, MCS-table, MCS-index) for PUSCH transmissions.
      
      PUSCH may use MCS tables 0 (64-QAM), 1 (256-QAM) and 3 (SC-FDMA), so the
      MCS-table dimension is indexed directly by current_BWP->mcs_table and
      sized to 4 (index 2 unused). Remapping the tables into fewer bins would
      lose the 64-QAM/256-QAM distinction, so no remapping is applied.
      
      - ran_func_kpm.c: register CARR.PUSCHMCSDist in the RAN Function
        Definition advertisement (kpm_node_meas_* lists).
      - ran_func_kpm_subs.c: add fill_CARR_PUSCHMCSDist(); distBinX (rank) is
        1-based on the wire and converted to a 0-based index, while distBinY
        (MCS table, values 0/1/3) and distBinZ (MCS index) are 0-based and used
        directly, returning du_stats->pusch_mcs_dist[rank-1][table][mcs]; add
        dispatch entry to lst_measure[].
      - nr_mac_gNB.h: the pusch_mcs_dist histogram was sized [8][2][32], too
        small for MCS table 3 (SC-FDMA) and thus overflowing at collection time;
        size the MCS-table dimension to 4 via NR_KPM_NB_MCS_TABLE_UL to hold
        tables 0, 1, 3.
      - gNB_scheduler_ulsch.c: the UL collection into pusch_mcs_dist already
        exists; align its surrounding DevAsserts with the KPM dimension macros
        (NR_KPM_MAX_LAYERS, NR_KPM_NB_MCS).
      
      Carried as E2SM-KPM Style 1 / Format 1 with distBinX/Y/Z labels.
      Advertised by DU and monolithic gNB node types.
      Signed-off-by: default avatarNoemi Giustini <giustini.n@northeastern.edu>
      471df044
    • Noemi Giustini's avatar
      Rework CARR.PDSCHMCSDist metric · 23ef597c
      Noemi Giustini authored
      CARR.PDSCHMCSDist (3GPP TS 28.552 §5.1.1.12.1) and its du_stats histogram
      already existed, but the metric was never collected and the reader indexed
      the histogram incorrectly. Rework it into a correct PRB-weighted 3D
      histogram over (rank, MCS-table, MCS-index).
      
      - gNB_scheduler_dlsch.c: add the missing collection hook in the DL
        scheduling path; increment the (rank, MCS-table, MCS) bin by the number of
        scheduled PRBs on each PDSCH. mcsTableIdx is 0-based (0..2), so it is used
        directly to index the MCS-table axis of the histogram.
      - ran_func_kpm_subs.c: make fill_CARR_PDSCHMCSDist() fully label-driven;
        reject with NO_VALUE if any of distBinX/Y/Z is absent. distBinX (rank) and
        distBinY (MCS table) are 1-based on the wire and converted to 0-based
        indices; distBinZ (MCS index) is already 0-based and used directly, reading
        du_stats->pdsch_mcs_dist[rank-1][table-1][mcs].
      
      Carried as E2SM-KPM Style 1 measurement (Indication Message Format 1) with
      standard MeasurementLabel fields distBinX/Y/Z (INTEGER 1..65535).
      Advertised by DU and monolithic gNB node types.
      Signed-off-by: default avatarNoemi Giustini <giustini.n@northeastern.edu>
      23ef597c
  2. 12 Jun, 2026 1 commit
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/integration_2026_w24' into develop · f3589d97
      Robert Schmidt authored
      Integration: `2026.w24`
      
      - #145 RLC data req: Use API to fill multiple RLC PDUs at gNB
      - #160 ci: maintainer approval for additional file changes and update maintainer's contact
      - #146 Unit tests for bit functions
      - #142 UE DL Channel compensation and LLR optimization
      - #166 CI OCUDU configuration changes
      - #170 fix(fhi72): add observability to the O-DU
      - #173 fix(f1): DRB Information has criticality ignore
      - #171 Local ssb detection
      f3589d97
  3. 11 Jun, 2026 19 commits
  4. 10 Jun, 2026 15 commits