1. Core network
1.1 Open5GS core
Confirm the core configuration
- In the top navigation, open Open5GS core → Version management, then open the configuration directory.
- Open the
.envfile and check values such as the AMF IP address, MCC, and MNC.
- In the AMF configuration, check TAC and slice settings.
- In the SMF and UPF configuration, check the DNN/APN and the supported IP types. If you change them, update both files together.
Provision subscribers
- Open Open5GS core → Subscription management.
- In Subscription templates, click Add and create a template for the shared parameters.
- Profile name: any name
- K:
00112233445566778899AABBCCDDEEFF - AMF:
9001 - OP/OPC: OPC
000102030405060708090A0B0C0D0E0F - Slice: SST 1, SD empty. This must match the core configuration.
- DNN/APN:
open5g. This must match the core configuration. - Type: IPv4v6 or IPv4. Match what the core supports.
- Under Subscribers, click Add. Select the template you just created, enter a 15-digit IMSI, then click Create. Restart the core after provisioning.
Start and stop the core
- Open Open5GS core → Metrics. Click Start, choose the configuration, then click Start again. Use Logs to watch the output.
- Click Stop to shut the core down.
1.2 OAI core
Confirm the core configuration
- Open OAI core → Version configuration, then open the configuration directory from the icon in the version row.
- In
open5g_studio.yaml, check the AMF IP address.
- Confirm the related settings in
conf.yaml.
Subscriber database:
Slice, MCC, MNC, and TAC:
APN/DNN. Later changes must be applied in every place shown below:
Provision subscribers
- Open OAI core → Subscription management and click Add.
- UE ID and SUPI: the 15-digit IMSI.
- encPerManentKey:
00112233445566778899AABBCCDDEEFF - encOpcKey:
000102030405060708090A0B0C0D0E0F - servingPlmnId:
00101. It must match the core MCC and MNC. - protectionParameterId:
00112233445566778899AABBCCDDEEFF - DNN:
open5g. It must match the core configuration. - defaultSessionType: IPv4v6. It must match the core.
Start and stop the core
- Open OAI core → Metrics. Click Start, choose the configuration in the dialog, then click Start. Use Logs to watch the core.
- Click Stop in the upper right to shut the core down.
2. Base station
2.1 OAI gNB
Edit the gNB configuration
Open OAI gNB → Version management, then click the edit button beside the configuration you want to change.
- TAC, MCC, MNC, and slice.
- IP addresses. The AMF address comes from the core configuration. The gNB address must be reachable from the core network.
- Frequency and bandwidth.
- PCIe/USB.
- Antennas.
Single antenna:
Dual antenna:
Four antennas:
Start and stop the gNB
- Open OAI gNB → Metrics and click Start. Choose the gNB version and configuration, then click Start.
- Use the log button to read the gNB log.
- Click Stop to shut the gNB down.
Start and stop an NTN gNB
The start sequence is the same as a normal gNB. The NTN configuration file is gnb.sa.band256.u0.106prb.yunsdr.ntn-leo.conf.
- The current stack only simulates LEO satellite orbits.
- gNB and UE coordinates cannot be changed yet.
2.2 srsRAN gNB
Edit the gNB configuration
Open srsRAN → Version management, then click the edit button beside the configuration file.
- IP address, PLMN, TAC, and slice.
addris the AMF address.bind_addris the gNB address and must reach the AMF. PLMN and TAC each appear in two places.
- Frequency and bandwidth. Set the SDR sample rate that matches the bandwidth. 100 MHz uses 122.88.
- PCIe/USB.
- Antenna count. Set this to match the hardware in use.
Start and stop the gNB
- Open srsRAN gNB → Metrics, click Start, choose the configuration, then click Start.
- Use Logs to watch the gNB.
- Click Stop to shut the gNB down.
3. OAI UE emulator
- The OAI UE emulator can attach only to an OAI gNB.
- Keep the UE emulator antennas as close to the gNB antennas as possible.
3.1 UE emulator (command line)
Terrestrial gNB
- Enter the OAI build directory.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w34/cmake_targets/- Start the emulator. Some values must be copied from the gNB startup log.
sudo ./ran_build/build/nr-uesoftmodem --usrp-args "dev=pciex:0,auxdac1=1650" --ue-rxgain 60 --ue-txgain 0 --ue-nb-ant-rx 1 --ue-nb-ant-tx 1 -C 3649380000 -r 273 --numerology 1 --ssb 1472 --band 78 --ue-fo-compensation --uicc0.imsi 001010000000004 --uicc0.key 00112233445566778899AABBCCDDEEFF --uicc0.opc 000102030405060708090A0B0C0D0E0F --uicc0.pdu_sessions.[0].dnn open5g- Press
Ctrl+Cto stop it.
| Parameter | Meaning |
|---|---|
--usrp-args | Fixed value on the current release |
dev=pciex:0,auxdac1=1660 | PCIe port and auxdac. Read the number after auxdac1 from the SDR nameplate |
--ue-rxgain | SDR receive gain. Larger means more gain. 102 is the maximum |
--ue-txgain | SDR transmit gain. Larger means less gain |
--ue-nb-ant-rx | Number of receive antennas |
--ue-nb-ant-tx | Number of transmit antennas |
-C | Center frequency used by the gNB. A green line in the gNB log contains this value |
-r | Bandwidth used by the gNB. 273 means 100 MHz. A green line in the gNB log contains this value |
--numerology | Subcarrier spacing. 1 means 30 kHz. A green line in the gNB log contains this value |
--ssb | SSB position. A green line in the gNB log contains this value |
--band | Band used by the gNB |
--uicc0.imsi | IMSI. Provision it on the core first |
--uicc0.key | Authentication key. Match the subscriber record |
--uicc0.opc | OPC. Match the subscriber record |
--uicc0.pdu_sessions.[0].dnn | DNN (APN). Match the core configuration and the subscriber record |
NTN gNB
The NTN UE emulator can currently be started only from the command line.
- Open the UE configuration directory and check the file.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w34/targets/PROJECTS/GENERIC-NR-5GC/CONF/
cat ue-ntn.confContents:
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
# The subscriber data must match the 5GC database used by the test lab.
uicc0 = {
imsi = "001010000000001";
key = "00112233445566778899AABBCCDDEEFF";
opc = "000102030405060708090A0B0C0D0E0F";
pdu_sessions = ({ dnn = "open5g"; nssai_sst = 1; });
}
# UE ECEF position used for NTN UE-specific timing advance.
position0 = {
x = 0.0;
y = 0.0;
z = 6377900.0;
}- Enter the build directory and start the UE emulator.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w34/cmake_targets/
sudo ./ran_build/build/nr-uesoftmodem \
--usrp-args 'dev=pcies:0,auxdac1=1660' \
-O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/ue-ntn.conf \
--band 256 -C 2185000000 --CO -190000000 -r 106 \
--numerology 0 --ssb 146 --time-sync-I 0.1 \
--ntn-initial-time-drift -46 --initial-fo 50340 \
--cont-fo-comp 2 --autonomous-ta --ue-txgain 20 --ue-rxgain 0| Parameter | Meaning |
|---|---|
-O | UE configuration file, as an absolute or relative path |
--usrp-args | dev=pcies:0,auxdac1=1660. SDR and frequency offset |
--band | gNB band, from the gNB log |
-C | Downlink frequency, from the gNB log |
--CO | Uplink/downlink frequency offset, from the gNB log |
-r | Bandwidth, from the gNB log |
--numerology | Subcarrier spacing, from the gNB log |
--ssb | SSB position, from the gNB log |
--time-sync-I | Time PI controller |
--ntn-initial-time-drift | Initial time-drift estimate |
--initial-fo | Doppler. Read it from the gNB log |
--cont-fo-comp | Continuous closed-loop Doppler compensation |
--autonomous-ta | Enable adaptive timing advance |
--ue-rxgain | Receive gain. Larger means more gain |
--ue-txgain | Transmit attenuation. Larger means more attenuation |
-A | Offset. Usually unused. PCIEX on the 7400 uses a fixed -300 |
The gNB log looks like the screenshot below. Use it for every parameter that must be copied from the log. A small Doppler error is acceptable.
3.2 UE emulator (Web)
The Web launcher currently has a problem and will be updated later. It still uses an old DNN value, so the PDU session cannot be established.
Terrestrial gNB
- Open OAI gNB → UE emulator.
- Set args, PCIe, transmit and receive gain, antenna count, cell band, bandwidth, frequency, and subscriber data.
- Choose the version and click Start. The button changes to Stop. Click it again to stop the emulator.
NTN gNB
- Select the NTN scenario and fill in the rest as shown.
-Opoints at the UE configuration. Use a path relative to the OAI root, for example~/sdr/Open5G/oai/openairinterface5g-2026-w34/. Do not use an absolute path.
The file contains the subscriber data and the position:
- Click Start in the upper right. After the emulator starts, the button turns into a red Stop button. Click it to stop.
4. Handset
4.1 APN/DNN
- On the home screen, open Settings → Mobile network → SIM1.
- Open APN and edit the profile, or add a new one.
- Set the following:
- Name: any value
- APN:
open5g(match the core; the open-source stack usesopen5g, commercial and 4G stacks useinternet) - MCC and MNC: split the PLMN. For PLMN
00101, MCC is001and MNC is01 - APN type:
default - APN protocol:
ipv4ipv6, matching the core - APN roaming protocol:
ipv4ipv6, matching the core
4.2 Enable 5G
- On the home screen, open Settings → Mobile network → SIM1.
- Turn on Enable 5G.
4.3 Turn off VoNR/VoLTE
- On the home screen, open Settings → Mobile network → SIM1.
- Find VoLTE HD calling and turn it off.
- On the dial pad, enter
*#*#4636#*#*. Open Phone information, set Preferred network type to NR only, then toggle airplane mode.
4.4 SA/NSA
- Open Settings → About phone → Version info. Tap Software version repeatedly until developer mode is enabled and Developer options appears.
- Open Settings → System management and upgrade → Developer options. Set 5G network mode to SA preferred (an option that includes SA or AUTO).
5. Traffic
5.1 Find the UE IP address
On the phone
Open Settings → My device → All specs and info → Status, then find IP address.
On other phones the path is Settings → About phone → Status.
On the core
Open5GS
- Open Open5GS core → Metrics, click Logs, and switch to the
open5gs-smftab to see the UE IP address.
- From the shell:
sudo docker logs -f open5gs-smfOAI
- Open OAI core → Metrics, click Logs, and switch to the
oai-smftab.
- From the shell:
sudo docker logs -f oai-smf5.2 iperf
Open5GS
- Open a terminal and enter the UPF container.
sudo docker exec -it open5gs-upf bash- Start iperf.
10.46.0.2is the UE address. Replace it with the address you actually received.
iperf -u -c 10.46.0.2 -t 1000 -b 1G -i 1 -l 1350- Press
Ctrl+Cto stop the traffic, then typeexitto leave the container.
OAI
- Run iperf against the UE.
192.168.70.135is the UPF address and10.0.0.2is the UE address. Replace both with the addresses in your lab.
docker exec -it oai-ext-dn iperf -u -t 86400 -i 1 -fk -B 192.168.70.135 -b 200M -c 10.0.0.25.3 VLC HD video (OAI)
Host that runs the gNB and core
IP address and route
- Give the host an address on a separate network, for example
192.168.3.10/24.
- Add a route.
10.46.0.0/24is the pool the core assigns to UEs.172.22.0.8is the UPF container address that bridges to the UPF.
sudo route add -net 10.46.0.0/24 gw 172.22.0.8Install and start VLC
- Install VLC.
sudo apt-get install vlc- On the gNB/core host, run
vlc.
- Open Media → Stream...
- Click +Add... and choose the HD video file.
- In the dropdown, choose Stream, then click the button to continue.
- Click Next. Nothing else is required on this screen.
- Enable Display locally if you want the video to play in this VLC window. For New destination, choose HTTP and click Add. Set an unused port, for example
8990, then click Next.
- Clear Activate Transcoding. Set Profile to
Video-H.264+MP3(TS), then click Next.
- Click Stream. No further settings are required.
Host that runs the UE emulator
IP address and route
- Start the OAI UE emulator and let it attach before doing anything else. Find the address with
ip aonoaitun_ue1. - Add a static route.
192.168.3.0/24is the network of the gNB host.10.46.0.1is the UPF address.
sudo route add -net 192.168.3.0/24 gw 10.46.0.1- Ping the far side to confirm connectivity.
Install and start VLC
- Install VLC.
sudo apt-get install vlc- Run
vlc.
- Open Media → Open Network Stream...
- On the Network tab, enter the stream URL.
192.168.3.10is the address of the host that runs VLC on the gNB side. The protocol and port are the ones configured on the VLC server. Click Play.
Android phone
- After the phone attaches, open VLC.
- On the home screen, open More in the bottom bar, then New stream. Enter the same URL used by the server and tap the play icon.
6. FAQ
None yet.
