Lab 4: O-RAN Basic
This experiment is to deploy a 5G Standalone (SA) network using OpenAirInterface (OAI) RF Simulator gNB and OAI minimal 5GC, but this time using the F1 Split architecture. We also deploy FlexRIC as the Near-RT RIC with a monitoring xApp.
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: o-ran
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-cu-du
stack: 5g-sa
model: oai-ran/cu-du
radio:
device: rf-sim
profiles:
- t-tracer
cells:
- band: n78
arfcn: 640008
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5ms
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.o-ran
controller: ric.o-ran
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
edge:
- name: ric
stack: 5g-sa
model: mosaic5g/flexric-large
- name: monitoring
stack: 5g-sa
model: mosaic5g/monitoring-c
profiles:
- mac-sm
- pdcp-sm
- kpm-sm
- database
- name: sdl
stack: 5g-sa
model: mosaic5g/xapps-sdl
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue1
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/nr-rfsim
preferred-access: oai-cu-du.o-ran
target-cores:
- core.o-ran
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
readiness-check:
method: ping
target: google-ip
interface-name: oaitun_ue0
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue2
namespace: trirematics
annotations:
extras.trirematics.io/initial-delay: "120"
spec:
vendor: oai
stack: 5g-sa
model: terminal/nr-rfsim
preferred-access: oai-cu-du.o-ran
target-cores:
- core.o-ran
identity:
imsi: "001010000000002"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n78
readiness-check:
method: ping
target: google-ip
interface-name: oaitun_ue0
Deployment and Testing
Deploy the file using the command cli install network open-ran.yaml
.
Check for the status of the deployment using the command cli observe
and make sure all the Elements other than
the UEs are in the 1/1 Y
state.
Open two terminals and on each apply the filters as below and open wireshark for the CU and DU respectively.
udp_ports="2123 or 2152 or 9999"
sctp_ports="38412 or 38472 or 36421"
filter="(sctp port $sctp_ports) or (udp port $udp_ports)"
cli extract pcap $element -- "$filter" | wireshark -k -i -
You should replace the $element
with the name of the Element name from the observe command output.
Then use the t-dumper
command to start the CU and DU.
For each of them separately run the following command:
cli cic {element} run -- t-dumper
Use Ctrl+C
to stop the command, after you see the line is printed.
Make sure you run first the CU and then the DU.
Due to a bug in OAI code for multiple UEs, you have around 2 minutes to run all the previous commands, otherwise the UEs would not be able to connect to the DU due to a race condition.
💬 Questions
- How do we specify the deployment type of the gNB in the
open-ran.yaml
file? - How do we specify the CU and DU to be connected to the NearRT-RIC?
- Map the architecture of the network to the O-RAN architecture by mentioning the IP addresses of each component.
The order between the NGAP and F1AP or F1AP and MAC messages might be wrong in the PCAP files just by a few microseconds needed to capture and process the packets. However, the order between the messages in the same interface is always correct.
💬 Lab Questions 💬
💬 F1 Questions Set
Use the PCAP files for the CU and DU to answer the following questions. Choose any MAC-NR message and expand the Context field and right-click on the Slot, System Frame Number, and Direction, then Apply them as a column.
- In which message is the cell information transmitted from the DU to CU, and what is the NR cell identity?
- In which message CU decides on the activated cells?
- Draw a message sequence chart including the UE, CU, and DU for the random access procedure (messages 1 to 5).
- What is the difference in the random access procedure between the F1 split and without F1 split?
- Use the F1 protocol stack to find the pair of the messages for the CU and DU in the PCAP file. For example, for the RRC Setup Response message in CU, there should be a corresponding F1AP message carrying the RRC message from CU to DU. These two messages are using different protocol stacks (one F1AP and the other NR-RRC), but they are paired with each other. Find the message numbers and the corresponding protocol stack layer for each pair.
- Use the messages in the CU or DU PCAP file to fill the table below for each UE, while mentioning the message ID, protocol stack layer, and node type (CU or DU).
- Since the DU does not process RRC messages, which F1AP message notifies the DU that the RRC connection setup is completed?
- In which messages the SRB1, SRB2, and DRB1 are setup and through which logical channels?
- What is the relation between the slot number, direction, and the TDD pattern?
- What is the maximum System Frame Number?
- How much time is passed until the System Frame Number resets?
- Describe the possible handover scenarios in the Open RAN architecture by referencing the architecture.
UE | RA-RNTI | C-RNTI | gNB-CU UE-ID | gNB-DU UE-ID | AMF UE-ID |
---|---|---|---|---|---|
1 | |||||
2 |
Some useful links for the handover scenarios:
- https://www.techplayon.com/5g-sa-handover-inter-gnb-du-and-intra-gnb-cu-handover/
- https://www.techplayon.com/5g-sa-inter-gnb-hanodver-xn-handover/
- https://www.techplayon.com/5g-sa-inter-gnb-handover-n2-or-ngap-handover/
💬 GTP Questions Set
- Starting from the NGAP PDU session setup request message, draw a message sequence chart to explain the steps to setup a PDU session including the UE, CU, DU, AMF, and UPF.
- For the PDU session for each UE, find the 5QI value (written as
fiveQI
in Wireshark) of its QoS flows, the PDU session type, and the Allocation and Retention Priority (ARP) level. - What is the PDU session Aggregate Maximum Bit Rate (AMBR) for each PDU session?
- What is the AMBR for each UE?
- Why there are two separate AMBR defined (even though the values are equal in this case)?
- Fill the table below by the values from the messages above for each of the two UEs.
- Explain in which order the TEIDs are allocated for each UE@.
UE | UPF TEID | CU to UPF TEID | CU to DU TEID | DU to CU TEID | Assigned IP |
---|---|---|---|---|---|
1 | |||||
2 |
💬 RLC Questions Set
Now use the command cli test rtt ue1 -- -s 2000 12.1.1.1
and then in the DU Wireshark, use the filter
rlc-nr.am.si != 0x0
to find the RLC segmented packets.
- How many RLC segments are created for each ICMP packet?
- How many fragmented IP packets are created for each ICMP message?
- Now change the packet size to 1200 bytes and answer the questions again.
- What is different from between the two cases?
- Find the maximum size for the ICMP packets (the parameter
-s
) that does not trigger segmentation in RLC.
💬 O-RAN Questions Set
Having a malformed packet for E2 setup request is normal. Your Wireshark version cannot dissect E2AP v2 messages used by FlexRIC.
- How many E2-Node(s) connected with the NearRT-RIC?
- What E2-Node(s) information are included in the E2 Setup Request?
- We have subscribed to KPM, PDCP, and MAC service models. Explain which E2-Node(s) are subscribed for each service model and measure the RIC indication interval.
- What are the supported RAN functions in a E2-Node (please explain each E2-Node respectively)?
- Draw the message sequence chart (use MSCGen again) between NearRT-RIC and a E2-Node (Start from the E2 Setup Request).
- What is the RIC indication type for each service model?
- Assuming the value of the inter-arrival for the MAC service model, how many records from the database should be recorded to cover the last 45 seconds of both UEs metrics?
You could use the filter e2ap.RANfunctionID == $value
to filter the records for each Service Model,
where the $value
is the RAN function ID.