Run an OpenAirInterface LTE softmodem eNB and UE on two COSMOS nodes with USRP radios, establish an over-the-air link without an EPC (no-S1 mode), and verify end-to-end IP connectivity between the two nodes.
This tutorial walks through running OpenAirInterface (OAI) LTE in no-S1 (noEPC) mode on two nodes within RF range of each other. One node acts as the eNB (base station) and the other as the UE (user equipment). Both nodes run the OAI softmodem binaries. Once the air link is established, virtual network interfaces appear on both nodes and basic IP traffic (ping, iperf) can be exchanged over the emulated LTE connection.
The tutorial adapts the Eurecom no-S1 guide for COSMOS testbed hardware and includes domain-specific parameter notes for sb2, sb4, and legacy sb1/sb2 orbit sandboxes.
After completing this tutorial you will be able to:
| Difficulty | Intermediate |
| Estimated time | 90 min |
| Domain / sandbox | sb2.cosmos-lab.org, sb4.cosmos-lab.org (see domain-specific notes) |
| Topic group | Cellular 4G/5G & O-RAN |
| Last verified | Not re-tested (migrated 2026-06-20) |
Background knowledge
Account & access
Devices / nodes
| Resource | Role | Qty | Notes |
|---|---|---|---|
| node1-1 (or any node with supported USRP) | eNB (base station) | 1 | Must be within RF range of UE node |
| node1-2 (or any node with supported USRP) | UE (user equipment) | 1 | Must be within RF range of eNB node |
Disk images
| Image | Load onto | Provides |
|---|---|---|
| tutorial-oai.ndz | both nodes (eNB and UE) | Pre-staged OAI source tree, build scripts, and run scripts under /opt/oaiscripts/ and /opt/openairinterface5g/ |
Software components
| Component | Version | Source |
|---|---|---|
| OpenAirInterface5G (lte-softmodem / lte-uesoftmodem) | TODO: verify | Preinstalled in tutorial-oai.ndz; must be built via /opt/oaiscripts/build_oai.sh after imaging |
| UHD (USRP Hardware Driver) | TODO: verify | Preinstalled in tutorial-oai.ndz |
| xforms (optional GUI plots) | TODO: verify | Preinstalled in tutorial-oai.ndz; requires X11 forwarding |
Spectrum / RF
Nodes must be within RF range of each other. Supported radios: USRP X310, USRP-2974 (PCIe), USRP B210. The default config in this tutorial uses FDD Band 7 (2680 MHz DL), 5 MHz / 25 PRB. For sb4.cosmos-lab.org, use the RF matrix to provide ~60 dB of attenuation between nodes. For sb2.cosmos-lab.org, use the RFSWITCH service (set all switches to port 1 for antenna).
Two testbed nodes, each with a USRP radio, communicate over the air in no-S1 LTE mode. Node 1 runs the OAI lte-softmodem (eNB); node 2 runs lte-uesoftmodem (UE). Both are accessed via SSH from the sandbox console. An optional X11-forwarded graphical display shows real-time xforms signal plots on both nodes.
ssh <username>@console.sb2.cosmos-lab.org
omf tell -a offh -t system:topo:allres
omf load -i tutorial-oai.ndz -t system:topo:allres
omf tell -a on -t system:topo:allres
omf stat -t system:topo:allres
ssh -X <username>@console.sb2.cosmos-lab.org
# then from the console:
ssh -X root@node1-1
ssh -X root@node1-2
Otherwise, SSH to the nodes without -X:ssh root@node1-1
ssh root@node1-2
On node 1, run the build script. This compiles the OAI softmodem for the current hardware and kernel:
/opt/oaiscripts/build_oai.sh
This may take several minutes. Wait for the build to complete before proceeding.
Edit the eNB run script to configure the SDR in use (IP address, gain, etc.):
/opt/oaiscripts/run_enb.sh
Below is an example run_enb.sh — adjust parameters for your hardware (see domain-specific notes in the next section):
#! /bin/bash
#sdr_addrs takes standard uhd arguments, such as:
#"type=x300,addr=192.168.40.2" #x310 over direct network
#"type=x300,resource=rio0" #x310 over pcie
#"type=b210" #b210 over usb
#values for RUs.[0] override config file, must be set per usrp type
# -d enables xforms charts
cd /opt/openairinterface5g
source oaienv
cd ./cmake_targets
./lte_build_oai/build/lte-softmodem \
-O $OPENAIR_HOME/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf \
--nokrnmod 1 --noS1 --eNBs.[0].rrc_inactivity_threshold 0 \
--RUs.[0].att_tx 40 --RUs.[0].att_rx 0 \
--usrp-args "type=b200" \
-d
On node 2, run the same build script:
/opt/oaiscripts/build_oai.sh
Edit the UE run script to configure the SDR in use:
/opt/oaiscripts/run_ue.sh
Below is an example run_ue.sh — adjust parameters for your hardware:
#! /bin/bash
#sdr_addrs takes standard uhd arguments, such as:
#"type=x300,addr=192.168.40.2" #x310 over direct network
#"type=x300,resource=rio0" #x310 over pcie
#"type=b210" #b210 over usb
#values for RUs.[0] override config file, must be set per usrp type
# -d enables xforms charts
cd /opt/openairinterface5g
source oaienv
cd ./cmake_targets/lte_build_oai/build
./lte-uesoftmodem \
-C 2680000000 -r 25 \
--ue-scan-carrier --nokrnmod 1 --noS1 \
--ue-rxgain 120 --ue-txgain 30 --ue-max-power 0 \
--ue-nb-ant-tx 1 --ue-nb-ant-rx 1 \
--usrp-args "type=b200" \
-d
If both softmodems connect successfully, new network interfaces will appear on both nodes with the following addresses:
10.0.1.110.0.1.2From either node, confirm connectivity with ping or iperf:
ping 10.0.1.2
or
iperf -s # on one node
iperf -c 10.0.1.1 # on the other node
"type=x3xx,resource=rio0" (USRP-2974 over PCIe).att_tx=70, att_rx=10."type=x3xx,addr=192.168.40.2" (X310 over direct Ethernet).192.168.40.1/16."type=b210" (B210 over USB).120300400"type=b210" (B210 over USB).10.0.1.1 on the eNB, 10.0.1.2 on the UE).ping 10.0.1.2 (or 10.0.1.1) succeeds with low loss and reasonable latency.The OAI -d flag enables xforms real-time visualization. Plot and channel abbreviations from the OAI documentation (reference: MathWorks LTE Physical Channels):
Calibration reference plots available in the xforms display:
Achievable throughput depends on:
For the default configuration in this tutorial (1×1 non-MIMO, FDD Band 7, 5 MHz / 25 PRB, up to 256QAM):
omf tell -a offh -t system:topo:allres
(No omf save is needed unless you modified the image during the experiment.)
| Symptom | Likely cause | Fix |
|---|---|---|
Build fails during build_oai.sh |
Kernel headers mismatch or missing dependencies | Ensure the image loaded correctly; retry after re-imaging |
| eNB softmodem exits immediately | Wrong --usrp-args for the hardware present |
Check the domain-specific notes; verify USRP connectivity with uhd_find_devices |
UE does not associate / no 10.0.1.x interface |
eNB not ready, wrong carrier frequency, or gain mismatch | Confirm the eNB is running and outputting signal; check -C (carrier) and gain flags match the eNB config |
| USRP X310 not found on sb2 (PCIe path) | PCIe RIO driver not loaded | Use --usrp-args "type=x3xx,resource=rio0"; confirm driver with uhd_find_devices |
| USRP X310 not found on legacy sb2 orbit (Ethernet path) | USRP Ethernet interface not configured | Bring up interface and set IP 192.168.40.1/16; ping 192.168.40.2 to confirm |
| Ping between 10.0.1.1 and 10.0.1.2 fails | Link up but routing not set | Verify tunnel interfaces exist with ip addr; check routing table with ip route |
Author(s): COSMOS team · Last verified: Not re-tested (migrated 2026-06-20) · Tested image/release: tutorial-oai.ndz · Tags: oai, openairinterface, lte, enb, ue, usrp, 4g, no-s1