From a1712ce774105d1f9734d0dc6dbc1277beac72e1 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 27 Nov 2025 16:14:36 +0100 Subject: [PATCH 1/4] fix utf-ascii problem and clamp text to 80 columns --- doc/handover-tutorial.md | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/doc/handover-tutorial.md b/doc/handover-tutorial.md index 41d6e53aa7..461f9bd568 100644 --- a/doc/handover-tutorial.md +++ b/doc/handover-tutorial.md @@ -209,8 +209,8 @@ instead of waiting for UE measurement report.) Our CI setup consists of: - 2 USRPs B210 that are synchronized by connecting them to an Octoclock over 10MHz refrence and a PPS signal. The RU hosts are synchronized via NTP. -- Mini-Circuits RC4DAT-6G-60 programmable attenuator. To control the digital attenuator, - a Python script was developed `ci-scripts/attenuatorctl.py`. +- Mini-Circuits RC4DAT-6G-60 programmable attenuator. To control the digital + attenuator, a Python script was developed `ci-scripts/attenuatorctl.py`. - Quectel RM520 as a UE. - The setup is run using Docker `ci-scripts/yaml_files/5g_sa_f1_b210_ho`. @@ -328,7 +328,8 @@ nr_measurement_configuration = { }; ``` -`@include` this configuration file inside the gNB section of CU file as shown below. +`@include` this configuration file inside the gNB section of CU file as shown +below. ``` plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff })}); @@ -390,7 +391,7 @@ are as follows: on UTC time or a timer-based solution, which can also be applied jointly (or not) with another trigger as the measurement-based trigger. The timer-based handover trigger considers the deterministic satellite movement to predict - the time duration for which the satellite’s footprint covers a certain zone. + the time duration for which the satellite's footprint covers a certain zone. - **Timing advance value-based triggering**: This method uses the timing advance value (independently or jointly with another trigger) to trigger a @@ -432,14 +433,14 @@ We assume: * Two independent gNBs connected to the same 5GC via N2 interface. * A UE initially connected to gNB-PCI0, which will be handed over to gNB-PCI1. -* Handover is triggered by either a decision based measurement event (e.g. A3) or -telnet command. +* Handover is triggered by either a decision based measurement event (e.g. A3) +or telnet command. ## Steps to run N2 handover with OAI UE **Note for same-machine setup:** When running both gNBs on the same machine, -you need to assign a unique IP address to the second gNB to avoid network conflicts. -For example: +you need to assign a unique IP address to the second gNB to avoid network +conflicts. For example: ```sh sudo ip addr add 192.168.71.180/24 dev rfsim5g-public @@ -490,15 +491,20 @@ From gNB-PCI0, trigger handover on target gNB with PCI 1 for UE ID 1: ```sh echo ci trigger_n2_ho 1,1 | nc 127.0.0.1 9090 && echo ``` -where the input parameters correspond to the PCI of the neighbour cell and the RRC ID of the UE. +where the input parameters correspond to the PCI of the neighbor cell and the +RRC ID of the UE. This will initiate the N2 handover on the source gNB. ## Neighbour list and measurement configuration -Make sure the configuration file contains a neighbour list and measurement configuration, e.g. [neighbour-config-rfsim.conf](../../ci-scripts/conf_files/neighbour-config.conf). -This configuration can also be present in a different file and included in the gNB configuration file with `@include "neighbour-config-rfsim.conf"`. +Make sure the configuration file contains a neighbour list and measurement +configuration, e.g. [neighbour-config-rfsim.conf](../../ci-scripts/conf_files/neighbour-config.conf). +This configuration can also be present in a different file and included in the +gNB configuration file with `@include "neighbour-config-rfsim.conf"`. -For each gNB there is a `neighbour_cell_configuration` linked to its serving cell ID. +For each gNB there is a `neighbour_cell_configuration` linked to its serving +cell ID. -See the example above for `neighbour-config-ho.conf`. The same configuration is for both F1 and N2 handover. +See the example above for `neighbour-config-ho.conf`. The same configuration +is for both F1 and N2 handover. From f917a2a2faed2342ce6159bbafc921a042a7202b Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 28 Nov 2025 11:06:18 +0100 Subject: [PATCH 2/4] fix: use correct variables' names - timeToTrigger must be named time_to_trigger - cell_id must be named physCellId --- doc/handover-tutorial.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/handover-tutorial.md b/doc/handover-tutorial.md index 461f9bd568..92762f7d88 100644 --- a/doc/handover-tutorial.md +++ b/doc/handover-tutorial.md @@ -241,14 +241,14 @@ The below configuration further enables periodic measurements, A2 event Better than Serving"). The A2 event can be disabled by setting `enable = 0`. The A3 event cannot be disabled as of now. It can be made -specific to cells or set to `cell_id = -1` which means "any cell". +specific to cells or set to `physCellId = -1` which means "any cell". `hysteresis` is a margin added to the serving cell measurements to prevent unnecessary or frequent handovers. It ensures that the neighbouring cell must show sufficiently better signal quality before a handover is triggered. It is an integer between 0 and 30. -`timeToTrigger` the time during which specific criteria for the event +`time_to_trigger` the time during which specific criteria for the event needs to be met in order to trigger a measurement report. It is an enumerated parameter and in the configuration below it is set to 1 which corresponds to `ms40` or 40 milliseconds. @@ -312,17 +312,17 @@ nr_measurement_configuration = { }; A2 = { - enable = 1; - threshold = 60; - timeToTrigger = 1; + enable = 1; + threshold = 60; + time_to_trigger = 1; }; A3 = ( { - cell_id = -1; - offset = 10; - hysteresis = 0; - timeToTrigger = 1; + physCellId = -1; + offset = 10; + hysteresis = 0; + time_to_trigger = 1; } ) }; From b91a4c33bd48a501d86c76eb7c116f57c587f300 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 28 Nov 2025 11:10:52 +0100 Subject: [PATCH 3/4] fix configuration files 'timeToTrigger' has to be 'time_to_trigger'. For A3 events, 'cell_id' has to be 'physCellId' and the value has to be the one of the physical cell ID. --- ci-scripts/conf_files/neighbour-config-ho.conf | 6 +++--- ci-scripts/conf_files/neighbour-config.conf | 6 +++--- .../GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ci-scripts/conf_files/neighbour-config-ho.conf b/ci-scripts/conf_files/neighbour-config-ho.conf index 2490ce1883..07d58e14e5 100644 --- a/ci-scripts/conf_files/neighbour-config-ho.conf +++ b/ci-scripts/conf_files/neighbour-config-ho.conf @@ -42,13 +42,13 @@ nr_measurement_configuration = { A2 = { enable = 1; threshold = 110; - timeToTrigger = 1; + time_to_trigger = 1; }; A3 = ({ - cell_id = -1; #Default + physCellId = -1; #Default offset = 10; hysteresis = 0; - timeToTrigger = 1 + time_to_trigger = 1 }) }; diff --git a/ci-scripts/conf_files/neighbour-config.conf b/ci-scripts/conf_files/neighbour-config.conf index a498dbf157..9a05f01486 100644 --- a/ci-scripts/conf_files/neighbour-config.conf +++ b/ci-scripts/conf_files/neighbour-config.conf @@ -57,19 +57,19 @@ nr_measurement_configuration = { A2 = { enable = 1; threshold = 60; - timeToTrigger = 1; + time_to_trigger = 1; }; A3 = ({ physCellId = -1; #Default offset = 10; hysteresis = 0; - timeToTrigger = 1 + time_to_trigger = 1 }, { physCellId = 2; offset = 5; hysteresis = 1; - timeToTrigger = 2 + time_to_trigger = 2 }) }; diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf index cff9d2b293..641fbb2003 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf @@ -57,21 +57,21 @@ nr_measurement_configuration = { A2 = { enable = 1; threshold = 60; - timeToTrigger = 1; + time_to_trigger = 1; }; A3 = ( { - cell_id = 720898; # neighbour of gNB 0xe00 + physCellId = 1; # neighbour of gNB 0xe00 offset = 10; hysteresis = 0; - timeToTrigger = 1; + time_to_trigger = 1; }, { - cell_id = 12345678; # neighbour of gNB 0xb00 + physCellId = 0; # neighbour of gNB 0xb00 offset = 5; hysteresis = 1; - timeToTrigger = 2; + time_to_trigger = 2; } ); }; From 4e4023a455036a01a302b4e9540284c1be2e5e8a Mon Sep 17 00:00:00 2001 From: Reem Bahsoun Date: Wed, 14 Jan 2026 14:02:56 +0100 Subject: [PATCH 4/4] Align config fields in N2 HO config files --- .../conf_files/gnb-cucp.sa.e1-ho-n2.conf | 16 ++++++------ .../gnb.sa.band77.51prb.usrpb200.n2-ho.conf | 26 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf b/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf index ad4cca969e..3ee84d0b85 100644 --- a/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf +++ b/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf @@ -21,10 +21,10 @@ gNBs = tr_s_preference = "f1"; - local_s_address = "192.168.71.150"; + local_s_address = "192.168.71.150"; remote_s_address = "192.168.71.171"; - local_s_portd = 2153; - remote_s_portd = 2153; + local_s_portd = 2153; + remote_s_portd = 2153; # ------- SCTP definitions SCTP : @@ -41,7 +41,7 @@ gNBs = E1_INTERFACE = ( { - type = "cp"; + type = "cp"; ipv4_cucp = "192.168.71.150"; port_cucp = 38462; ipv4_cuup = "0.0.0.0"; # multiple CU-UPs @@ -75,8 +75,8 @@ security = { log_config : { global_log_level = "info"; - pdcp_log_level = "info"; - rrc_log_level = "info"; - f1ap_log_level = "info"; - ngap_log_level = "info"; + pdcp_log_level = "info"; + rrc_log_level = "info"; + f1ap_log_level = "info"; + ngap_log_level = "info"; }; diff --git a/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf b/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf index 577e23a87d..3966cebc6b 100644 --- a/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf +++ b/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf @@ -30,26 +30,26 @@ gNBs = # downlinkConfigCommon #frequencyInfoDL # this is 3610.56 MHz - absoluteFrequencySSB = 679104; - dl_frequencyBand = 77; + absoluteFrequencySSB = 679104; + dl_frequencyBand = 77; # this is 3599.94 MHz - dl_absoluteFrequencyPointA = 678388; + dl_absoluteFrequencyPointA = 678388; #scs-SpecificCarrierList - dl_offstToCarrier = 0; + dl_offstToCarrier = 0; # subcarrierSpacing # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - dl_subcarrierSpacing = 1; - dl_carrierBandwidth = 51; + dl_subcarrierSpacing = 1; + dl_carrierBandwidth = 51; #initialDownlinkBWP #genericParameters # this is RBstart=27,L=48 (275*(L-1))+RBstart - initialDLBWPlocationAndBandwidth = 13750; + initialDLBWPlocationAndBandwidth = 13750; # subcarrierSpacing # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - initialDLBWPsubcarrierSpacing = 1; + initialDLBWPsubcarrierSpacing = 1; #pdcch-ConfigCommon - initialDLBWPcontrolResourceSetZero = 12; - initialDLBWPsearchSpaceZero = 0; + initialDLBWPcontrolResourceSetZero = 12; + initialDLBWPsearchSpaceZero = 0; #uplinkConfigCommon #frequencyInfoUL @@ -197,10 +197,10 @@ RUs = ( att_rx = 0; bands = [77]; max_pdschReferenceSignalPower = -27; - max_rxgain = 114; + max_rxgain = 114; eNB_instances = [0]; - clock_src = "external"; - time_src = "external"; + clock_src = "external"; + time_src = "external"; } );