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.
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
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.
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.