Merge remote-tracking branch 'origin/fix-handover-doc' into integration_2026_w03 (!3788)
Fix handover documentation and configuration files for event configuration
This commit is contained in:
@@ -21,10 +21,10 @@ gNBs =
|
|||||||
|
|
||||||
tr_s_preference = "f1";
|
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";
|
remote_s_address = "192.168.71.171";
|
||||||
local_s_portd = 2153;
|
local_s_portd = 2153;
|
||||||
remote_s_portd = 2153;
|
remote_s_portd = 2153;
|
||||||
|
|
||||||
# ------- SCTP definitions
|
# ------- SCTP definitions
|
||||||
SCTP :
|
SCTP :
|
||||||
@@ -41,7 +41,7 @@ gNBs =
|
|||||||
E1_INTERFACE =
|
E1_INTERFACE =
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
type = "cp";
|
type = "cp";
|
||||||
ipv4_cucp = "192.168.71.150";
|
ipv4_cucp = "192.168.71.150";
|
||||||
port_cucp = 38462;
|
port_cucp = 38462;
|
||||||
ipv4_cuup = "0.0.0.0"; # multiple CU-UPs
|
ipv4_cuup = "0.0.0.0"; # multiple CU-UPs
|
||||||
@@ -75,8 +75,8 @@ security = {
|
|||||||
|
|
||||||
log_config : {
|
log_config : {
|
||||||
global_log_level = "info";
|
global_log_level = "info";
|
||||||
pdcp_log_level = "info";
|
pdcp_log_level = "info";
|
||||||
rrc_log_level = "info";
|
rrc_log_level = "info";
|
||||||
f1ap_log_level = "info";
|
f1ap_log_level = "info";
|
||||||
ngap_log_level = "info";
|
ngap_log_level = "info";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -30,26 +30,26 @@ gNBs =
|
|||||||
# downlinkConfigCommon
|
# downlinkConfigCommon
|
||||||
#frequencyInfoDL
|
#frequencyInfoDL
|
||||||
# this is 3610.56 MHz
|
# this is 3610.56 MHz
|
||||||
absoluteFrequencySSB = 679104;
|
absoluteFrequencySSB = 679104;
|
||||||
dl_frequencyBand = 77;
|
dl_frequencyBand = 77;
|
||||||
# this is 3599.94 MHz
|
# this is 3599.94 MHz
|
||||||
dl_absoluteFrequencyPointA = 678388;
|
dl_absoluteFrequencyPointA = 678388;
|
||||||
#scs-SpecificCarrierList
|
#scs-SpecificCarrierList
|
||||||
dl_offstToCarrier = 0;
|
dl_offstToCarrier = 0;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
dl_subcarrierSpacing = 1;
|
dl_subcarrierSpacing = 1;
|
||||||
dl_carrierBandwidth = 51;
|
dl_carrierBandwidth = 51;
|
||||||
#initialDownlinkBWP
|
#initialDownlinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||||
initialDLBWPlocationAndBandwidth = 13750;
|
initialDLBWPlocationAndBandwidth = 13750;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -197,10 +197,10 @@ RUs = (
|
|||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [77];
|
bands = [77];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 114;
|
max_rxgain = 114;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
clock_src = "external";
|
clock_src = "external";
|
||||||
time_src = "external";
|
time_src = "external";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -42,13 +42,13 @@ nr_measurement_configuration = {
|
|||||||
A2 = {
|
A2 = {
|
||||||
enable = 1;
|
enable = 1;
|
||||||
threshold = 110;
|
threshold = 110;
|
||||||
timeToTrigger = 1;
|
time_to_trigger = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
A3 = ({
|
A3 = ({
|
||||||
cell_id = -1; #Default
|
physCellId = -1; #Default
|
||||||
offset = 10;
|
offset = 10;
|
||||||
hysteresis = 0;
|
hysteresis = 0;
|
||||||
timeToTrigger = 1
|
time_to_trigger = 1
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -57,19 +57,19 @@ nr_measurement_configuration = {
|
|||||||
A2 = {
|
A2 = {
|
||||||
enable = 1;
|
enable = 1;
|
||||||
threshold = 60;
|
threshold = 60;
|
||||||
timeToTrigger = 1;
|
time_to_trigger = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
A3 = ({
|
A3 = ({
|
||||||
physCellId = -1; #Default
|
physCellId = -1; #Default
|
||||||
offset = 10;
|
offset = 10;
|
||||||
hysteresis = 0;
|
hysteresis = 0;
|
||||||
timeToTrigger = 1
|
time_to_trigger = 1
|
||||||
}, {
|
}, {
|
||||||
physCellId = 2;
|
physCellId = 2;
|
||||||
offset = 5;
|
offset = 5;
|
||||||
hysteresis = 1;
|
hysteresis = 1;
|
||||||
timeToTrigger = 2
|
time_to_trigger = 2
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+28
-22
@@ -209,8 +209,8 @@ instead of waiting for UE measurement report.)
|
|||||||
Our CI setup consists of:
|
Our CI setup consists of:
|
||||||
- 2 USRPs B210 that are synchronized by connecting them to an Octoclock over
|
- 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.
|
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,
|
- Mini-Circuits RC4DAT-6G-60 programmable attenuator. To control the digital
|
||||||
a Python script was developed `ci-scripts/attenuatorctl.py`.
|
attenuator, a Python script was developed `ci-scripts/attenuatorctl.py`.
|
||||||
- Quectel RM520 as a UE.
|
- Quectel RM520 as a UE.
|
||||||
- The setup is run using Docker `ci-scripts/yaml_files/5g_sa_f1_b210_ho`.
|
- The setup is run using Docker `ci-scripts/yaml_files/5g_sa_f1_b210_ho`.
|
||||||
|
|
||||||
@@ -241,14 +241,14 @@ The below configuration further enables periodic measurements, A2 event
|
|||||||
Better than Serving").
|
Better than Serving").
|
||||||
The A2 event can be disabled by setting `enable = 0`.
|
The A2 event can be disabled by setting `enable = 0`.
|
||||||
The A3 event cannot be disabled as of now. It can be made
|
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
|
`hysteresis` is a margin added to the serving cell measurements to
|
||||||
prevent unnecessary or frequent handovers. It ensures that the neighbouring
|
prevent unnecessary or frequent handovers. It ensures that the neighbouring
|
||||||
cell must show sufficiently better signal quality before a handover is
|
cell must show sufficiently better signal quality before a handover is
|
||||||
triggered. It is an integer between 0 and 30.
|
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
|
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
|
parameter and in the configuration below it is set to 1 which corresponds to
|
||||||
`ms40` or 40 milliseconds.
|
`ms40` or 40 milliseconds.
|
||||||
@@ -312,23 +312,24 @@ nr_measurement_configuration = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
A2 = {
|
A2 = {
|
||||||
enable = 1;
|
enable = 1;
|
||||||
threshold = 60;
|
threshold = 60;
|
||||||
timeToTrigger = 1;
|
time_to_trigger = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
A3 = (
|
A3 = (
|
||||||
{
|
{
|
||||||
cell_id = -1;
|
physCellId = -1;
|
||||||
offset = 10;
|
offset = 10;
|
||||||
hysteresis = 0;
|
hysteresis = 0;
|
||||||
timeToTrigger = 1;
|
time_to_trigger = 1;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
`@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 })});
|
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
|
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
|
not) with another trigger as the measurement-based trigger. The timer-based
|
||||||
handover trigger considers the deterministic satellite movement to predict
|
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
|
- **Timing advance value-based triggering**: This method uses the timing
|
||||||
advance value (independently or jointly with another trigger) to trigger a
|
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.
|
* 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.
|
* 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
|
* Handover is triggered by either a decision based measurement event (e.g. A3)
|
||||||
telnet command.
|
or telnet command.
|
||||||
|
|
||||||
## Steps to run N2 handover with OAI UE
|
## Steps to run N2 handover with OAI UE
|
||||||
|
|
||||||
**Note for same-machine setup:** When running both gNBs on the same machine,
|
**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.
|
you need to assign a unique IP address to the second gNB to avoid network
|
||||||
For example:
|
conflicts. For example:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo ip addr add 192.168.71.180/24 dev rfsim5g-public
|
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
|
```sh
|
||||||
echo ci trigger_n2_ho 1,1 | nc 127.0.0.1 9090 && echo
|
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.
|
This will initiate the N2 handover on the source gNB.
|
||||||
|
|
||||||
## Neighbour list and measurement configuration
|
## 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).
|
Make sure the configuration file contains a neighbour list and measurement
|
||||||
This configuration can also be present in a different file and included in the gNB configuration file with `@include "neighbour-config-rfsim.conf"`.
|
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.
|
||||||
|
|||||||
@@ -57,21 +57,21 @@ nr_measurement_configuration = {
|
|||||||
A2 = {
|
A2 = {
|
||||||
enable = 1;
|
enable = 1;
|
||||||
threshold = 60;
|
threshold = 60;
|
||||||
timeToTrigger = 1;
|
time_to_trigger = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
A3 = (
|
A3 = (
|
||||||
{
|
{
|
||||||
cell_id = 720898; # neighbour of gNB 0xe00
|
physCellId = 1; # neighbour of gNB 0xe00
|
||||||
offset = 10;
|
offset = 10;
|
||||||
hysteresis = 0;
|
hysteresis = 0;
|
||||||
timeToTrigger = 1;
|
time_to_trigger = 1;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
cell_id = 12345678; # neighbour of gNB 0xb00
|
physCellId = 0; # neighbour of gNB 0xb00
|
||||||
offset = 5;
|
offset = 5;
|
||||||
hysteresis = 1;
|
hysteresis = 1;
|
||||||
timeToTrigger = 2;
|
time_to_trigger = 2;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user