Skip to main content
Version: v6.0.0 [Falcon]

Blueprints with OAI on a USRP

These blueprints run an OpenAirInterface (OAI) gNB over the air on a NI/Ettus USRP B200/B210 or N300.

Check the USRP​

Before deploying a network on a USRP, check that the cluster's device manager detects it. Run brc extract infra and look for the device under RADIO --> DEVICES:

╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Trirematics cluster information │
├────────────────────────────────────────────┬───────────────────────────────────────────────────┬─────────────────────────────────┬─────────────────────────────────┤
│ CLUSTER │ SYSTEM │ COMPUTE │ RADIO │
├─────────┬────────────┬──────┬──────────────┼────────────────────┬────────┬─────────────────────┼─────────┬────────┬─────┬────────┼──────────────┬───────────┬──────┤
│ REGION │ ROLE │ NAME │ IP │ OS │ KERNEL │ RUNTIME │ ARCH │ VENDOR │ CPU │ MEM │ DEVICES │ TERMINALS │ SYNC │
├─────────┼────────────┼──────┼──────────────┼────────────────────┼────────┼─────────────────────┼─────────┼────────┼─────┼────────┼──────────────┼───────────┼──────┤
│ │ control-pl │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ ane │ node1│ 192.168.1.10 │ Ubuntu 22.04.5 LTS │ 6.8.0 │ containerd://1.7.27 │ amd64 │ AMD │ 31 │ 60 GiB │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├─────────┼────────────┼──────┼──────────────┼────────────────────┼────────┼─────────────────────┼─────────┼────────┼─────┼────────┼──────────────┼───────────┼──────┤
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ worker │ node2│ 192.168.1.11 │ Ubuntu 22.04.5 LTS │ 5.15.0 │ containerd://1.7.27 │ amd64 │ AMD │ 31 │ 40 GiB │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├─────────┼────────────┼──────┼──────────────┼────────────────────┼────────┼─────────────────────┼─────────┼────────┼─────┼────────┼──────────────┼───────────┼──────┤
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ worker │ node3│ 192.168.1.12 │ Ubuntu 22.04.5 LTS │ 5.15.0 │ containerd://1.7.27 │ amd64 │ AMD │ 31 │ 40 GiB │ UHD-B200: 1 │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
╰─────────┴────────────┴──────┴──────────────┴────────────────────┴────────┴─────────────────────┴─────────┴────────┴─────┴────────┴──────────────┴───────────┴──────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Trirematics cluster energy information │
├──────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┤
│ NODE │ CPU │
├──────┬────────┬──────────────┼─────────────┬──────────┬──────────────┬────────────┬────────────┬──────┬───────┤
│ NAME │ STATUS │ ACTIVITY │ ALLOCATABLE │ CAPACITY │ USAGE (CORE) │ USAGE (%) │ PSTATE │ MODE │ TURBO │
├──────┼────────┼──────────────┼─────────────┼──────────┼──────────────┼────────────┼────────────┼──────┼───────┤
│ node1│ True │ Low Activity │ 31 │ 32 │ 1.2040704 │ 3.8840983 │ No support │ N/A │ N/A │
├──────┼────────┼──────────────┼─────────────┼──────────┼──────────────┼────────────┼────────────┼──────┼───────┤
│ node2│ True │ Low Activity │ 31 │ 32 │ 0.10409176 │ 0.33577988 │ No support │ N/A │ N/A │
├──────┼────────┼──────────────┼─────────────┼──────────┼──────────────┼────────────┼────────────┼──────┼───────┤
│ node3│ True │ Low Activity │ 31 │ 32 │ 0.10751778 │ 0.34683153 │ No support │ N/A │ N/A │
╰──────┴────────┴──────────────┴─────────────┴──────────┴──────────────┴────────────┴────────────┴──────┴───────╯

In this example node3 reports a UHD-B200. An N300 is reported as UHD-N300.

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.

warning

These blueprints contain only the Network. Add a UE with the UE blueprints, using the preferred-access and target-cores given in the last line of each file.

