Ericsson RAN Integration with SD-Core
This blueprint presents how to integrate the Ericsson gNB with the Aether SD-Core. The blueprint assumes that you have already deployed the Aether SD-Core successfully using the official Aether SD-Core Quick Start guide and therefore familiar with the setup. The blueprint also includes how to program a Quectel UE to connect to the network.
Hardware Requirements
Ericsson AIR 6419 RRH(s)
Quectel RG530N or RM5xxQ-GL UE
A SIM reader/writer
Programmable SIM cards preferably from OpenCells.
Next, it is important to modify the vars/main.yml file in the aether-onramp directory in order to match configuration in the Ericsson gNB. This blueprint assumes you start with a variant of vars/main.yml customized for running physical 5G radios.
The following command copies main-gNB.yml to main.yml in the vars directory:
$ cd vars
$ cp main-gNB.yml main.ymlModifying SD-Core Configuration Parameters
Now modify the
main.ymlfile as follows:Under the
coresection, change thedata_ifacefromens18to the interface of the SD-Core server that connects to the Ericsson gNB. For instance, indata_iface: eno12399, we assumeeno12399is the interface on the SD-Core server that connects to the Ericsson gNB.The
values_fileshould be updated to thesd-core-5g-values.yamlfile. For the purpose of this blueprint, we will set thevalues_fileas follows:values_file: "deps/5gc/roles/core/templates/sd-core-5g-values.yaml"Update the
ran_subnetto reflect the subnet of the Ericsson gNB. For instance if the IP addresses of the gNB host connecting to the SD-Core is10.189.59.10, we can set theran_subnetas follows:ran_subnet: 10.189.59.0/27.(Optional) Depending on your network configuration, you may also change the UPF subnet which is identified by
ip_prefix. However this is not mandatory. For this blueprint, we change the UPF access subnet asip_prefix: "10.189.16.0/24". TheaccessandcoreIPs should also change accordingly.Now change the AMF IP to the IP of the interface on the SD-Core server that connects to the Ericsson gNB. This is done under the
amfsubsection under thecoresection asip: 10.189.8.10. Where10.189.8.10is the IP of theeno12399interface on the SD-Core server.
After the above modifications the core section of vars/main.yml, should look like the following:
core:
standalone: true # set to false to place under control of ROC
data_iface: eno12399
values_file: "deps/5gc/roles/core/templates/sd-core-5g-values.yaml"
ran_subnet: "10.189.59.0/27" # set to empty string to get subnet from 'data_iface'
helm:
local_charts: false # set chart_ref to local path name if true
chart_ref: aether/sd-core
chart_version: 1.1.0
upf:
ip_prefix: "10.189.16.0/24"
iface: "access"
mode: af_packet # Options: af_packet or dpdk
default_upf:
ip:
access: "10.189.16.3/24"
core: "10.189.20.3/24"
ue_ip_pool: "172.250.0.0/16"
amf:
ip: "10.189.8.10"Given we are using the
sdcore-5g-values.yamlvalues file for this blueprint, we need to modify thedeps/5gc/roles/core/templates/sdcore-5g-values.yamlas follows:In the
subscriberssection, modify theueId-startandueId-endvalues,opcandkeyto reflect that of the UEs to be used with the Ericsson gNB. In thedevice-groupssection, the imsis should also be updated to reflect all the UEs to be connected to the network.The
plmnIdalso need to match the PLMN ID set in the Ericsson gNB. In this blueprint, we use24080.Depending on the IP address pool needed for the UEs, we modify the
ue-ip-poolaccordingly. For instance, to dynamically assign IPs to UEs from10.189.55.0/24subnet, set the following:ue-ip-pool: "10.189.55.0/24"Update the
network-slicessection withsdandsstvalues matching that of the gNB. Also, thegNodeBssubsection should also be updated with matchingname,tac,mccandmnc.
After modification, the omec-sub-provision section of the sdcore-5g-values.yaml file should like the following:
# Override values for omec-sub-provision (subscriber) Helm Chart
# https://github.com/omec-project/sdcore-helm-charts/blob/main/omec-sub-provision/values.yaml
# ***Note: Most of these values can (and should) be set via ROC API***
omec-sub-provision:
enable: true
images:
repository: "" # defaults to Docker Hub
#tags:
# simapp: #add simapp override image
config:
simapp:
cfgFiles:
simapp.yaml:
configuration:
provision-network-slice: {{ core.standalone | string }} # if enabled, Device Groups & Slices configure by simapp
sub-provision-endpt:
addr: webui.omec.svc.cluster.local # subscriber configuation endpoint.
# sub-proxy-endpt: # used if subscriber proxy is enabled in the ROC.
# addr: subscriber-proxy.aether-roc.svc.cluster.local
# port: 5000
# Configure Subscriber IMSIs and their security details.
# You can have any number of subscriber ranges
# This block is always necessary to establish range(s) of valid IMSIs
subscribers:
- ueId-start: "240800100007487"
ueId-end: "240800100007500"
plmnId: "24080"
opc: "981d464c7c52eb6e5036234984ad0bcf"
op: ""
key: "5122250214c33e723a5dd523fc145fc0"
sequenceNumber: "16f3b3f70fc2"
- ueId-start: "240800100007501"
ueId-end: "240800100007586"
plmnId: "24080"
opc: "981d464c7c52eb6e5036234984ad0bcf"
op: ""
key: "5122250214c33e723a5dd523fc145fc0"
sequenceNumber: "16f3b3f70fc2"
# Configure Device Groups (ignored if provision-network-slice is disabled)
device-groups:
- name: "5g-gnbsim-user-group1"
imsis:
- "240800100007501"
- "240800100007502"
- "240800100007503"
- "240800100007504"
ip-domain-name: "pool1"
ip-domain-expanded:
dnn: internet
dns-primary: "8.8.8.8" # Value is sent to UE
mtu: 1460 # Value is sent to UE when PDU Session Established
ue-ip-pool: "10.189.55.0/24" # IP address pool for subscribers
ue-dnn-qos:
dnn-mbr-downlink: 1000 # UE level downlink QoS (Maximum bit rate per UE)
dnn-mbr-uplink: 1000 # UE level uplink QoS (Maximum bit rate per UE)
bitrate-unit: Mbps # Unit for above QoS rates
traffic-class: # Default bearer QCI/ARP (not used in 5G)
name: "platinum"
qci: 9
arp: 6
pdb: 300
pelr: 6
site-info: "enterprise"
# UPF allocates IP address if there is only 1 device-group
# SMF allocates IP address if there is >1 device-group
# Configure Network Slices (ignored if provision-network-slice is disabled)
network-slices:
- name: "default" # can be any unique slice name
slice-id: # must match with slice configured in gNB, UE
sd: "000001"
sst: 1
site-device-group:
- "5g-gnbsim-user-group1" # All UEs in this device-group are assigned to this slice
# Applicaiton filters control what each user can access.
# Default, allow access to all applications
application-filtering-rules:
- rule-name: "ALLOW-ALL"
priority: 250
action: "permit"
endpoint: "0.0.0.0/0"
site-info:
# Provide gNBs and UPF details and also PLMN for the site
gNodeBs:
- name: "RESEARCH_PARK_BUILDING_MB"
tac: 4694
plmn:
mcc: "240"
mnc: "80"
site-name: "enterprise"
upf:
upf-name: "upf" # associated UPF for this slice. One UPF per Slice.
upf-port: 8805In this blueprint, we use different subnets for the UPF access and core networks. Therefore, we will have to update the access.ip, access.gateway, core.ip and core.gateway sections of the omec-user-plane in the sdcore-5g-values.yaml file as seen the next section.
omec-user-plane:
enable: true
nodeSelectors:
enabled: true
resources:
enabled: false
images:
repository: "" # defaults to Docker Hub
# following two lines pull busybox from Docker Hub instead of Aether Registry
tags:
tools: omecproject/busybox:stable
# uncomment following section to add update bess image tag
#tags:
# bess: <bess image tag>
# pfcpiface: <pfcp image tag>
config:
upf:
name: "oaisim"
sriov:
enabled: false # SRIOV is disabled by default
hugepage:
enabled: false # Should be enabled if DPDK is enabled
routes:
- to: {{ ansible_default_ipv4.address }}
via: 169.254.1.1
enb:
subnet: {{ ran_subnet }} # Subnet for the gNB network
access:
ipam: static
cniPlugin: macvlan # Can be any other plugin. Dictates how IP address are assigned
iface: {{ core.data_iface }}
gateway: 10.189.16.1
ip: 10.189.16.3/24
core:
ipam: static
cniPlugin: macvlan # Can be any other plugin. Dictates how IP address are assigned
iface: {{ core.data_iface }}
gateway: 10.189.20.1
ip: 10.189.20.3/24
cfgFiles:
upf.jsonc:
mode: af_packet # This mode implies no DPDK
hwcksum: true
log_level: "trace"
measure_upf: true
measure_flow: true
gtppsc: true # Extension header enabled in 5G.
#core:
# ifname: core
# ip_masquerade: 10.189.8.10
cpiface:
dnn: "internet" # Must match Slice dnn
hostname: "upf"
#http_port: "8080"
enable_ue_ip_alloc: false # If true, UPF allocates address from following pool
ue_ip_pool: "10.189.55.0/24" # IP pool used UEs if enable_ue_ip_alloc=true
slice_rate_limit_config: # Slice-level rate limiting (also controlled by ROC)
# Uplink
n6_bps: 10000000000 # 10Gbps
n6_burst_bytes: 12500000 # 10ms * 10Gbps
# Downlink
n3_bps: 10000000000 # 10Gbps
n3_burst_bytes: 12500000 # 10ms * 10GbpsGiven we are using a different subnet for UPF
accessnetworks, we need to modify the20-aether-access.networkas follows:
[Match]
Name=access
[Network]
IPForward=yes
Address=10.189.16.1/24Similarly, we need to modify the
20-aether-core.network. TheDestinationnetwork represents the network dedicated for the UEs. After modification, the content of the file should look like the following:
[Match]
Name=core
[Network]
IPForward=yes
Address=10.189.20.1/24
[Route]
Gateway=10.189.20.3
Destination=10.189.55.0/24Finally, we modify the
aether-ue-nat.servicefile to reflect the updated UE address pool or subnet as follows:
[Service]
Type=oneshot
ExecStart=/bin/bash -c "sudo iptables -t nat -C POSTROUTING -s 10.189.55.0/24 -o {{ core.data_iface }} -j MASQUERADE || sudo iptables -t nat -A POSTROUTING -s 10.189.55.0/24 -o {{ core.data_iface }} -j MASQUERADE"
[Install]
WantedBy=sys-subsystem-net-devices-core.deviceRestarting Aether SD-Core
After making the configuration changes, we need to restart the core by running the following commands:
make aether-5gc-uninstall
make aether-5gc-installPreparing Quectel UEs
For the purpose of this blueprint, we use the Quectel RG530N UE to connect to the Ericsson gNB. Given a SIM card is needed to make the UE work, we will highlight the steps in programming the SIM card using the SIM card reader/writer from OpenCell highlighted in the beginning of the this blueprint.
To begin the UICC/SIM programming using OpenCells, you need to download the source code of the UICC software here.
Untar the downloaded zip file by running the following command:
tar -xvzf uicc-v3.3.tgzChange directory to uicc-v3.3 and build by doing the following:
cd uicc-v3.3
makeAfter building the software, we are ready to start programming the SIM.
Insert the SIM card into the SIM card reader/writer and plug the SIM card reader/writer into the USB port of your computer.
To program the SIM card, you will need to set the
plmnId(constructed from a valid MCC/MNC pair), theimsi,adm,spnand two secret keys for each SIM card. For this blueprint, we will use the following values:
IMSI:
240800100007501OPc:
981d464c7c52eb6e5036234984ad0bcfKey:
5122250214c33e723a5dd523fc145fc0spn:
Ericsson5gadm:
12345678
The adm is the 8-digit master password written on the SIM card. Each SIM card has a unique adm value. The spn is the service provider name – the name that the UE will show as ‘network’ (default “open cells”). More UICC flags can be found by running the command below:
sudo ./program_uicc --helpNow the SIM is programmed by running the command below:
sudo ./program_uicc --adm 12345678 --imsi 240800100007501 --key 5122250214c33e723a5dd523fc145fc0 --opc 981d464c7c52eb6e5036234984ad0bcf -spn "Ericsson5g" --authenticateAfter inserting the SIM card into the device and powering it up, run the Quectel Connection Manager to attach the UE to the network.