1. 22 Jul, 2026 1 commit
    • Guido Casati's avatar
      ci: split PCF CN config out of shared mini_nonrf_config.yaml · 5ac6eeff
      Guido Casati authored
      The u0_25prb multi-QoS CI scenario needs PCF (use_local_pcc_rules: no),
      but in f02c84fc that configuration has been placed in the shared
      5g_rfsimulator/mini_nonrf_config.yaml. Every other rfsim pipeline
      mounts that file without running oai-pcf.
      
      In some setups different from Linux (i.e. WSL2) this causes issues.
      
      With `use_local_pcc_rules: no`, SMF attempts associating to oai-pcf when
      creating SM Context even when no PCF container exists. If that HTTP call
      exceeds the wait timeout (100 ms), AMF gets error and does not complete
      the SM context creation, a later Update SM Context then fails
      ("Could not find Nsmf_PDUSession URI").
      
      Native Linux is usually fine: when the failed PCF association is fast
      enough, context creation completes successfully.
      
      This commit moves PCF-specific configuration into 5g_rfsimulator_u0_25prb
      only. The shared config is restored to `use_local_pcc_rules: yes` and a single
      oai DNN (pre-f02c84fc status).
      
      Changes:
      - Add new file 5g_rfsimulator_u0_25prb/mini_nonrf_config.yaml (PCF, dual-DNN,
        use_local_pcc_rules: no) and mount in 5g_rfsimulator_u0_25prb/docker-compose.yaml
      - Revert 5g_rfsimulator/mini_nonrf_config.yaml
      Signed-off-by: default avatarGuido Casati <guido.casati@openairinterface.org>
      Reported-by: default avatarThomas Schlichter <thomas.schlichter@iis.fraunhofer.de>
      5ac6eeff
  2. 17 Jul, 2026 7 commits
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/integration_2026_w29' into develop · 31ffb21a
      Robert Schmidt authored
      Integration: 2026.w29
      
      - #280 Optimize syscalls in GTP receiver/sender, GTP F1 UL callback optimization
      - #287 demote LOG_E for RRC Release with deprioritisationReq
      - #259 [FHI72] Remove xran F release support
      - #286 NR_PHY: Optimize layer demapping for PDSCH/PUSCH receiver performance
      - #248 Allocate multiple UEs in one slot (DL/UL)
      - #283 Update WLS library dependencies
      - #284 Update OpenAirInterface repository links to the new Duranta Project repository
      - #301 fix(t2): Accept CBs decoded across separate HARQ rounds
      - #302 fix(phy): Fix an uninitialized variable bug in dot_product
      - #303 fix(phy): use simde_mm_setr_epi16 to initialize alpha_128 in rotate_cpx_vector
      - #298 ITTI: cleanup memset after alloc, adopt calloc_or_fail
      - #299 Update the OAI UE config parameters check range with the standard SST and SD values
      - #268 nfapi: support SRS channel reports for 64 gNB antenna elements
      - fix for WLS PR
      - #304 fix(PHY): compare NID2 instead of NID1 in rx_sss_nr() coherence check
      - #277 chore: migrate FlexRIC submodule to GitHub
      - #195 Add cell-level E2SM-KPM measurements
      - #300 CI: Update Aerial setup to 26-1
      
      Closes: #296
      31ffb21a
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'jfiedlerova/ci-update-aerial' into integration_2026_w29 · b989b8b9
      Robert Schmidt authored
      CI: Update Aerial setup to 26-1 (#300)
      
      This PR updates the cuBB image in the Aerial setup to release 26-1.
      Reviewed-By: default avatarRúben Soares Silva <rsilva@allbesmart.pt>
      b989b8b9
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'Noemi2001/Cell-level_KPMs' into integration_2026_w29 · 774094cc
      Robert Schmidt authored
      Add cell-level E2SM-KPM measurements (#195)
      
      This PR adds five 3GPP TS 28.552 cell-level measurements, exposed
      through the E2SM-KPM service model.
      
      The five metrics are:
      
      | Metric              | 3GPP TS 28.552 | Object class | Advertised by             |
      |---------------------|----------------|--------------|---------------------------|
      | `CARR.PDSCHMCSDist` | §5.1.1.12.1    | NRCellDU     | DU, monolithic gNB        |
      | `CARR.PUSCHMCSDist` | §5.1.1.12.2    | NRCellDU     | DU, monolithic gNB        |
      | `L1M.SS-RSRP`       | §5.1.1.22.1    | Beam         | CU, CU-CP, monolithic gNB |
      | `MR.NRScSSSINR`     | §5.1.1.32      | NRCellCU     | CU, CU-CP, monolithic gNB |
      | `RRC.ConnMean`      | §5.1.1.4.1     | NRCellCU     | CU, monolithic gNB        |
      
      Each metric is delivered as one signed commit.
      
      Metrics:
      
      CARR.PDSCHMCSDist — §5.1.1.12.1: PRB-weighted distribution of the MCS
      used on PDSCH, modelled as a 3D histogram over (rank, MCS-table,
      MCS-index). The collection hook in the DL scheduling path increments the
      matching bin by the number of scheduled PDSCH RBs. Carried as E2SM-KPM
      Style 1 / Indication Message Format 1 with the `distBinX/Y/Z`
      measurement labels.
      
      CARR.PUSCHMCSDist — §5.1.1.12.2: Uplink counterpart of the above, over
      (rank, MCS-table-family, MCS-index) for PUSCH. The UL scheduling hook
      increments the bin by the number of scheduled PUSCH RBs.
      
      L1M.SS-RSRP — §5.1.1.22.1: Distribution of the SS-RSRP reported by UEs,
      resolved per SSB beam. The RRC layer accumulates a per-beam histogram
      from each periodic Measurement Report; RSRP level `L` maps to `L − 157`
      dBm (TS 38.133 §10.1.6). The reader returns the per-beam value when the
      `ssbIndex` label is present, or the cell-wide sum over beams otherwise.
      
      MR.NRScSSSINR — §5.1.1.32: Distribution of the NR serving-cell SS-SINR
      reported by UEs. The RRC layer accumulates a per-cell histogram from
      each periodic Measurement Report; level `L` maps to `(L − 46) / 2` dB
      (0.5 dB steps, TS 38.133 §10.1.16).
      
      RRC.ConnMean — §5.1.1.4.1: Mean number of UEs in RRC-CONNECTED state
      over the granularity period. The RRC task samples the connected-UE count
      at a fixed interval and accumulates a running `{sum, samples}`. The
      reported mean is the delta of that cumulative accumulator between two
      consecutive readings.
      
      Notes:
      
      - All five metrics are carried as E2SM-KPM **Measurement Report Style 1**
      - Distribution metrics use the standard `distBinX/Y/Z` (and `ssbIndex`
        where applicable) measurement labels; bins are 1-based on the wire and
        mapped to 0-based array indices. Where TS 28.552 defines no scalar
        aggregate, a request without the required label or a `noLabel`
        subscriptions, are answered with `NO_VALUE`.
      Reviewed-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
      Reviewed-by: default avatarTeodora Vladić <teodora.vladic@openairinterface.org>
      774094cc
    • Jaroslava Fiedlerova's avatar
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/flexric-duranta-change' into integration_2026_w29 · efaf8006
      Robert Schmidt authored
      chore: migrate FlexRIC submodule to GitHub (#277)
      
      This PR migrates the FlexRIC submodule from the EURECOM GitLab
      repository to the GitHub repository under the duranta-project
      organization.
      
      - Update the FlexRIC submodule URL.
      - Remove submodule branch remotes/origin/service-models-integration from
        .gitmodules introduced in the commit 2fef830d. After removing the
        explicit branch configuration, git submodule update --remote will
        follow the default branch of the FlexRIC remote repository (in this
        case, dev)
      Reviewed-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
      Reviewed-by: default avatarTeodora Vladić <teodora.vladic@openairinterface.org>
      efaf8006
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'safwan2mo/fix/sss-nid1-nid2-mismatch' into integration_2026_w29 · 69deb749
      Robert Schmidt authored
      fix(PHY): compare NID2 instead of NID1 in rx_sss_nr() coherence check (#304)
      
      target_Nid_cell was being decomposed with GET_NID1() and compared
      against pss->nid2 (the detected PSS NID2). Since Nid1 != Nid2 in almost
      all cases, the coherence check always failed, forcing an exhaustive
      336-hypothesis SSS search instead of the intended single-candidate fast
      path when validating a known neighbor PCI, and spamming LOG_E on every
      such call.
      
      Closes: #296
      Reviewed-by: default avatarFrancesco Mani <email@francescomani.it>
      69deb749
    • Teodora Vladić's avatar
  3. 16 Jul, 2026 7 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
    • Mohammed Safwan's avatar
      fix(PHY): compare NID2 instead of NID1 in rx_sss_nr() coherence check · a2685262
      Mohammed Safwan authored
      target_Nid_cell was being decomposed with GET_NID1() and compared
      against pss->nid2 (the detected PSS NID2). Since Nid1 != Nid2 in
      almost all cases, the coherence check spuriously failed, forcing an
      exhaustive 336-hypothesis SSS search instead of the intended
      single-candidate fast path when validating a known neighbor PCI, and
      spamming LOG_E on every such call.
      
      Fixes #296
      Signed-off-by: default avatarMohammed Safwan <mohammed.safwan@openairinterface.org>
      a2685262
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'gabri94/aerial-64l-srs' into integration_2026_w29 · 1fc4bb6f
      Robert Schmidt authored
      nfapi: support SRS channel reports for 64 gNB antenna elements (#268)
      
      This MR is part of the reciprocity-based dynamic BF series and goes
      together with #156 and #267.  Additional MRs will follow with the FAPI
      changes to support Dynamic Beamforming, as well as adaptations to the
      scheduler.
      
      SRS-reciprocity workflows with Aerial mMIMO (Cat-B, 64-element arrays)
      return the normalized channel IQ matrix over FAPI, but the
      SRS.indication structs and codec were dimensioned for 8 gNB antenna
      elements. A 64-element report needs up to 272 PRGs × 4 UE ports × 64
      elements × 4 B ≈ 272 KiB, which the current code truncates or silently
      drops.
      
      Changes:
      
      - Buffer dimensioning (nfapi_nr_interface_scf.h): new NFAPI_NR_SRS_MAX_*
        macros size channel_matrix and the SRS report TLV value[] for 64
        antenna elements / 4 UE SRS ports / 272 PRGs. The two buffers are now
        sized consistently (previously the report TLV allowed more UE ports
        than channel_matrix could hold).
      - Integer overflow fixes on the SRS report path, which become fatal at
        these report sizes:
        * unpack_nr_srs_report_tlv_value(): last_idx was int16_t, overflowing
          for reports >= 128 KiB so the copy loop never ran and the report was
            dropped.  Widened to int32_t, and oversized reports are now
            rejected instead of overrunning the value buffer.
        * pack/unpack_nr_srs_normalized_channel_iq_matrix():
          channel_matrix_size was uint16_t (wraps at 64 KiB). Widened to
          uint32_t and bounded by sizeof(channel_matrix).
        * handle_nr_srs_measurements(): the SRS_IND_DEBUG print indexed the
          matrix with a uint16_t, which wraps for Nu·Ng·Np > 65535.
      Reviewed-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
      Reviewed-By: default avatarRúben Soares Silva <rsilva@allbesmart.pt>
      1fc4bb6f
  4. 15 Jul, 2026 19 commits
  5. 14 Jul, 2026 1 commit
    • Jaroslava Fiedlerova's avatar
      Don't require all code blocks to decode in the same HARQ round · 8481bd3e
      Jaroslava Fiedlerova authored
      Since 28cff291, a transport block's
      payload (harq_process->b) is only assembled from its decoded code blocks
      if every single code block reports decodeSuccess in the same HARQ round.
      Previously, each code block was copied into b independently, as soon as
      its own decodeSuccess was true, regardless of the state of the others
      that round.
      
      This gate breaks HARQ combining for T2 that report a failure when
      re-decoding a code block that already succeeded in a previous round. The
      transport block is retransmitted until it is dropped.
      
      Restore per-segment copying into for current round: a code block that
      already succeeded keeps its previously-copied bytes untouched on any
      round where it is not currently reporting success.
      
      Fixes: 28cff291 ("Simplify TB_parameters, c, d, d_to_be_cleared")
      Signed-off-by: default avatarJaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
      8481bd3e
  6. 13 Jul, 2026 5 commits
    • Gabriele Gemmi's avatar
      nfapi: fix integer overflows in SRS report handling for large arrays · 5fb8973d
      Gabriele Gemmi authored
      With 64 gNB antenna elements the SRS channel IQ matrix exceeds the
      ranges the SRS report code path was written for (272 PRGs * 2 UE ports
      * 64 elements * 4 B = 136 KiB per report):
      
      - unpack_nr_srs_report_tlv_value(): last_idx was int16_t, which
        overflows at report lengths >= 128 KiB, so the copy loop never ran
        and the report was silently dropped. Widen to int32_t and reject
        reports larger than the value buffer instead of overrunning it.
      - pack/unpack_nr_srs_normalized_channel_iq_matrix():
        channel_matrix_size was uint16_t and wraps at 64 KiB, truncating the
        matrix. Widen to uint32_t and bound it by sizeof(channel_matrix).
      - handle_nr_srs_measurements(): the SRS_IND_DEBUG print indexed the
        matrix with a uint16_t, which wraps for Nu*Ng*Np > 65535.
      
      Assisted-by: Claude Code:claude-fable-5
      Signed-off-by: default avatarGabriele Gemmi <g.gemmi@northeastern.edu>
      5fb8973d
    • Gabriele Gemmi's avatar
      nfapi: size SRS channel-estimate buffers for 64 gNB antenna elements · 7aff1cd2
      Gabriele Gemmi authored
      The SRS.indication report structs were dimensioned for 8 gNB antenna
      elements: channel_matrix held 272*2*8*4 bytes and the report TLV value
      carried 64 KiB. A massive-MIMO L1 (Aerial) reporting the normalized
      channel IQ matrix for 64 antenna elements needs up to
      272 PRGs * 4 UE ports * 64 elements * 4 B = 272 KiB per report.
      
      Introduce NFAPI_NR_SRS_MAX_* dimensioning macros and size both
      channel_matrix and the report TLV value from them, so the two buffers
      stay consistent (the report TLV previously allowed more UE ports than
      channel_matrix could hold).
      
      Assisted-by: Claude Code:claude-fable-5
      Signed-off-by: default avatarGabriele Gemmi <g.gemmi@northeastern.edu>
      7aff1cd2
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/demote_deprioritisationReq' into integration_2026_w29 · a7713302
      Robert Schmidt authored
      demote LOG_E for RRC Release with deprioritisationReq (#287)
      Reviewed-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
      a7713302
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'rorsc/gtp-optim' into integration_2026_w29 · 05e9ff81
      Robert Schmidt authored
      Optimize syscalls in GTP receiver/sender, GTP F1 UL callback optimization (#280)
      
      Use different syscalls to send data in GTP paths:
      
      - sender: use sendmsg() to pass both header and packet buffers in kernel
        instead of a temporary buffer + memcpy()
      - receiver: use recvmmsg() to receive multiple packets at once, reducing
        syscall overhead in high load scenarios.
      
      Further, for the UL transmission in F1-U, remove a useless malloc() that
      was done for each packet.
      
      on my laptop, this can reduce losses in high throughput scenarios,
      tested with the CU-UP load tester:
      
          ./tests/nr-cuup/nr-cuup-load-test -t 20 -d 1400 -n 1 -u 200
          ./nr-cuup -O ../tests/nr-cuup/load-test.conf
      
      the real numbers are platform specific, i.e., one would need to find a
      maximum value (before/after) to show a change in losses of packets.
      Reviewed-by: default avatarLaurent THOMAS <laurent.thomas@open-cells.com>
      05e9ff81
    • Rupanjali's avatar
      [NR_PHY] Extract common nr_layer_demapping for UE and gNB Rx · 680a944c
      Rupanjali authored
      Move layer de-mapping logic into a shared nr_layer_demapping() in
      nr_phy_common, callable by both UE PDSCH and gNB PUSCH receivers.
      Signed-off-by: default avatarRupanjali <rupanjali.srivastava@openairinterface.org>
      680a944c