![]() |
How to Connect OAI eNB (USRP B210) with OAI UE (USRP B210) without S1 Interface |
This tutorial is intended to setup the OAI eNB and OAI UE without the S1 interface and allowing the UE to connect with eNB. You need 2 Ubuntu machines.
This tutorial has been updated after the master
branch release (tag v1.1.0
) (July 2019).
This tutorial is heavily based on the way the OAI RAN CI job is running. See Jenkins job.
The procedures includes the following:
- HW setup
- Installing, Building the OAI eNB and the OAI UE
- Running OAI eNB and OAI UE with tunnel interfaces
- Running OAI eNB and OAI UE with the nasmesh kernel module
- Network Testing between OAI eNB and OAI UE in tunnel version.
1. HW setup
The two following configurations has been tested (use either one or the other) :
The attenuation between UE and eNB should be adjusted between 40 and 60 dB. You can start with 50 and in function of what is seen in the scope it should be adjusted.
The OAI CI Bench setup does not have attenuators.
2. Installing and Building the OAI eNB and the OAI UE
2.1 Installation of the eNB on the 1st Ubuntu Machine
Step 1: Check out the GIT trunk version of OAI
Download the source codes using GitLab:
mkdir -p ~/openairinterface5g
The instruction can be found at: Get the Sources.
Step 2: Run Automated Build Script for eNB
Build the eNB supporting B210:
cd ~/openairinterface5g/
# Retrieve the latest version of the `master` branch
git checkout master
# or Retrieve the tag used to write this tutorial
git checkout v1.1.0
source oaienv
cd cmake_targets
# no more need to specify noS1 as build option
./build_oai -w USRP --eNB
This should starts the building process in ~/openairinterface4g/cmake_targets/lte_build_oai
.
Please refer to Build documentation if you run into problems.
2.2 Installation of the UE on the 2nd Ubuntu Machine
Build the UE supporting B210:
cd ~/openairinterface5g
# Retrieve the latest version of the `master` branch
git checkout master
# or Retrieve the tag used to write this tutorial
git checkout v1.1.0
source oaienv
cd cmake_targets
./build_oai -w USRP --UE
This should starts the building process in ~/openairinterface4g/cmake_targets/lte_build_oai
.
3. Running OAI eNB and OAI UE with tunnel interfaces
NOTE: this is now the preferred and fully validated way
The setup should be started with running the OAI eNB first before running the OAI UE. Both OAI eNB and OAI UE are running on LTE FDD Band 7 (DL: 2680MHz, UL: 2560MHz).
3.1 Starting the eNB on the 1st Ubuntu Machine
source oaienv
cd ~/openairinterface5g/ci-scripts/conf_files
cp enb.band7.tm1.25PRB.usrpb210.conf my-enb.band7.tm1.25PRB.usrpb210.conf
# edit the conf file by replacing all `CI_*IP_ADDR` pattern with a dummy IP address
vi my-enb.band7.tm1.25PRB.usrpb210.conf
cd ~/openairinterface5g/cmake_targets
sudo -E ./lte_build_oai/build/lte-softmodem -O ~/openairinterface5g/ci-scripts/conf_files/ci-enb.band7.tm1.25PRB.usrpb210.conf --nokrnmod 1 --noS1 --eNBs.[0].rrc_inactivity_threshold 0 2>&1 | tee ENB.log
By running eNB with pipes tee ENB.log
, it allows you to record the ENB logging to be used for further investigation.
By setting rrc_inactivity_threshold
to 0, it disables the RRC Inactivity timers. This is mandatory with this configuration file.
By using --nokrnmod 1
option, it forces the usage of the tunnel interface. Once the eNB is up, you can check by typing ifconfig
to see if the oaitun_enb1
is mounted. It shall have the 10.0.1.1
IP address.
3.2 Starting the UE on the 2nd Ubuntu Machine
cd ~/openairinterface5g/cmake_targets/lte_build_oai/build
sudo ./lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1 2>&1 | tee UE.log
By running UE with pipes tee UE.log
, allow you to record the UE logging to be used for further investigation.
It is mandatory to run from the build folder, so the executable can read the USIM files.
By using --nokrnmod 1
option, it forces the usage of the tunnel interface. Once the UE is attached to the eNB, you can check by typing ifconfig
to see if the oaitun_ue1
is mounted. It shall have the 10.0.1.2
IP address.
4. Running OAI eNB and OAI UE with the nasmesh kernel module
CAUTION: this way is supposed to work but is no longer validated by the CI process. So it may not work at some point
The setup should be started with running the OAI eNB first before running the OAI UE. Both OAI eNB and OAI UE are running on LTE FDD Band 7 (DL: 2660MHz, UL: 2540MHz).
4.1 Starting the eNB on the 1st Ubuntu Machine
nasmesh
Kernel Module and Setup the OAI Interface
Step 1: Loading the Loading the nasmesh.ko
to setup the radio bearer and providing the IP connectivity between eNB and attached UE.
cd ~/openairinterface5g/
source oaienv
source ./cmake_targets/tools/init_nas_nos1 eNB
You should now have the oai0
interface with IP address 10.0.1.1 netmask 255.255.255.0. (ifconfig
to verify)
Note: In case that you are not able to load the nasmesh.ko
, please make sure that OPENAIR_DIR
is correctly set in the script.
Step 2: Running the eNB
The command of running the eNB should be as follow:
cd cmake_targets
sudo -E ./lte_build_oai/build/lte-softmodem -O ~/openairinterface5g/ci-scripts/conf_files/ci-enb.band7.tm1.25PRB.usrpb210.conf --nokrnmod 0 --noS1 --eNBs.[0].rrc_inactivity_threshold 0 2>&1 | tee ENB.log
By running eNB with pipes tee ENB.log
, allow you to record the ENB logging to be used for further investigation.
By using --nokrnmod 0
option, it forces the usage of the nasmesh kernel module.
Note: We have put a duplexer in the eNB to avoid background noise closed to saturating the receiver. You should get the noise floor similar to the diagram as shown below:
4.2 Starting the UE on the 2nd Ubuntu Machine
nasmesh
Kernel Module and Setup the OAI Interface
Step 1: Loading the Loading the nasmesh.ko
to setup the radio bearer and providing the IP connectivity between eNB and attached UE.
cd ~/openairinterface5g/
source ./targets/bin/init_nas_nos1 UE
You should now have the oai0
interface with IP address 10.0.1.9 netmask 255.255.255.0.
Note: In case that you are not able to load the nasmesh.ko
, please make sure that OPENAIR_DIR
is correctly set in the script.
Step 2: Running the UE
The command of running the UE should be as follow:
cd ~/openairinterface5g/cmake_targets/lte_build_oai/build
sudo ./lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 0 --noS1 2>&1 | tee UE.log
By running UE with pipes tee UE.log
, allow you to record the UE logging to be used for further investigation.
4.3 Results of Successful UE attached to eNB
CAUTION: this section and the associated log files have NOT been updated.
If the user is successfully attached to the eNB, you should observe the RRCConnectionReconfigurationComplete message sent by the UE and the UE state is RRC_RECONFIGURED. The example of the UE log file can be found at UE.log.
The eNB will also indicate that the receiving of RRCConnectionReconfigurationComplete message from the UE and the UE state is moved to RRC_RECONFIGURED. The example of the eNB log file with OAI UE successfully attached can be found at ENB.log.
When there is traffic going on between the UE and the eNB, the following stats, L2 stats and LTE UL Scope can be observed:
LTE UL Scope eNB:
Stats:
L2 Stats:
When there is traffic going on between the UE and the eNB, the following stats and LTE DL Scope UE can be observed:
LTE DL Scope UE:
Stats:
5. Network Testing between OAI eNB and OAI UE in tunnel version
Once the UE is attached to the eNB, you should able to do simple ping tests or iperf tests.
5.1 Ping Testing
Step 1: Ping from UE to eNB
Open the terminal and type the ping -I oaitun_ue1 -c 20 10.0.1.1
. This means sending 20 ICMP echo request packets from UE to eNB and expecting ICMP echo reply packets from eNB to UE.
You should see somethings, like that:
PING 10.0.1.1 (10.0.1.1) from 10.0.1.2 oaitun_ue1: 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_seq=1 ttl=64 time=25.6 ms
64 bytes from 10.0.1.1: icmp_seq=2 ttl=64 time=23.9 ms
64 bytes from 10.0.1.1: icmp_seq=3 ttl=64 time=22.9 ms
64 bytes from 10.0.1.1: icmp_seq=4 ttl=64 time=21.9 ms
64 bytes from 10.0.1.1: icmp_seq=5 ttl=64 time=20.9 ms
64 bytes from 10.0.1.1: icmp_seq=6 ttl=64 time=19.9 ms
64 bytes from 10.0.1.1: icmp_seq=7 ttl=64 time=18.9 ms
64 bytes from 10.0.1.1: icmp_seq=8 ttl=64 time=17.9 ms
64 bytes from 10.0.1.1: icmp_seq=9 ttl=64 time=23.9 ms
64 bytes from 10.0.1.1: icmp_seq=10 ttl=64 time=26.0 ms
64 bytes from 10.0.1.1: icmp_seq=11 ttl=64 time=25.0 ms
64 bytes from 10.0.1.1: icmp_seq=12 ttl=64 time=24.3 ms
64 bytes from 10.0.1.1: icmp_seq=13 ttl=64 time=22.9 ms
64 bytes from 10.0.1.1: icmp_seq=14 ttl=64 time=21.9 ms
64 bytes from 10.0.1.1: icmp_seq=15 ttl=64 time=20.9 ms
64 bytes from 10.0.1.1: icmp_seq=16 ttl=64 time=19.9 ms
64 bytes from 10.0.1.1: icmp_seq=17 ttl=64 time=18.9 ms
64 bytes from 10.0.1.1: icmp_seq=18 ttl=64 time=17.9 ms
64 bytes from 10.0.1.1: icmp_seq=19 ttl=64 time=23.9 ms
64 bytes from 10.0.1.1: icmp_seq=20 ttl=64 time=25.9 ms
--- 10.0.1.1 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19019ms
rtt min/avg/max/mdev = 17.976/22.238/26.003/2.583 ms
Step 2: Ping from eNB to UE
Open the terminal and type the ping -I oaitun_enb1 -c 20 10.0.1.2
. This means sending 20 ICMP echo request packets from eNB to UE and expecting ICMP echo reply packets from UE to eNB.
You should see somethings, like that:
PING 10.0.1.2 (10.0.1.2) from 10.0.1.1 oaitun_enb1: 56(84) bytes of data.
64 bytes from 10.0.1.2: icmp_seq=1 ttl=64 time=34.8 ms
64 bytes from 10.0.1.2: icmp_seq=2 ttl=64 time=32.9 ms
64 bytes from 10.0.1.2: icmp_seq=3 ttl=64 time=32.0 ms
64 bytes from 10.0.1.2: icmp_seq=4 ttl=64 time=30.9 ms
64 bytes from 10.0.1.2: icmp_seq=5 ttl=64 time=29.9 ms
64 bytes from 10.0.1.2: icmp_seq=6 ttl=64 time=29.0 ms
64 bytes from 10.0.1.2: icmp_seq=7 ttl=64 time=27.9 ms
64 bytes from 10.0.1.2: icmp_seq=8 ttl=64 time=26.9 ms
64 bytes from 10.0.1.2: icmp_seq=9 ttl=64 time=26.0 ms
64 bytes from 10.0.1.2: icmp_seq=10 ttl=64 time=26.9 ms
64 bytes from 10.0.1.2: icmp_seq=11 ttl=64 time=25.9 ms
64 bytes from 10.0.1.2: icmp_seq=12 ttl=64 time=24.9 ms
64 bytes from 10.0.1.2: icmp_seq=13 ttl=64 time=24.0 ms
64 bytes from 10.0.1.2: icmp_seq=14 ttl=64 time=22.9 ms
64 bytes from 10.0.1.2: icmp_seq=15 ttl=64 time=21.9 ms
64 bytes from 10.0.1.2: icmp_seq=16 ttl=64 time=20.9 ms
64 bytes from 10.0.1.2: icmp_seq=17 ttl=64 time=19.9 ms
64 bytes from 10.0.1.2: icmp_seq=18 ttl=64 time=18.9 ms
64 bytes from 10.0.1.2: icmp_seq=19 ttl=64 time=17.9 ms
64 bytes from 10.0.1.2: icmp_seq=20 ttl=64 time=23.9 ms
--- 10.0.1.2 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19019ms
rtt min/avg/max/mdev = 17.975/25.987/34.884/4.632 ms
5.2 Iperf Testing
UDP Test from UE to eNB
Open the terminal in eNB and type the iperf -B 10.0.1.1 -u -s -i 1 -fm
.
Next, open the terminal in UE and type the iperf -c 10.0.1.1 -u -b 8.00M -t 30 -i 1 -fm -B 10.0.1.2
.
8.00M means 8Mbps UDP throughput generated from UE to eNB.
The following results can be observed:
iperf result (10.0.1.2)
Req Bitrate : 8.0 Mbits/sec
Bitrate : 7.97 Mbits/sec
Bitrate Perf: 99.62 %
Packet Loss : 0.16%
Jitter : 0.497 ms
UDP Test from eNB to UE
Open the terminal in UE and type the iperf -B 10.0.1.2 -u -s -i 1 -fm
.
Next, open the terminal in eNB and type the iperf -c 10.0.1.2 -u -b 14.00M -t 30 -i 1 -fm -B 10.0.1.1
.
14.00M means 14Mbps UDP throughput generated from eNB to UE.
The following results can be observed:
iperf result (10.0.1.2)
Req Bitrate : 14.0 Mbits/sec
Bitrate : 14.0 Mbits/sec
Bitrate Perf: 100.00 %
Packet Loss : 0.0028%
Jitter : 0.257 ms