1. 18 Sep, 2025 7 commits
    • Guido Casati's avatar
      Add NGAP Handover Required message NGAP encoder and RRC callback on source NG-RAN · 20e534d4
      Guido Casati authored
      This commit introduces the NG Mobility Management Procedure known as
      Handover Preparation. The outbound message is sent by the source NG-RAN
      and is known as Handover Required.
      
      * introduce NGAP library for Mobility Management
      * introduce NGAP IEs encoder functions for Handover Required and relevant common IEs
      * handle RRC trigger in NGAP and Send NGAP Handover Required to the AMF
      Co-authored-by: default avatarbatuhan duyuler <batuhan.duyuler@firecell.io>
      20e534d4
    • Guido Casati's avatar
      cfb654e7
    • Guido Casati's avatar
      ff5b2bc8
    • Guido Casati's avatar
      HO Preparation: allocate HO Context in the F1 trigger rather than nr_initiate_handover · 2f4f1770
      Guido Casati authored
      During the N2 HO review has been found that the HO context
      was not allocated at trigger time but later in the flow. This
      might lead to issues in some scenarios (e.g. in N2 HO)
      and it was fixed in this commit.
      2f4f1770
    • Guido Casati's avatar
      HO Preparation: do verify_section_notset of neighbour and measurement config for DU · 26698d4f
      Guido Casati authored
      During the review of N2 HO MR it has been found that there was no
      check on the absence of the neighbour and measurement section in the DU config file.
      26698d4f
    • Robert Schmidt's avatar
      Add transm_timout timer to set UE to UL failure after timeout · 25380e80
      Robert Schmidt authored
      Introduce a new timer for the use case where a UE should not be
      scheduled anymore after a certain time. This is the case, for instance,
      during handover, where the "source DU" forwards the RRCReconfiguration
      and should stop scheduling this UE after some time.
      
      Originally, transm_interrupt was introduced in 5c6d90aa ("Use
      NR_timer_t for UE transmission interrupt, e.g., RRC processing") to stop
      scheduling a UE.
      
      Commit 004403c8 ("Implement F1 UE Ctxt Modif Transmission Action
      Indicator") reused this timer in an attempt to save code with an
      "interrupt follow action".
      
      In commit 89ebbb41 ("Do not trigger ul failure in measgap scheduling
      and standardize the verification if MAC is active in other scheduling
      functions"), the transm_interrupt timer is used to not schedule a UE
      through function nr_mac_ue_is_active(). This led to the UE not being
      forwarded the RRCReconfiguration, effectively breaking handover, as the
      message never reaches the UE. By using a new timer, the intended
      functionality is restored.
      
      Fixes: 89ebbb41 ("Do not trigger ul failure in measgap scheduling
          and standardize the verification if MAC is active in other
          scheduling functions")
      25380e80
    • Robert Schmidt's avatar
      Remove interrupt_action · 98462c20
      Robert Schmidt authored
      Remove this flag, as it is not used as of this commit, and introduces
      confusion (see next commit: we reused the trans_interrupt timer for
      the transmission action indicator stop action, where the UE should stay
      active, while it is *not* when transm_interrupt is active).
      98462c20
  2. 15 Sep, 2025 2 commits
  3. 12 Sep, 2025 28 commits
    • Robert Schmidt's avatar
      Merge branch 'integration_2025_w37' into 'develop' · 206c7667
      Robert Schmidt authored
      Integration: `2025.w37`
      
      * !3514 NR UE: add support for PDSCH rate matching with NZP CSI-RS
      * !3630 feat(ldpc_aal): Do not try EAL init if FHI 7.2 is enabled
      * !3634 reset MSG3 C-RNTI flag in case of failure
      * !3566 fix 600 cppcheck notifications
      * !3633 Fix PLMN print in select_amf
      * !3631 Revert "Removed TRP-scheme byte from UL BF PDU to Interop with Aerial 25-1 (FAPI 10.02)"
      * !3622 Populate sampled_ue_antennas
      * !3601 gNB: adaptive DL/UL MCS based on reported SSB-SINR and measured PUSCH SNR
      * !3637 fix bug in computing number of LCG IDs with data at UE
      * !3635 Fixes and updates for UL scheduling, notably DSUUU
      * !3607 Reworking BWP configuration
      * !3531 Refactor measConfig
      * !3612 CI: Creation of F1 Handover pipeline
      * !3611 CI: Generalize PhySim tests, run PhySims on Gracehopper
      
      Closes #985 and #975
      
      See merge request oai/openairinterface5g!3636
      206c7667
    • Robert Schmidt's avatar
      Add bands for neighbour configuration in HO CI pipeline · 166589c2
      Robert Schmidt authored
      Since !3531, the band is mandatory in a neighbour configuration.
      
      See also: fd4de3c7 ("Add support for band in neighbourConfiguration")
      166589c2
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/physim-gracehopper' into integration_2025_w37 (!3611) · e486557f
      Robert Schmidt authored
      CI: Generalize PhySim tests, run PhySims on Gracehopper
      
      This changeset generalizes/harmonizes the CI infrastructure for physim
      testing, and adds a new pipeline for physim tests on Gracehopper
      machines.
      
      Specifically:
      
      - Refactor the existing CI code for running and analyzing physical
        simulators. The existing code assumed those tests are deployed using
        OpenShift. Instead, OpenShift/Helm-specificities (e.g., running a
        "release") have been removed, and instead of hardcoding the deployment
        of the physical simulators using a script for Helm, the function takes
        any script that can deploy using Helm/docker/from source. The overall
        appearance is the same.
      - Add a new pipeline RAN-PhySim-GraceHopper-5G that executes physical
        simulators on gracehopper. Reporting is done in the same way as for
        existing physical simulators (e.g., like in the RAN-PhySim-Cluster-5G
        pipeline), but deployed in docker instead of helm.
        -> some tests don't work reliably on ARM yet and are skipped
      - the RAN-gNB-N300-Timing-Phytest-LDPC pipeline has been reworked to use
        the same code for testing T2 offload, with ctest, and the same
        reporting.
      - the CUDA LDPC test XML has been removed, as these tests don't work
        reliably.
      - add a new macro add_timed_physim_test() that allows to define
        thresholds to be checked, so that ctest will check for them. see the
        documentation for more information
      e486557f
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/CI-HO-setup' into integration_2025_w37 (!3612) · 230a969b
      Robert Schmidt authored
      CI: Creation of F1 Handover pipeline
      
      In this MR we are modifying/adding all the required files (.xml, .conf,
      .yml) in order to create a pipeline on Jenkins that allows us to test
      OTA F1 handover.
      230a969b
    • Robert Schmidt's avatar
    • Robert Schmidt's avatar
      31aaa4ed
    • Robert Schmidt's avatar
      Slight restructuring of the physim doc · 998018db
      Robert Schmidt authored
      Move info about pipelines to the introduction instead of somewhere in
      the middle. Add some filler text, and fix indentation headings.
      998018db
    • Robert Schmidt's avatar
      Print results of physims · 5beb8bf3
      Robert Schmidt authored
      Remove the runtime, which is not interesting, and add instead
      - test name and if the test failed
      - the threshold checks, if any, and
      - possible additional information about test failures.
      5beb8bf3
    • Robert Schmidt's avatar
      Pass CTest test description in custom property or environment · eb9e4ef9
      Robert Schmidt authored
      Prior to this change, each test would have, as label, it's description.
      This leads to many labels, which are normally reserved for grouping
      tests. Move the description into a custom property instead.
      
      Since we rely on the JSON output for the generation of HTML reports, we
      need to also extract the description from the generated JSON. However,
      custom properties are only logged starting from cmake 3.30. For
      back-wards compatibility, write an additional, separate environment
      variable TEST_DESCRIPTION from which the description can be read as a
      fallback.
      
      For the add_timed_physim_test(), this has been already done in a parent
      commit.
      eb9e4ef9
    • Robert Schmidt's avatar
      Put physim status info in separate box · e5139b6f
      Robert Schmidt authored
      A follow-up commit will introduce a change to print timing logs in the
      HTML (if present in the test). Prepare for this with separate box.
      e5139b6f
    • Robert Schmidt's avatar
      Physim deploy(): add deployment timeout · 15befb41
      Robert Schmidt authored
      15befb41
    • Robert Schmidt's avatar
      Rename to analyze_physim() · e824a637
      Robert Schmidt authored
      e824a637
    • Robert Schmidt's avatar
      Remove existing physim offload tests · b00dd803
      Robert Schmidt authored
      After the parent commit, there is no need for these XML files anymore.
      The tests are driven by ctest instead.
      b00dd803
    • Robert Schmidt's avatar
      Add new T2 Offload test · 42dbaaf7
      Robert Schmidt authored
      42dbaaf7
    • Robert Schmidt's avatar
      Add script to run PhySims from source · adabb6a9
      Robert Schmidt authored
      physim
      
      script more
      adabb6a9
    • Robert Schmidt's avatar
      Import existing timing thresholds for offload tests · da644bc9
      Robert Schmidt authored
      Imported using commands:
      
          xmlstarlet sel -t \
            -m '//testCaseList/testCase[class="Run_Physim"]' \
            -v "concat('check_physim_threshold(physim.5g-offload.',physim_test,'.testX.Y \"DLSCH encoding time\" \"< ', physim_time_threshold, '\")')" \
            -n t2_offload_enc_nr_dlsim.xml >> ../../openair1/SIMULATION/tests/ThresholdsOffload.cmake
      
          xmlstarlet sel -t \
            -m '//testCaseList/testCase[class="Run_Physim"]' \
            -v "concat('check_physim_threshold(physim.5g-offload.',physim_test,'.testX.Y \"ULSCH total decoding time\" \"< ', physim_time_threshold, '\")')" \
            -n t2_offload_dec_nr_ulsim.xml >> ../../openair1/SIMULATION/tests/ThresholdsOffload.cmake
      da644bc9
    • Robert Schmidt's avatar
      Clean up output of xmlstarlet command · 9528ccce
      Robert Schmidt authored
      9528ccce
    • Robert Schmidt's avatar
      Import Offload unit tests into CTest · a7f0a1a2
      Robert Schmidt authored
      The unit tests have been imported with this command:
      
          xmlstarlet sel -t
            -m '//testCaseList/testCase[class="Run_Physim"]' \
            -v "concat('add_timed_physim_test(physim.5g-offload.',physim_test,'.testX.Y \"',desc,'\" ',physim_test,' ',physim_run_args,')')" \
            -n t2_offload_enc_nr_dlsim.xml t2_offload_dec_nr_ulsim.xml >> ../../openair1/SIMULATION/tests/CMakeLists.txt
      
      The next commit will further cleanup this output. I commit it like this
      for verification purposes.
      a7f0a1a2
    • Robert Schmidt's avatar
      Provide add_timed_physim_test() in cmake · 55cebe6e
      Robert Schmidt authored
      Add two new macros that allow to register physim tests for ctest,
      including timing thresholds that should be fulfilled.
      
      First, add_timed_physim_test() registers a new test using a helper
      script RunTimedTest.cmake. This is because after test execution, we need
      to analyze logs, and the recommended way to do multiple steps in one
      test is via a helper cmake script:
      https://cmake.org/pipermail/cmake-developers/2016-February/027816.html
      
      Second, check_physim_threshold() adds new thresholds. It takes a text to
      be parsed, and a condition (e.g., "< 20") to check for the number
      following the threshold (which is assumed to be present right after the
      threshold). It uses a test property to count the total number of checks
      (limiting them to 10), and sets environment variables for the script.  I
      initially planned to use a test property for checks, but those are only
      valid in the same directory, and RunTimedTest.cmake seems to be assumed
      by cmake to be "elsewhere", hence I needed to resort to environment
      variables.
      
      RunTimedTest.cmake is called through cmake with the test parameters and
      checks. It re-constructs a list of checks [1], runs the test, and pipes
      the log into a separate script that is passed all checks (see below).
      Afterwards, it verifies that both the test and script passed.
      
      A script analyze-timing.sh builds an awk script from the checks passed.
      The script analyzes each line of the test output for the threshold, and
      compares against the threshold. analyze-timing.sh returns success if all
      checks passed.
      
      [1] I did not manage to pass a "list" of checks in a single environment
      variable through the check_physim_threshold(), which would be simpler.
      55cebe6e
    • Robert Schmidt's avatar
      Remove LDPC GPU physim tests · 48be94a8
      Robert Schmidt authored
      Many of these tests do not pass (ldpctest returns non-zero output).
      Moving to ctest would make all these tests and hence the pipeline fail.
      48be94a8
    • Robert Schmidt's avatar
      add_physim_test(): change signature for full test name · b7cb7469
      Robert Schmidt authored
      Change signature of the macro to take the full test name, a separate
      description (previously called a label?), and the executable and test
      invocation. The overall signature becomes easier.
      
      The rational for the full test name is that a later commit will
      introduce the possibility to define physim tests that are checked for
      specific times, in which case we need to reuse the test name. Thus,
      using the full name from the beginning leads to more clarity, even
      though they are a bit longer.
      
      Add an additional safety check that the given simulator is actually a
      target defined within the project (in other words, it actually exists).
      
      Update the documentation correspondingly.
      b7cb7469
    • Robert Schmidt's avatar
      Add new Physim test for gracehopper · 4809ffc9
      Robert Schmidt authored
      4809ffc9
    • Robert Schmidt's avatar
      Deployment script of physims via docker · e6a0a1ca
      Robert Schmidt authored
      e6a0a1ca
    • Robert Schmidt's avatar
      Add Dockerfile for physim build in CI · 89321fe8
      Robert Schmidt authored
      89321fe8
    • Robert Schmidt's avatar
      Move PhySim definition to openair1/SIMULATION/tests · 1cfca6ce
      Robert Schmidt authored
      Most (but not all) physical simulators are defined under
      openair1/SIMULATION/. Defining physical simulators below there seems to
      be the more "obvious" directory anyway, as the physical simulators are
      
          openair1/SIMULATION/tests
          Phy(L1)  Sim        tests => PhySim (tests)
      1cfca6ce
    • Robert Schmidt's avatar
      Query system info · 91069fff
      Robert Schmidt authored
      91069fff
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/refactor-measConfig' into integration_2025_w37 (!3531) · b60572d1
      Robert Schmidt authored
      Refactor measConfig
      
      - Refactor and minor improvements in get_MeasConfig function;
      - Add support for band in neighbourConfiguration (It is currently
        possible to handover cells with different frequencies, as long as they
        are in the same band, but this MR allows the handover to also be done
        between cells in different bands).
      b60572d1
    • Robert Schmidt's avatar
      Merge remote-tracking branch 'origin/reworking_BWP_configuration' into integration_2025_w37 (!3607) · 99962b55
      Robert Schmidt authored
      Reworking BWP configuration
      
      This MR reworks the configuration via fail of additional BWPs. Moreover, it
      allows for a single BWP to be configured for a given UE at a given time (BWP
      switch possible only via reconfiguration). It also reworks PTRS configuration
      for consistency with the BWP one.
      99962b55
  4. 11 Sep, 2025 3 commits