Lab 11: OAI NR inter frequency handover
This experiment showcases an example of running handover procedure on top of a 5G Standalone (SA) network using
OAI CU/DU/RU 3GPP split with USRP as an RU, OAI CN, FlexRIC as the Near-RT RIC and Quectel model as an COTS UE.
Additionally, an instruction to apply handover API via xApp from public xApp SDK repository.
Prerequisites​
- Hardware component requirement:
- USRP B210
- A Quectel model - RM5xxN (prefer RM520N-GL)
- Sections requirement in
.yaml:- Target
CUforDUconnection
annotations:
extras.t9s.io/cu-name: <target-cu-name>- Handover group specification
cells:
groups:
- kind: hog
name: <cell-group-name> - Target
Introduction​
open-ran-ho-inter-oai.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: handover
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: oai-gnb-cu-du
stack: 5g-sa
model: oai-ran/cu-du
radio:
device: uhd-b200
identity:
an-id: 50
cells:
- band: n78
arfcn: 630048
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5ms
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
groups:
- kind: hog
name: handover-group
controller: flexric.handover
core-networks:
- minimal.handover
- name: oai-gnb-du
stack: 5g-sa
model: oai-ran/du
radio:
device: uhd-b200
identity:
an-id: 20
annotations:
extras.t9s.io/cu-name: "oai-gnb-cu-du"
cells:
- band: n78
arfcn: 643296
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5ms
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
groups:
- kind: hog
name: handover-group
controller: flexric.handover
core-networks:
- minimal.handover
core:
- name: minimal
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
edge:
- name: flexric
stack: 5g-sa
model: mosaic5g/flexric
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
Deployment​
- To run up the network
brc install network open-ran-ho-inter-oai.yaml
- To check the network
brc observe
-
Wait until all the Elements are in the
STATUSset to1/1 Ystate. -
Attach the UE to the network by
brc install network open-ran-ue.yaml
open-ran-ue.yaml
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue1
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/quectel
target-cores:
- minimal.handover
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xC42449363BBAD02B66D16BC975D77CC1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n78
- n77
readiness-check:
method: ping
target: google-ip
Handover via xApp​
As provided, xApp SDK supports handover xApp in path /src/usr/python3/ho.py.
# Example of ho.py
import sys
import xapp_usr_sdk as xapp
xapp.init(sys.argv)
nodes = xapp.e2_nodes(xapp.HAND_OVER_USE_CASE_e)
assert(len(nodes) > 0 and len(nodes) < 3 and "Needed at least 1 or 2 E2 nodes to handover")
sum_ue = 0
for idx in range(len(nodes)):
sum_ue += len(nodes[idx].ue_ho)
assert(sum_ue > 0 and "At least one UE needed")
idx = 0 if len(nodes[0].ue_ho) > 0 else 1
n = nodes[idx].node
ue = nodes[idx].ue_ho[0].ue
ho_pci = nodes[idx].ue_ho[0].nghbr_cell[0].target_pci
ho_ssb = nodes[idx].ue_ho[0].nghbr_cell[0].target_ssb_nr_arfcn
xapp.hand_over(n, ue, ho_pci, ho_ssb)
Simple step by step to interact xApp with the cluster
-
Build the project following
README.mdfile -
Bind flexric IP with xApp
cd xapp_sdk/conf/
python3 update_conf.py
# It should show this
# Select the RIC to configure:
# 1) flexric.flexric.handover (10.244.2.46)
# Choice [1-1]: 1
# No entries found for Database.
# Skipping database IP update.
# Config 'xapp.yaml' updated: ip_ric=10.244.2.46, ip_xapp=10.244.0.158
- Run the xApp
cd build/src/usr/python3
python3 ho.py ../../../conf/xapp.yaml