Delving into new technologies brings a variety of challenges to professionals in every field. For developers, the quest for a dependable and powerful infrastructure to deploy their code is paramount. Solution Architects, on the other hand, seek in-depth insights into testing environments to deliver superior solutions and identify possible defects or areas for enhancement proactively. Ultimately, this leads us to a universal query: Where can we find the liberty to fully exercise our technical capabilities?
Fortunately, the open-source community offers a remedy to these concerns, with a single, unique challenge: the execution and ongoing management of open-source software. Emphasizing collaboration is vital, and it is with this spirit that I intend to arm both 5G developers and Solution Architects through this post with a 5G RAN-Core Open-Source platform, which is ideal for comprehensive End-to-End simulations and diligent monitoring of Key Performance Indicators (KPIs).
Proposed Topology:
AWS Topology includes Components such as:
- VPC
- Internet Gateway
- NAT gateway
- EC2 (T2.Medium) -> Selection based on Memory utilization. The cheapest option would be T4G.nano For a cost estimation, please refer to the following link: AWS_calculator
IP Design & Requirements:
5G-RAN&CORE
- The first image shows the VM requirements for Open5GS and ERANSIM open-source projects:
- The following tables describe the 5G-RAN and 5G Core components main configurations (some of them are default values when deploying software packages)'
gNB Configuration
AMF Configuration
SMF Configuration
UPF Configuration
5G-UE
- The table below describes UE setup:
Other Software Packages
One of the common issues you can face while deploying open-source projects is software version compatibility. The Below table details all tested software versions used for this 5GRAN-Core architecture.
Configuration:
For the initial software installation, I used the following references, which already explain the step-by-step installation:
- Open5GS & UERANSIM 5G-Core Setup
- UERANSIM UERANSIM Installation
In this blog though, I want to discuss the issues I found while executing the above guidelines.
Troubleshooting:
1. During Open5GS - UE Device Provisioning:
This is a key step to perform E2E test cases, as we need to provision 5G UEs into UDR to complete initial registration.
During Step-4 (Register UE Device)
# install nodejs sudo apt update sudo apt install curl curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt install nodejs # clone webui git clone https://github.com/open5gs/open5gs.git # run webui with npm cd webui npm run dev --host 0.0.0.0
The following error is shown:
node:internal/modules/cjs/loader:1080 throw err; ^ Error: Cannot find module 'co' Require stack: /home/freicy/open5gs/webui/server/index.js at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15) at Module._load (node:internal/modules/cjs/loader:922:27) at Module.require (node:internal/modules/cjs/loader:1143:19) at require (node:internal/modules/cjs/helpers:121:18) at Object. (/home/freicy/open5gs/webui/server/index.js:6:12) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Module._load (node:internal/modules/cjs/loader:960:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) { code: 'MODULE_NOT_FOUND', requireStack: [ '/home/freicy/open5gs/webui/server/index.js' ] }
In order to solve this error, NodeJS must be installed in a docker container as follows:
Reference: NodeJS Installation
$ cd docker $ docker compose run dev root@ip-10-0-14-98:~# sudo apt update root@ip-10-0-14-98:~#sudo apt install -y ca-certificates curl gnupg root@ip-10-0-14-98:~# sudo mkdir -p /etc/apt/keyrings root@ip-10-0-14-98:~# curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg root@ip-10-0-14-98:~# NODE_MAJOR=20 root@ip-10-0-14-98:~# echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list root@ip-10-0-14-98:~# sudo apt update root@ip-10-0-14-98:~# sudo apt install nodejs -y root@ip-10-0-14-98:~# sudo npm run dev
Once Web interface is available, you should be able to login using default admin credentials:
username - admin
password - 1423
After provisioning 5G-UE, the information will be shown as below:
2. During UERANSIM installation:
After executing the following steps:
sudo snap install cmake --classic cd ~/UERANSIM make
The following error showed up:
/home/ubuntu/UERANSIM/src/ue.cpp: In function ‘nr::ue::UeConfig* ReadConfigYaml()’: /home/ubuntu/UERANSIM/src/ue.cpp:164:17: error: ‘struct nr::ue::UeConfig’ has no member named ‘tunPrefix’ 164 | result->tunPrefix = yaml::GetString(config, "tunPrefix", 1, 12); | ^~~~~~~~~ /home/ubuntu/UERANSIM/src/ue.cpp: In function ‘nr::ue::UeConfig* GetConfigByUe(int)’: /home/ubuntu/UERANSIM/src/ue.cpp:362:8: error: ‘struct nr::ue::UeConfig’ has no member named ‘tunPrefix’ 362 | c->tunPrefix = g_refConfig->tunPrefix; | ^~~~~~~~~ /home/ubuntu/UERANSIM/src/ue.cpp:362:33: error: ‘struct nr::ue::UeConfig’ has no member named ‘tunPrefix’ 362 | c->tunPrefix = g_refConfig->tunPrefix; | ^~~~~~~~~ gmake[3]: *** [CMakeFiles/nr-ue.dir/build.make:76: CMakeFiles/nr-ue.dir/src/ue.cpp.o] Error 1 gmake[3]: Leaving directory '/home/ubuntu/UERANSIM/cmake-build-release' gmake[2]: *** [CMakeFiles/Makefile2:270: CMakeFiles/nr-ue.dir/all] Error 2 gmake[2]: Leaving directory '/home/ubuntu/UERANSIM/cmake-build-release' gmake[1]: *** [Makefile:91: all] Error 2 gmake[1]: Leaving directory '/home/ubuntu/UERANSIM/cmake-build-release' make: *** [makefile:12: build] Error 2
Workaround:
I made the following changes, commenting lines #163-164 and 362:
vi /home/ubuntu/UERANSIM/src/ue.cpp ... 356 c->imeiSv = g_refConfig->imeiSv; 357 c->supi = g_refConfig->supi; 358 c->protectionScheme = g_refConfig->protectionScheme; 359 c->homeNetworkPublicKey = g_refConfig->homeNetworkPublicKey.copy(); 360 c->homeNetworkPublicKeyId = g_refConfig->homeNetworkPublicKeyId; 361 c->routingIndicator = g_refConfig->routingIndicator; 362 //c->tunPrefix = g_refConfig->tunPrefix; 363 c->hplmn = g_refConfig->hplmn; 364 c->configuredNssai = g_refConfig->configuredNssai; 365 c->defaultConfiguredNssai = g_refConfig->defaultConfiguredNssai; 366 c->supportedAlgs = g_refConfig->supportedAlgs; 367 c->gnbSearchList = g_refConfig->gnbSearchList; ...
148 // If we have multiple UEs in the same process, then log names should be separated. 149 result->prefixLogger = g_options.count > 1; 150 151 if (yaml::HasField(config, "supi")) 152 result->supi = Supi::Parse(yaml::GetString(config, "supi")); 153 if (yaml::HasField(config, "protectionScheme")) 154 result->protectionScheme = yaml::GetInt32(config, "protectionScheme", 0, 255); 155 if (yaml::HasField(config, "homeNetworkPublicKeyId")) 156 result->homeNetworkPublicKeyId = yaml::GetInt32(config, "homeNetworkPublicKeyId", 0, 255); 157 if (yaml::HasField(config, "homeNetworkPublicKey")) 158 result->homeNetworkPublicKey = OctetString::FromHex(yaml::GetString(config, "homeNetworkPublicKey", 64, 64)); 159 if (yaml::HasField(config, "imei")) 160 result->imei = yaml::GetString(config, "imei", 15, 15); 161 if (yaml::HasField(config, "imeiSv")) 162 result->imeiSv = yaml::GetString(config, "imeiSv", 16, 16); 163 /*if (yaml::HasField(config, "tunPrefix")) 164 result->tunPrefix = yaml::GetString(config, "tunPrefix", 1, 12);*/ 165 166 yaml::AssertHasField(config, "integrity"); 167 yaml::AssertHasField(config, "ciphering");
Explanation:
Commented lines refer to TunPrefix attribute for 5G-UE, which is not a mandatory attribute for PDU Session Establishment.
E2E Verification:
NG Setup Procedure:
For verification, I will use the following commands from UERANSIM Server:
ubuntu@ip-10-0-31-9:~/UERANSIM/build$ pwd /home/ubuntu/UERANSIM/build ubuntu@ip-10-0-31-9:~/UERANSIM/build$ ./nr-gnb -c ../config/open5gs-gnb.yaml
gGNB: UERANSIM v3.2.6 [2023-11-06 12:16:16.825] [sctp] [info] Trying to establish SCTP connection... (10.0.14.98:38412) [2023-11-06 12:16:16.829] [sctp] [info] SCTP connection established (10.0.14.98:38412) [2023-11-06 12:16:16.829] [sctp] [debug] SCTP association setup ascId[4] [2023-11-06 12:16:16.830] [ngap] [debug] Sending NG Setup Request [2023-11-06 12:16:16.831] [ngap] [debug] NG Setup Response received [2023-11-06 12:16:16.831] [ngap] [info] NG Setup procedure is successful
AMF: 11/06 12:30:35.332: [amf] INFO: gNB-N2 accepted[10.0.31.9]:60504 in ng-path module (../src/amf/ngap-sctp.c:113) 11/06 12:30:35.332: [amf] INFO: gNB-N2 accepted[10.0.31.9] in master_sm module (../src/amf/amf-sm.c:741) 11/06 12:30:35.332: [amf] INFO: [Added] Number of gNBs is now 1 (../src/amf/context.c:1185) 11/06 12:30:35.332: [amf] INFO: gNB-N2[10.0.31.9] max_num_of_ostreams : 10 (../src/amf/amf-sm.c:780)
UE Registration & PDU Session Establishment:
gNB
ubuntu@ip-10-0-31-9:~/UERANSIM/build$ ./nr-ue -c ../config/open5gs-ue.yaml UERANSIM v3.2.6 [2023-11-06 12:31:38.643] [rrc] [debug] UE[1] new signal detected [2023-11-06 12:31:38.644] [nas] [info] UE switches to state [MM-DEREGISTERED/PLMN-SEARCH] [2023-11-06 12:31:38.645] [rrc] [debug] New signal detected for cell[1], total [1] cells in coverage [2023-11-06 12:31:38.646] [nas] [info] Selected plmn[901/70] [2023-11-06 12:31:38.646] [rrc] [info] Selected cell plmn[901/70] tac[1] category[SUITABLE] [2023-11-06 12:31:38.646] [nas] [info] UE switches to state [MM-DEREGISTERED/PS] [2023-11-06 12:31:38.646] [nas] [info] UE switches to state [MM-DEREGISTERED/NORMAL-SERVICE] [2023-11-06 12:31:38.646] [nas] [debug] Initial registration required due to [MM-DEREG-NORMAL-SERVICE] [2023-11-06 12:31:38.650] [nas] [debug] UAC access attempt is allowed for identity[0], category[MO_sig] [2023-11-06 12:31:38.650] [nas] [debug] Sending Initial Registration [2023-11-06 12:31:38.652] [nas] [info] UE switches to state [MM-REGISTER-INITIATED] [2023-11-06 12:31:38.652] [rrc] [debug] Sending RRC Setup Request [2023-11-06 12:31:38.652] [rrc] [info] RRC Setup for UE[1] [2023-11-06 12:31:38.653] [rrc] [info] RRC connection established [2023-11-06 12:31:38.653] [rrc] [info] UE switches to state [RRC-CONNECTED] [2023-11-06 12:31:38.653] [nas] [info] UE switches to state [CM-CONNECTED] [2023-11-06 12:31:38.653] [ngap] [debug] Initial NAS message received from UE[1] [2023-11-06 12:31:38.666] [nas] [debug] Authentication Request received [2023-11-06 12:31:38.673] [nas] [debug] Security Mode Command received [2023-11-06 12:31:38.673] [nas] [debug] Selected integrity[2] ciphering[0] [2023-11-06 12:31:38.694] [ngap] [debug] Initial Context Setup Request received [2023-11-06 12:31:38.694] [nas] [debug] Registration accept received [2023-11-06 12:31:38.695] [nas] [info] UE switches to state [MM-REGISTERED/NORMAL-SERVICE] [2023-11-06 12:31:38.695] [nas] [debug] Sending Registration Complete [2023-11-06 12:31:38.695] [nas] [info] Initial Registration is successful [2023-11-06 12:31:38.695] [nas] [debug] Sending PDU Session Establishment Request [2023-11-06 12:31:38.695] [nas] [debug] UAC access attempt is allowed for identity[0], category[MO_sig] [2023-11-06 12:31:38.899] [nas] [debug] Configuration Update Command received [2023-11-06 12:31:38.917] [ngap] [info] PDU session resource(s) setup for UE[1] count[1] [2023-11-06 12:31:38.918] [nas] [debug] PDU Session Establishment Accept received [2023-11-06 12:31:38.918] [nas] [info] PDU Session establishment is successful PSI[1]
AMF
ubuntu@ip-10-0-14-98:~$ sudo tail -f /var/log/open5gs/amf.log 11/06 12:31:38.654: [amf] INFO: InitialUEMessage (../src/amf/ngap-handler.c:401) 11/06 12:31:38.654: [amf] INFO: [Added] Number of gNB-UEs is now 1 (../src/amf/context.c:2523) 11/06 12:31:38.654: [amf] INFO: RAN_UE_NGAP_ID[1] AMF_UE_NGAP_ID[1] TAC[1] CellID[0x10] (../src/amf/ngap-handler.c:562) 11/06 12:31:38.655: [amf] INFO: [suci-0-901-70-0000-0-0-0000000001] Unknown UE by SUCI (../src/amf/context.c:1789) 11/06 12:31:38.655: [amf] INFO: [Added] Number of AMF-UEs is now 1 (../src/amf/context.c:1570) 11/06 12:31:38.655: [gmm] INFO: Registration request (../src/amf/gmm-sm.c:1061) 11/06 12:31:38.655: [gmm] INFO: [suci-0-901-70-0000-0-0-0000000001] SUCI (../src/amf/gmm-handler.c:157) 11/06 12:31:38.898: [gmm] INFO: [imsi-901700000000001] Registration complete (../src/amf/gmm-sm.c:1993) 11/06 12:31:38.898: [amf] INFO: [imsi-901700000000001] Configuration update command (../src/amf/nas-path.c:612) 11/06 12:31:38.898: [gmm] INFO: UTC [2023-11-06T12:31:38] Timezone[0]/DST[0] (../src/amf/gmm-build.c:558) 11/06 12:31:38.898: [gmm] INFO: LOCAL [2023-11-06T12:31:38] Timezone[0]/DST[0] (../src/amf/gmm-build.c:563) 11/06 12:31:38.898: [amf] INFO: [Added] Number of AMF-Sessions is now 1 (../src/amf/context.c:2544) 11/06 12:31:38.898: [gmm] INFO: UE SUPI[imsi-901700000000001] DNN[internet] S_NSSAI[SST:1 SD:0xffffff] (../src/amf/gmm-handler.c:1247) 11/06 12:31:38.922: [amf] INFO: [imsi-901700000000001:1:11][0:0:NULL] /nsmf-pdusession/v1/sm-contexts/{smContextRef}/modify (../src/amf/nsmf-handler.c:837)
UPF
ubuntu@ip-10-0-14-98:~$ sudo tail -f /var/log/open5gs/upf.log 11/06 11:29:26.714: [pfcp] INFO: ogs_pfcp_connect() [127.0.0.4]:8805 (../lib/pfcp/path.c:61) 11/06 11:29:26.714: [upf] INFO: PFCP associated [127.0.0.4]:8805 (../src/upf/pfcp-sm.c:184) 11/06 12:31:38.911: [upf] INFO: [Added] Number of UPF-Sessions is now 1 (../src/upf/context.c:206) 11/06 12:31:38.911: [gtp] INFO: gtp_connect() [127.0.0.4]:2152 (../lib/gtp/path.c:60) 11/06 12:31:38.911: [upf] INFO: UE F-SEID[UP:0x876 CP:0x9c2] APN[internet] PDN-Type[1] IPv4[10.45.0.2] IPv6[] (../src/upf/context.c:483) 11/06 12:31:38.911: [upf] INFO: UE F-SEID[UP:0x876 CP:0x9c2] APN[internet] PDN-Type[1] IPv4[10.45.0.2] IPv6[] (../src/upf/context.c:483) 11/06 12:31:38.919: [gtp] INFO: gtp_connect() [10.0.31.9]:2152 (../lib/gtp/path.c:60)
KPI Monitoring (Ongoing):
Let's talk about the multiple KPIs we can refer for this 5G RAN-Core solution.
NFVI:
- CPU utilization (%)
- Network in (bytes)
- Network out (bytes)
- Disk reads (bytes)
- Disk read operations (operations)
- Disk writes (bytes)
- Memory Utilization
Thanks to AWS existing Monitoring tools, such as CloudWatch, we can achieve NFVI monitoring at a granular level:
5G:
- Initial Registration Failure ratio (AMF)
- Service Request Failure ratio (AMF-SMF)
- Number of Subscribers (SMF)
- PCFP Association Setup/Session Establishment Failure Ratio (SMF-UPF)
- Packet Loss (UPF)
- Data Volume & Guaranteed Data rate (UPF)
RAN
- Loading..
Thank you for reading all the way through this post. In upcoming ones, I will discuss the challenges and benefits of deploying this same architecture in AWS Contenarized solution (AWS EKS)
Happy Learning!
Top comments (0)