Blueprints with the OAI RF Simulator
These blueprints run an OpenAirInterface (OAI) gNB and an OAI soft UE linked by the OAI RF simulator, so no radio hardware is needed.
These blueprints include their Terminal, so brc install network also deploys the soft UE.
The Terminal is ready once each UE pings the UPF gateway of its slice from its own tunnel.
Then test the UE, for example with brc test rtt ue1 gateway -- -c 5 or brc test throughput ue1 dl gateway -- --time 10.
Deploy a blueprint from the control-plane node with brc install network <file>.yaml.
It should finish without errors and print the Kubernetes resources it created.
Follow the deployment with brc observe and wait until every Element other than the UE is in the 1/1 Y state.
Monolithic gNB
A monolithic OAI gNB, the OAI minimal 5GC and one soft UE. It is the simplest network to check the control plane and the data plane.
Source: networks/oai/rfsim/01-monolithic.yaml
01-monolithic.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: 1
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: gnb
stack: 5g-sa
model: oai-ran/monolithic-gnb
identity:
an-id: 50
radio:
device: rf-sim
cells:
- band: n78
arfcn: 641280
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
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/oai-ue
preferred-access: gnb.oai-rfsim
target-cores:
- core.oai-rfsim
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access gnb.oai-rfsim, target-cores core.oai-rfsim ---#
Monolithic gNB with FlexRIC
The same network with FlexRIC as the Near-RT RIC, connected to the gNB over E2.
Source: networks/oai/rfsim/02-monolithic-oran.yaml
02-monolithic-oran.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: 1
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: gnb
stack: 5g-sa
model: oai-ran/monolithic-gnb
identity:
an-id: 50
radio:
device: rf-sim
cells:
- band: n78
arfcn: 641280
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
controller: flexric.oai-rfsim
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
edge:
- name: flexric
stack: 5g-sa
model: mosaic5g/flexric
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue1
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/oai-ue
preferred-access: gnb.oai-rfsim
target-cores:
- core.oai-rfsim
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access gnb.oai-rfsim, target-cores core.oai-rfsim ---#
Monolithic gNB with FlexRIC and a monitoring xApp
Adds the C monitoring xApp, which subscribes to the MAC, RLC, PDCP, GTP and KPM service models and stores the measurements in the database.
Source: networks/oai/rfsim/03-monolithic-oran-xapp.yaml
03-monolithic-oran-xapp.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: 1
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: gnb
stack: 5g-sa
model: oai-ran/monolithic-gnb
identity:
an-id: 50
radio:
device: rf-sim
cells:
- band: n78
arfcn: 641280
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
controller: flexric.oai-rfsim
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
edge:
- name: flexric
stack: 5g-sa
model: mosaic5g/flexric
- name: monitoring
stack: 5g-sa
model: mosaic5g/monitoring-c
profiles:
- rlc-sm
- pdcp-sm
- mac-sm
- gtp-sm
- kpm-sm
- database
annotations:
extras.t9s.io/scenario: 'rfsim'
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue1
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/oai-ue
preferred-access: gnb.oai-rfsim
target-cores:
- core.oai-rfsim
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access gnb.oai-rfsim, target-cores core.oai-rfsim ---#
Monolithic gNB with Open5GS
The monolithic gNB and soft UE with the Open5GS 5GC instead of the OAI minimal 5GC.
Source: networks/oai/rfsim/05-monolithic-open5gs.yaml
05-monolithic-open5gs.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: 1
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: gnb
stack: 5g-sa
model: oai-ran/monolithic-gnb
identity:
an-id: 50
radio:
device: rf-sim
cells:
- band: n78
arfcn: 641280
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: open5gs/5gc
identity:
region: 0
cn-group: 4
cn-id: 5
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/oai-ue
preferred-access: gnb.oai-rfsim
target-cores:
- core.oai-rfsim
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access gnb.oai-rfsim, target-cores core.oai-rfsim ---#
CU-DU split
An OAI CU and DU connected over F1 in one access section, with one soft UE.
Source: networks/oai/rfsim/06-cu-du.yaml
06-cu-du.yaml
# OAI CU and DU (F1 split in one access) and an OAI soft UE over the RF simulator.
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
ipv4-range: 12.1.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: cu-du
stack: 5g-sa
model: oai-ran/cu-du
identity:
an-id: 30
tracking-area: 1
radio:
device: rf-sim
cells:
- band: n78
arfcn: 621312
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
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/oai-ue
preferred-access: cu-du.oai-rfsim
target-cores:
- core.oai-rfsim
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access cu-du.oai-rfsim, target-cores core.oai-rfsim ---#
Several UEs in one Terminal
One Terminal runs several soft UEs, set with ue-count. UE i uses the IMSI plus i and the tunnel oaitun_ue<i+1>. Test one UE by naming it after the Terminal, for example brc test rtt ues ue2 gateway.
Source: networks/oai/rfsim/07-multi-ue.yaml
07-multi-ue.yaml
# OAI gNB and several OAI soft UEs in one Terminal over the RF simulator.
# ue-count sets the number of UEs (tested up to 10): UE i uses the IMSI + i and the tunnel oaitun_ue<i+1>.
# Test one of them with: brc test rtt ues ue2 gateway
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
ipv4-range: 12.1.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: gnb
stack: 5g-sa
model: oai-ran/monolithic-gnb
identity:
an-id: 30
tracking-area: 1
radio:
device: rf-sim
cells:
- band: n78
arfcn: 621312
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 2500
dl-slots: 2
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ues
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/oai-ue
preferred-access: gnb.oai-rfsim
target-cores:
- core.oai-rfsim
ue-count: 3
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access gnb.oai-rfsim, target-cores core.oai-rfsim ---#
Two PDU sessions
One soft UE with two PDU sessions: internet (SST 1) and iot (SST 2, SD 0x000001). The readiness check covers the default internet session.
Source: networks/oai/rfsim/08-two-pdu.yaml
08-two-pdu.yaml
# OAI gNB and an OAI soft UE with two PDU sessions over the RF simulator:
# internet (SST 1) and iot (SST 2, SD 0x000001). The readiness check covers the default internet session.
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-rfsim
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
ipv4-range: 12.1.1.0/24
ipv6-range: 2001:db8:1::/64
- plmn: "00101"
dnn: iot
network-mode: IPv4
service-type: 2
differentiator: 0x000001
ipv4-range: 12.1.2.0/24
ipv6-range: 2001:db8:2::/64
access:
- name: gnb
stack: 5g-sa
model: oai-ran/monolithic-gnb
identity:
an-id: 30
tracking-area: 1
radio:
device: rf-sim
cells:
- band: n78
arfcn: 621312
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.oai-rfsim
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue1
namespace: trirematics
annotations:
extras.t9s.io/pdu-sessions: "iot:2:0x000001"
spec:
vendor: oai
stack: 5g-sa
model: terminal/oai-ue
preferred-access: gnb.oai-rfsim
target-cores:
- core.oai-rfsim
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: rf-sim
formation: "1x1"
bands:
- n78
# the Terminal is ready once every UE pings the target from its own tunnel (oaitun_ue<N>)
readiness-check:
method: ping
target: gateway # UPF of the slice of each UE
#--- Add a UE the cluster does not run with terminals/external.yaml: preferred-access gnb.oai-rfsim, target-cores core.oai-rfsim ---#