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

Blueprint with Amarisoft SDR

Basic Blueprint​

This blueprint includes a simple 5G Standalone (SA) network with an Amarisoft gNB on an Amarisoft SDR50 board, and the Amarisoft 5GC to analyze the control plane and data plane. Set the nodeSelector of the access section to the node that has the SDR.

Source: networks/amarisoft/01-monolithic.yaml

01-monolithic.yaml
01-monolithic.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: amarisoft
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
ipv4-range: 12.2.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: gnb
stack: 5g-sa
model: amarisoft/basic-ran
identity:
an-id: 30
tracking-area: 1
radio:
device: amr-sdr50
cells:
- band: n78
arfcn: 641760
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.amarisoft
scheduling:
nodeSelector:
kubernetes.io/hostname: bubble2 # Change with a node name of your cluster (node needs to have an Amarisoft SDR connected)
core:
- name: core
stack: 5g-sa
model: amarisoft/basic-cn
profiles:
- debug
identity:
region: 128
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.amarisoft, target-cores core.amarisoft ---#
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. Amarisoft blueprints use vendor: amr in the Terminal.

Blueprint​

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 01-monolithic.yaml to deploy the network. It should finish without errors and print out the Kubernetes resource names that were created. Check for the status of the blueprint using the command brc observe. Wait until all the Elements other than the UE are in the STATUS set to 1/1 Y state.

Blueprint for Handover use-case​

This blueprint includes an example for running the handover procedure on top of a 5G Standalone (SA) network using two Amarisoft (AMR) gNBs with three cells in total, the AMR CN, and FlexRIC as the Near-RT RIC. gnb-1 serves two cells and needs a node with two SDR50 boards, gnb-2 serves one cell on another node. Set the nodeSelector of each access section to those nodes. Refer to this laboratory for more details on how to leverage this blueprint with a Handover xApp.

Source: networks/amarisoft/02-handover-intra.yaml

02-handover-intra.yaml
02-handover-intra.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: amarisoft
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
ipv4-range: 12.2.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: gnb-1
stack: 5g-sa
model: amarisoft/basic-ran
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: 5000
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: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
groups:
- kind: hog
name: handover-group
core-networks:
- core.amarisoft
controller: flexric.amarisoft
scheduling:
nodeSelector:
kubernetes.io/hostname: bubble2 # Change with a node name of your cluster (node needs to have 2 Amarisoft SDR connected)
- name: gnb-2
stack: 5g-sa
model: amarisoft/basic-ran
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: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
groups:
- kind: hog
name: handover-group
core-networks:
- core.amarisoft
controller: flexric.amarisoft
scheduling:
nodeSelector:
kubernetes.io/hostname: bubble3 # Change with a node name of your cluster (node needs to have Amarisoft SDR connected)
core:
- name: core
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

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

Blueprint​

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 02-handover-intra.yaml to deploy the network. It should finish without errors and print out the Kubernetes resource names that were created. Check for the status of the blueprint using the command brc observe. Wait until all the Elements other than the UE are in the STATUS set to 1/1 Y state.

Blueprint for inter-cell handover in one gNB​

This blueprint runs one Amarisoft gNB with two cells in the same handover group, the AMR CN, and FlexRIC as the Near-RT RIC. The gNB needs a node with two SDR50 boards: set the nodeSelector of the access section to that node.

Source: networks/amarisoft/03-handover-inter.yaml

03-handover-inter.yaml
03-handover-inter.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: amarisoft
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: internet
network-mode: IPv4
service-type: 1
differentiator: 0x000000
ipv4-range: 12.2.1.0/24
ipv6-range: 2001:db8:1::/64
access:
- name: gnb
stack: 5g-sa
model: amarisoft/basic-ran
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: 5000
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: 5000
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
groups:
- kind: hog
name: handover-group
core-networks:
- core.amarisoft
controller: flexric.amarisoft
scheduling:
nodeSelector:
kubernetes.io/hostname: bubble2 # Change with a node name of your cluster (node needs to have 2 Amarisoft SDR connected)
core:
- name: core
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

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

Use the command brc install network 03-handover-inter.yaml to deploy the network and follow it with brc observe.