B200/B210, monolithic gNB​

A monolithic OAI gNB on a B200/B210 and the OAI minimal 5GC, to check the control plane and the data plane.

Source: networks/oai/usrp/01-b200.yaml

01-b200.yaml
01-b200.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-b200
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-usrp
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

#--- Add a UE with terminals/quectel.yaml or terminals/external.yaml: preferred-access gnb.oai-usrp, target-cores core.oai-usrp ---#

B200/B210 with FlexRIC​

The same network with FlexRIC as the Near-RT RIC, connected to the gNB over E2.

Source: networks/oai/usrp/02-b200-oran.yaml

02-b200-oran.yaml
02-b200-oran.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-b200
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-usrp
core-networks:
- core.oai-usrp
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

#--- Add a UE with terminals/quectel.yaml or terminals/external.yaml: preferred-access gnb.oai-usrp, target-cores core.oai-usrp ---#

B200/B210 with Open5GS​

The monolithic gNB on a B200/B210 with the Open5GS 5GC.

Source: networks/oai/usrp/03-b200-open5gs.yaml

03-b200-open5gs.yaml
03-b200-open5gs.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-b200
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-usrp
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

#--- Add a UE with terminals/quectel.yaml or terminals/external.yaml: preferred-access gnb.oai-usrp, target-cores core.oai-usrp ---#

B200/B210 with FlexRIC and a monitoring xApp​

Adds the C monitoring xApp to FlexRIC.

Source: networks/oai/usrp/04-b200-oran-xapp.yaml

04-b200-oran-xapp.yaml
04-b200-oran-xapp.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-b200
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-usrp
core-networks:
- core.oai-usrp
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: 'oai-usrp'

#--- Add a UE with terminals/quectel.yaml or terminals/external.yaml: preferred-access gnb.oai-usrp, target-cores core.oai-usrp ---#

B200/B210 with an OAI soft UE​

The gNB and an OAI soft UE over the air, each on its own B200/B210. This blueprint includes its Terminal, so it needs two USRPs and no separate UE.

Source: networks/oai/usrp/05-b200-oai-ue.yaml

05-b200-oai-ue.yaml
05-b200-oai-ue.yaml
# OAI gNB and an OAI soft UE over the air, each on its own USRP B200/B210.
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-b200
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-usrp
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-usrp
target-cores:
- core.oai-usrp
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
radio:
device: uhd-b200
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-usrp, target-cores core.oai-usrp ---#

N300, monolithic gNB​

A monolithic OAI gNB on a USRP N300, band n78, 40 MHz. The gNB reaches the N300 at 192.168.10.2 by default. Set extras.t9s.io/usrp-address (and usrp-mgmt-address) on the access when your N300 data port uses another address.

Source: networks/oai/usrp/06-n300.yaml

06-n300.yaml
06-n300.yaml
# OAI monolithic gNB over the air on a USRP N300, band n78, 40 MHz.
# The gNB reaches the N300 at 192.168.10.2 by default. Set extras.t9s.io/usrp-address (and
# usrp-mgmt-address) on the access when your N300 data port uses another address.
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-n300
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-usrp
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

#--- Add a UE with terminals/quectel.yaml or terminals/external.yaml: preferred-access gnb.oai-usrp, target-cores core.oai-usrp ---#

N300 with FlexRIC​

The N300 network with FlexRIC as the Near-RT RIC.

Source: networks/oai/usrp/07-n300-oran.yaml

07-n300-oran.yaml
07-n300-oran.yaml
# OAI monolithic gNB over the air on a USRP N300 with the FlexRIC near-RT RIC, band n78, 40 MHz.
# The gNB reaches the N300 at 192.168.10.2 by default. Set extras.t9s.io/usrp-address (and
# usrp-mgmt-address) on the access when your N300 data port uses another address.
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: oai-usrp
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: uhd-n300
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-usrp
core-networks:
- core.oai-usrp
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

#--- Add a UE with terminals/quectel.yaml or terminals/external.yaml: preferred-access gnb.oai-usrp, target-cores core.oai-usrp ---#