Skip to main content

Deployment with Amarisoft SDR

Basic Deployment

This deployment includes a simple 5G Standalone (SA) network with Amarisoft gNB using a NI/Ettus USRP B210, and Amarisoft 5GC to analyze the control plane and data plane.

amr-basic.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: amarisoft
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: eMBB
differentiator: 0x000000
ipv4-range: 12.2.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: amr-ran
stack: 5g-sa
model: amarisoft/basic-ran
identity:
an-id: 30
tracking-area: 1
radio:
device: amr-sdr50
cells:
- band: n78
arfcn: 641760 #632750 #640008 #641280 #632628
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5ms
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- amr-cn.amarisoft
scheduling:
nodeSelector:
kubernetes.io/hostname: moto
core:
- name: amr-cn
stack: 5g-sa
model: amarisoft/basic-cn
profiles:
- debug
identity:
region: 128
cn-group: 4
cn-id: 5
dns:
ipv4:
default: 172.21.3.100
secondary: 8.8.8.8
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: quectel-001
namespace: trirematics
spec:
vendor: amr
stack: 5g-sa
model: terminal/quectel
target-cores:
- amr-cn.amarisoft
identity:
imsi: "001012342013332"
pin: "NULL"
opc: "0x78b231c7d7aaba5f2461e302bfde200c"
key: "0x454f3c24641d225d63bcca2ce3d90cdc"
sqn: "0x000000000540"
slice:
dnn: internet
network-mode: IPv4
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n78
readiness-check:
method: ping
target: google-ip
warning

This deployment does not include a terminal (UE) so it should be installed "separately". Please refer to this guide with UE sample deployments.

Deployment

Before deploying a network using an Amarisoft SDR you should check that it is indeed detected by the cluster's device manager. In order to check if the SDR is detected you may run the command brc extract infra where you should see an output like the following:

╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 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 │ AMR-SDR50: 1 │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├─────────┼────────────┼──────┼──────────────┼────────────────────┼────────┼─────────────────────┼─────────┼────────┼─────┼────────┼──────────────┼───────────┼──────┤
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ worker │ node3│ 192.168.1.12 │ Ubuntu 22.04.5 LTS │ 5.15.0 │ containerd://1.7.27 │ amd64 │ AMD │ 31 │ 40 GiB │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
╰─────────┴────────────┴──────┴──────────────┴────────────────────┴────────┴─────────────────────┴─────────┴────────┴─────┴────────┴──────────────┴───────────┴──────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 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 │
╰──────┴────────┴──────────────┴─────────────┴──────────┴──────────────┴────────────┴────────────┴──────┴───────╯

As can be seen for node2 there is a AMR-SDR50 reported under RADIO --> DEVICES.

Use the command brc install network amr-basic.yaml to deploy the network. It should finish without errors and printout the Kubernetes resource names that were created. Check for the status of the deployment using the command brc observe. Wait until all the Elements other than the UE are in the STATUS set to 1/1 Y state.

Deployment for Handover use-case

This deployment includes an example for running handover procedure on top of a 5G Standalone (SA) network using Amarisoft (AMR) gNBs, AMR CN, FlexRIC as the Near-RT RIC and Quectel model as an COTS UE. Refer to this laboratory for more details on how to leverage this deployment with a Handover xApp.

amr-ho.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.2.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: gnb1
stack: 5g-sa
model: amarisoft/ran-e2
identity:
an-id: 30
tracking-area: 1
radio:
device: amr-sdr50
antenna:
tx-gain: "90.0"
rx-gain: "60.0"
cells:
- band: n78
arfcn: 637344
bandwidth: 20MHz
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
- band: n78
arfcn: 640032
bandwidth: 20MHz
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
core-networks:
- amr-cn.handover
controller: flexric.handover
scheduling:
nodeSelector:
kubernetes.io/hostname: moto
- name: gnb2
stack: 5g-sa
model: amarisoft/ran-e2
identity:
an-id: 40
tracking-area: 1
radio:
device: amr-sdr50
antenna:
tx-gain: "90.0"
rx-gain: "60.0"
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
core-networks:
- amr-cn.handover
controller: flexric.handover
scheduling:
nodeSelector:
kubernetes.io/hostname: mito
core:
- name: amr-cn
stack: 5g-sa
model: amarisoft/basic-cn
profiles:
- debug
identity:
region: 128
cn-group: 4
cn-id: 5
edge:
- name: flexric
stack: 4g-5g
model: mosaic5g/flexric

dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: pixel-004
namespace: trirematics
spec:
vendor: amr
stack: 5g-sa
model: terminal/external
target-cores:
- amr-cn.handover
identity:
imsi: "001010000000009"
pin: "NULL"
opc: "0x8E27B6AF0E692E750F32667A3B14605D"
key: "0x8BAF473F2F8FD09487CCCBD7097C6862"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n41
- n78

---

apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: quectel1000
namespace: trirematics
spec:
vendor: amr
stack: 5g-sa
model: terminal/external
target-cores:
- amr-cn.handover
identity:
imsi: "001010000001000"
pin: "1234"
opc: "0xC42449363BBAD02B66D16BC975D77CC1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n41
- n78
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: raspberry01
namespace: trirematics
spec:
vendor: amr
stack: 5g-sa
model: terminal/external
target-cores:
- amr-cn.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:
- n41
- n78

---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: raspberry03
namespace: trirematics
spec:
vendor: amr
stack: 5g-sa
model: terminal/external
target-cores:
- amr-cn.handover
identity:
imsi: "001010000000003"
pin: "1234"
opc: "0xC42449363BBAD02B66D16BC975D77CC1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: internet
network-mode: IPv4
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n41
- n78

Deployment

Before deploying this network with 3 cells you should check that the necessary Amarisoft SDRs are detected by the cluster's device manager. In order to check if the SDR is detected you may run the command brc extract infra where you should see an output like the following:

╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 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 │ AMR-SDR50: 1 │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├─────────┼────────────┼──────┼──────────────┼────────────────────┼────────┼─────────────────────┼─────────┼────────┼─────┼────────┼──────────────┼───────────┼──────┤
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ worker │ node3│ 192.168.1.12 │ Ubuntu 22.04.5 LTS │ 5.15.0 │ containerd://1.7.27 │ amd64 │ AMD │ 31 │ 40 GiB │ AMR-SDR50: 2 │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
╰─────────┴────────────┴──────┴──────────────┴────────────────────┴────────┴─────────────────────┴─────────┴────────┴─────┴────────┴──────────────┴───────────┴──────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 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 │
╰──────┴────────┴──────────────┴─────────────┴──────────┴──────────────┴────────────┴────────────┴──────┴───────╯

As can be seen for node2 there is one AMR-SDR50 and for node3 there are two AMR-SDR50 reported under RADIO --> DEVICES.

Use the command brc install network amr-ho.yaml to deploy the network. It should finish without errors and printout the Kubernetes resource names that were created. Check for the status of the deployment using the command brc observe. Wait until all the Elements other than the UE are in the STATUS set to 1/1 Y state.