From 05f10decee118b181006e5a1670ece0729b830b4 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 14 Aug 2024 17:02:33 +0200 Subject: [PATCH] Add handover tutorial Co-authored-by: rmagueta --- doc/README.md | 1 + doc/RRC/ho.mmd | 9 ++ doc/RRC/ho.png | Bin 0 -> 7905 bytes doc/handover-tutorial.md | 329 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 339 insertions(+) create mode 100644 doc/RRC/ho.mmd create mode 100644 doc/RRC/ho.png create mode 100644 doc/handover-tutorial.md diff --git a/doc/README.md b/doc/README.md index ba7e5fbd12..7fc28f061a 100644 --- a/doc/README.md +++ b/doc/README.md @@ -53,6 +53,7 @@ There is some general information in the [OpenAirInterface Gitlab Wiki](https:// - [How to run with E2 agent](../openair2/E2AP/README.md) - [How to run the physical simulators](./physical-simulators.md) - [How to setup OAI with Nvidia Aerial and Foxconn](./Aerial_FAPI_Split_Tutorial.md) +- [How to do a handover](./handover-tutorial.md) Legacy unmaintained files: - [`L2NFAPI_NOS1.md`](./L2NFAPI_NOS1.md), [`L2NFAPI_S1.md`](./L2NFAPI_S1.md): diff --git a/doc/RRC/ho.mmd b/doc/RRC/ho.mmd new file mode 100644 index 0000000000..f86e36a087 --- /dev/null +++ b/doc/RRC/ho.mmd @@ -0,0 +1,9 @@ +block-beta + columns 5 + space space DU0 space UE + CU space space space space + space space DU1 space pos["new pos"] + CU<-- "F1" -->DU0 + CU<-- "F1" -->DU1 + DU0-- "Uu" -->UE + UE-- "move" -->pos diff --git a/doc/RRC/ho.png b/doc/RRC/ho.png new file mode 100644 index 0000000000000000000000000000000000000000..dd93d6fd1aba4e2e854252a7de7e52168826f969 GIT binary patch literal 7905 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 X{DNt{t`iCFtf3e3YH}qqZv+1iT(??j literal 0 HcmV?d00001 diff --git a/doc/handover-tutorial.md b/doc/handover-tutorial.md new file mode 100644 index 0000000000..8595fe05d4 --- /dev/null +++ b/doc/handover-tutorial.md @@ -0,0 +1,329 @@ +This tutorial explains how to perform handovers. For the moment, only F1 +handovers are supported. + +[[_TOC_]] + +# Considered setup for F1 handover + +We consider one CU and two DUs, connected over F1. The UE is initially +connected over the radio interface ("Uu") to DU0. Via movement to a new +position ("new pos"), it will trigger an event such that the CU triggers a +handover of the UE from DU0 to DU1. Alternatively, a manual trigger can do the +same. + +![F1 Handover setup](./RRC/ho.png) + +# Steps to run F1 handover with OAI UE + +Measurement reporting and processing of RRC Reconfiguration for Mobility are +not completed at the UE. Nevertheless, it is possible to make simple handover +tests without any radio setup, on a single PC, with the OAI UE, in RFsimulator. + +## Build with telnet support + +Since the UE does not support any measurement reporting, it cannot trigger a +handover on its own; it has to be triggered manually through telnet. Thus, +build both gNB and UE as well as activate the build of telnet to that purpose: + + ./build_oai --ninja --nrUE --gNB --build-lib telnetsrv + +## Run the setup + +This tutorial assumes you have a core network running; [refer to the +corresponding tutorial](./NR_SA_Tutorial_OAI_CN5G.md) if this is not the case +yet. + +We will use the TDD configuration files in the repository for the +[CU](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-cu.sa.f1.conf) as well for +[DU0](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci0.conf) +and +[DU1](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci1.conf). +Note how the DUs differ in their DU ID (for identification at the CU), nr +cellid (global identification), physical cell ID (identification through UE), +frequency (limitation at OAI UE), and IP address. + +Make sure that using RFsimulator and the CU and each DU, you can achieve a full +connection of the UE (independently, i.e., running one DU a time). Once this is +done, follow below steps to trigger a handover: + +Start the CU including telnet support: + + sudo ./nr-softmodem --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-cu.sa.f1.conf --telnetsrv --telnetsrv.shrmod ci + +Start DU0: + + sudo ./nr-softmodem --sa --rfsim -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci0.conf --rfsimulator.serveraddr 127.0.0.1 + +Start the UE, and let it connect completely: + + sudo ./nr-uesoftmodem --sa -C 3450720000 -r 106 --numerology 1 --ssb 516 -O --rfsim --rfsimulator.serveraddr server + +Note how the RFsimulator roles have been switched, and RFsim server is at the +UE side; _this is important_. Replace `` with the UE configuration +matching your core. If you followed the CN and oaiUE tutorials, you can remove +`-O ` and replace it with `--uicc0.imsi 001010000000001`. + +Once the UE is connected, start DU1: + + sudo ./nr-softmodem --sa --rfsim -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci1.conf --rfsimulator.serveraddr 127.0.0.1 + +Once DU1 is online, you can trigger a handover by issuing this command + + echo ci trigger_f1_ho | nc 127.0.0.1 9090 && echo + +You should see how the UE switches from one DU to another. See additional +information further below. + +A number of remarks: + +1. It is important that you start DU0, UE, DU1 in order, and having UE connect + to DU0 before starting DU1. This is because we don't employ any channel + emulation, and the UE could not decode the SIB1 of DU0 to connect. +1. The RFsimulator roles are switched. Typically, the gNB RFsim acts as the + server and the UE as a client. However, RFsim is limited to one server with + multiple clients. Since the UE should be able to connect to both DUs, it has + to act as the server, and both DUs are a client. +1. If you see errors `could not open a socket` and/or `Could not start the RF + device`, this means that RFsim could not be started. Handover will not work; + please refer to the preceding point to fix this (i.e., run the UE as the + RFsim server). +1. In some cases, if the RFsim server is at the UE, the whole system can block; + in this case, stop UE and all DUs and restart (the CU can keep running). + +## Additional information to the manual HO trigger + +You can trigger the handover manually by logging in through telnet: + + telnet 127.0.0.1 9090 + +and then manually typing `ci trigger_f1_ho`. + +The command using `nc` (`netcat`) above triggers handovers directly from bash. +It does the same as logging in through telnet otherwise, and is a shorthand. + +The full command is + + ci trigger_f1_ho [cu-ue-id] + +`cu-ue-id` is optional. If only one UE context is present in the RRC, it will +trigger the handover for this UE in a round-robin fashion across all DUs. If +there is only one DU, the handover request will be rejected. Similarly, if +there are multiple UE contexts present at RRC, the handover will be rejected, +and you have to manually type the CU UE ID. You can see a list of all UEs in +the file `nrRRC_stats.log` that is printed periodically in the working +directory of the CU. + +# Steps to run F1 handover with COTS UE + +You can do handover across DUs with a COTS UE. Note that these DUs should be +separated by at least multiple meters to ensure that the UE will receive +different signal strengths when moving between cells. + +We only support intra-frequency handovers yet. We have verified with USRPs +only, although other radios should work as well. + +For UEs, we verified Quectel modules and iPhones. Note, though, that not all +phones might work; for instance, we did not achieve handovers with a OnePlus +Nord, yet. + +## Steps + +First, make sure that you can run both DUs with the CU independently. Use the +same radio hardware for both radios to ensure that both cells can be received +equally good by the UE. + +In order to enable handovers (triggered by the UE), you have to configure the +neighbour relation of the DUs at the CU. To do so, proceed as follows: + +1. To simplify filling the right values in the neighbour configuration, you can + rely on the information the CU has about both DUs. Start the CU and both + DUs. Navigate to the directory from which you started the CU, and print RRC + statistics: + ``` + cat nrRRC_stats.log + ``` +1. Fill in the `neighbour-config.conf` configuration file as shown below, and + `@include` it in the CU file. +1. Start the CU and both DUs. +1. Bring the phone close to one cell, and leave flight mode. It should connect + to the DU to which it is closer. +1. Move the UE towards the other DU; it should trigger an "A3 event" (Neighbour + Becomes Better than Serving), and the CU will trigger the handover to the + other DU. + +The output on the terminal should be the same as with RFsim. If no handover is +triggered: + +- Make sure that both DUs use the same hardware. +- Make sure that the UE sees both cells. For instance, you can switch to flight + mode, go closer to the other DU, and switch off flight mode -- the UE should + connect to that second UE. +- We did not manage handover with every phone yet -- make sure you use one of + the list provided above. + +You can also force a handover through telnet as described above. (In fact, the +decision about a handover is always at the network-side, the UE only "assists" +through measurements telling the CU that one DU is stronger than others. +Hence, "forcing" a handover just means that you manually trigger the handover, +instead of waiting for UE measurement report.) + +## Example neighbour configuration + +Below is an example neighbour configuration. It is based on this DU information +gathered from `nrRRC_stats.log` at the CU: + +``` +[1] DU ID 3585 (gNB-in-docker) assoc_id 4161: nrCellID 11111111, PCI 1, SSB ARFCN 643296 + TDD: band 78 ARFCN 642024 SCS 30 (kHz) PRB 106 +[2] DU ID 3584 (gNB-in-docker) assoc_id 4163: nrCellID 12345678, PCI 0, SSB ARFCN 643296 + TDD: band 78 ARFCN 642024 SCS 30 (kHz) PRB 106 +``` + +Note how both DUs have one cell on the same frequency and the same radio +configuration. From this, fill the neighbour list as shown below. + +Concretely, the first cell is `12345678` (on DU `[2]`), and it has `11111111` +(on DU `[1]`) as its neighbour; hence in the first block, you fill +`physical_cellId` and other values for DU `[1]`, and vice versa. + +The below configuration further enables periodic measurements, A2 event +("Serving becomes worse than threshold"), and A3 events ("Neighbour Becomes +Better than Serving"). The A2 event can be disabled by setting `enable = 0`. A3 +events cannot be disabled as of now. Further, the A3 events can be made +specific to cells; `cell_id = -1` means "any cell". + +``` +neighbour_list = ( + { + nr_cellid = 12345678; + neighbour_cell_configuration = ( + { + gNB_ID = 0xe01; + nr_cellid = 11111111; + physical_cellId = 1; + absoluteFrequencySSB = 643296; + subcarrierSpacing = 1; #30 KHz + plmn = { mcc = 001; mnc = 01; mnc_length = 2}; + tracking_area_code = 1; + } + ) + }, + { + nr_cellid = 11111111; + neighbour_cell_configuration = ( + { + gNB_ID = 0xe00; + nr_cellid = 12345678; + physical_cellId = 0; + absoluteFrequencySSB = 643296; + subcarrierSpacing = 1; #30 KHz + plmn = { mcc = 001; mnc = 01; mnc_length = 2}; + tracking_area_code = 1; + } + ) + } + ); + + +nr_measurement_configuration = { + Periodical = { + enable = 1; + includeBeamMeasurements = 1; + maxNrofRS_IndexesToReport = 4; + }; + + A2 = { + enable = 1; + threshold = 60; + timeToTrigger = 1; + }; + + A3 = ({ + cell_id = -1; #Default + offset = 10; + hysteresis = 0; + timeToTrigger = 1 + }) +}; +``` + +# Handovers triggers and NTN + +Typically, in terrestrial networks, channel measurements as well as criteria +such as load in base stations, is used to determine when and where to handover +a UE. + +## NTN + +Doppler spreading and time selectivity of the channel are already a challenge +for conventional terrestrial networks. However, in the context of +non-terrestrial networks (NTN), and low-earth orbit (LEO) systems, the +satellites can have speeds up 7.56 km/s, which is much faster than 0.14 km/s of +a high-speed train in terrestrial networks. Also, the delays in LEO are more varied +and longer, and the path loss is larger, because the communication distances is up +to 10 times longer than in terrestrial networks. Moreover, downlink in LEO +presents a high interference from adjacent satellite beams, and all these +features contribute to reduced received signal strength variation in these +networks compared to terrestrial networks. Typically, the criteria used in +algorithms presented in conventional terrestrial networks to trigger a handover +from a gNB to another one is based on signal strength measurements (cf., A3 +event above). However, the reduced received signal strength variation in NTNs +make these algorithms inefficient for LEO systems. Therefore, algorithms with +criteria for handover triggering that address the specifics of LEO systems are +crucial for an efficient handover processing that ensures a robust +communication with low dropping probability. Some criteria for handovers in NTN +are as follows: + +- **Measurement-based triggering**: This method is based on signal strength + measurement, and as stated above, it may not be efficient. The triggering + thresholds and which measurement events to use as triggers, as reference + signal received power (RSRP), reference signal received quality (RSRQ), or + received signal strength indicator (RSSI), should be configured. This method + relies on UE estimates and established channel estimation techniques, however + it would require neighbouring cell lists which can be hard because the + fast-moving of satellites leads to a fast cell coverage deviation. + +- **Location-based triggering**: This method is based on UE and satellite + location, which can be applied jointly (or not) with another trigger as the + measurement-based trigger. For instance, for a deterministic satellite + movement, it is possible to predict the configure triggering condition, and + the initial association of the UE can be performed based on the distance with + the nearest satellite, because we can know the location of the UE and NTN + satellite to compute the distance. + +- **Elevation angles of source and target cells based triggering**: This method + is similar to the previous one, but it is based on the largest elevation + angle. + +- **Time/timer-based triggering**: This method uses triggering conditions based + 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. + +- **Timing advance value-based triggering**: This method uses the timing + advance value (independently or jointly with another trigger) to trigger a + handover to the target cell. It is appropriate to overcome the Random-Access + preamble reception issue, where the UE needs to pre-compensate the instant + which sends the preamble. However, UEs with GNSS support are required to + perform this method. + +## Simple location/time-based trigger + +A location-based handover trigger, somewhat aligned with 3GPP Rel.17, taking +advantage of deterministic satellite movement, can be implemented whereby it is +assumed that the locations of the UE and the NTN satellite are known. From a +practical point of view, this means that we know how long it takes to perform +the handover, and therefore we only need to implement a timer. + +It is possible to modify the source code to trigger a time-based handover, or +combine with other methods. If all what is required is a trigger every 15 +seconds, you can also resort to the telnet-based handover trigger above, and +run in a terminal: + +```bash +while true; do + echo ci trigger_f1_ho | nc -N 127.0.0.1 9090 && echo + sleep 15 +done +```