starting format of HowToConnectOAIENBWithOAIUEWithoutS1Interface authored by Cedric Roux's avatar Cedric Roux
not finished
---+ How to Connect OAI eNB (USRP B210) with OAI UE (USRP B210) without S1 Interface # 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 allowed the UE to connect to eNB. You need 2 Ubuntu machine and svn version r7753 of OAI for this tutorial. This tutorial is intended to setup the OAI eNB and OAI UE without the S1 interface and allowed the UE to connect to eNB. You need 2 Ubuntu machine and svn version r7753 of OAI for this tutorial.
The procedures includes the following: The procedures includes the following:
1 Build the eNB without S1 interface in 1st Ubuntu machine. 1. Build the eNB without S1 interface in 1st Ubuntu machine.
1 Build the UE without S1 interface in 2nd Ubuntu machine. 1. Build the UE without S1 interface in 2nd Ubuntu machine.
1 Bring up the OAI Interface. 1. Bring up the OAI Interface.
1 Run the eNB. 1. Run the eNB.
1 Run the UE. 1. Run the UE.
1 Once UE attched to eNB, do some throughput test or ping. 1. Once UE attched to eNB, do some throughput test or ping.
%TOC%
---++ 1. Installing, Building and Running the OAI eNB and the OAI UE without S1 Interface ## 1. Installing, Building and Running the OAI eNB and the OAI UE without S1 Interface
Checklist prior to OAI installation: Checklist prior to OAI installation:
* Ubuntu 14.04 LTS (32-bit or 64-bit) * Ubuntu 14.04 LTS (32-bit or 64-bit)
* [[OpenAirKernelMainSetup][Kernel setup ]] * [Kernel setup](OpenAirKernelMainSetup)
* Disable C-states from BIOS (or from GRUB) * Disable C-states from BIOS (or from GRUB)
* Disable CPU freq. scaling * Disable CPU freq. scaling
* Install low-latency kernel * Install low-latency kernel
* Install _subversion_ with the command: * Install _subversion_ with the command:
* __sudo apt-get install subversion__ for SVN version * `sudo apt-get install subversion` for SVN version
* Install _git_ with the command: * Install _git_ with the command:
* __sudo apt-get install git__ for GIT version. * `sudo apt-get install git` for GIT version.
* Install UHD driver for USRP Hardware B210 using the following commands: * Install UHD driver for USRP Hardware B210 using the following commands:
* <div id="_mcePaste"> __sudo bash -c 'echo "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/`lsb_release -cs` `lsb_release -cs` main" &gt; /etc/apt/sources.list.d/ettus.list'__ </div> ```shell
* <div id="_mcePaste"> __sudo apt-get install -t `lsb_release -cs` uhd__ </div> sudo bash -c 'echo "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/`lsb_release -cs` `lsb_release -cs` main" > /etc/apt/sources.list.d/ettus.list'
* <div id="_mcePaste"> __sudo apt-get update__ </div> sudo apt-get install -t `lsb_release -cs` uhd
* __Run Autobuild for installing missing packages:__ sudo apt-get update
* <em>The insructions are here,</em><span style="color: #7a4707; font-size: 10px; background-color: transparent;"><a href="AutoBuild" title="https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/AutoBuild">https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/AutoBuild</a></span> ```
Note: UHD related information can be found at<em>: </em>http://files.ettus.com/manual/page_install.html#install_linux * Run Autobuild for installing missing packages: the instructions are at [AutoBuild](AutoBuild)
---+++ 1.1 Installation eNB on 1st Ubuntu Machine
---++++ Step 1: Check out the GIT trunk version of OAI Note: UHD related information can be found at: http://files.ettus.com/manual/page_install.html#install_linux
### 1.1 Installation eNB on 1st Ubuntu Machine
#### Step 1: Check out the GIT trunk version of OAI
Download the source codes using gitlab: Download the source codes using gitlab:
<pre>mkdir -p ~/openairinterface5g
</pre> <pre><span style="color: #000000; font-size: small; white-space: normal;">The instruction can be found at:</span></pre> <pre><a href="GetSources" title="https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/GetSources">https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/GetSources</a></pre> ```shell
mkdir -p ~/openairinterface5g
```
The instruction can be found at: [GetSources](GetSources).
---++++ Step 2: Run Automated Build Script for eNB without S1 Interface #### Step 2: Run Automated Build Script for eNB without S1 Interface
Build the eNB supporting B210: Build the eNB supporting B210:
<pre>cd ~/openairinterface5g/
source oaienv</pre> <pre>cd cmake_targets
./build_oai -w USRP --eNB --noS1 -x</pre>
This should starts the building process in ~/openairinterface4g/cmake_targets/lte_noS1_build_oai. ```shell
cd ~/openairinterface5g/
source oaienv
cd cmake_targets
./build_oai -w USRP --eNB --noS1 -x
```
This should starts the building process in `~/openairinterface4g/cmake_targets/lte_noS1_build_oai`.
Please refer to [AutoBuild](AutoBuild) if you run into problems.
* Please refer the AutoBuild if you run into problem, here: ### 1.2 Installation UE on 2nd Ubuntu Machine
<pre>https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/AutoBuild</pre>
---+++ 1.2 Installation UE on 2nd Ubuntu Machine #### Step 1: Check out the GIT trunk version of OAI
---++++ Step 1: Check out the GIT trunk version of OAI
Download the source codes using gitlab: Download the source codes using gitlab:
<pre>mkdir -p ~/openairinterface5g</pre> <pre><span style="color: #000000; font-size: small; white-space: normal;">The instruction can be found at:</span></pre> <pre>https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/GetSources</pre>
---++++ Step 2: Run Automated Build Script for UE without S1 Interface ```shell
mkdir -p ~/openairinterface5g
```
The instruction can be found at: [GetSources](GetSources).
#### Step 2: Run Automated Build Script for UE without S1 Interface
Build the UE supporting B210: Build the UE supporting B210:
<pre>cd ~/openairinterface5g
```shell
cd ~/openairinterface5g
source oaienv source oaienv
cd cmake_targets cd cmake_targets
./build_oai -w USRP --UE --noS1 -x</pre> ./build_oai -w USRP --UE --noS1 -x
```
This should starts the building process in `~/openairinterface4g/cmake_targets/lte_noS1_build_oai`.
Please refer to [AutoBuild](AutoBuild) if you run into problems.
## 2. Running OAI eNB and OAI UE without S1 Interface
This should starts the building process in ~/openairinterface4g/cmake_targets/lte_noS1_build_oai. 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 5 (DL: 875MHz, UL: 830MHz).
* Please refer the AutoBuild if you run into problem, here: ### 2.1 Run eNB on 1st Ubuntu Machine
<pre>https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/AutoBuild</pre>
---++ 2. Running OAI eNB and OAI UE without S1 Interface #### Step 1: Loading the `nasmesh` Kernel Module and Setup the OAI Interface
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 5 (DL: 875MHz, UL: 830MHz). Loading the `nasmesh.ko` to setup the radio bearer and providing the IP connectivity between eNB and attached UE.
---+++ 2.1 Run eNB on 1st Ubuntu Machine
---++++ Step 1: Loading the _nasmesh_ Kernel Module and Setup the OAI Interface
Loading the nasmesh.ko to setup the radio bearer and providing the IP connectivity between eNB and attached UE. ```shell
<pre>cd ~/openairinterface5g/ cd ~/openairinterface5g/
source oaienv source oaienv
source ./cmake_targets/tools/init_nas_nos1 eNB source ./cmake_targets/tools/init_nas_nos1 eNB
</pre> ```
You should now have the _oai0_ interface with IP address 10.0.1.1 netmask 255.255.255.0. You should now have the `oai0` interface with IP address 10.0.1.1 netmask 255.255.255.0.
<strong>Note: </strong>In case that you are not able to load the nasmesh.ko, please make sure that OPENAIR_DIR is correctly set in the script. **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
#### Step 2: Running the eNB
The command of running the eNB should be as follow: The command of running the eNB should be as follow:
<pre>cd cmake_targets</pre> <pre>sudo -E ./lte_noS1_build_oai/build/lte-softmodem-nos1 -d -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf 2&gt;&1 | tee ENB.log</pre>
By running eNB with pipes "tee ENB.log", allow you to record the ENB logging to be used for further investigation. ```shell
cd cmake_targets
sudo -E ./lte_noS1_build_oai/build/lte-softmodem-nos1 -d -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf 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.
**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:
<strong>Note: </strong>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: ![eNB-noise-floor-1.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/eNB-noise-floor-1.png)
<pre><img alt="eNB-noise-floor-1.png" src="https://twiki.eurecom.fr/twiki/pub/Sandbox/TestTopic1/eNB-noise-floor-1.png" /></pre>
The eNB's configuration file used for the testing can be found at [[%ATTACHURL%/enb.band5.tm1.usrpb210.conf][enb.band5.tm1.usrpb210.conf]]. The eNB's configuration file used for the testing can be found
---+++ 2.2 Run UE on 2nd Ubuntu Machine at [enb.band5.tm1.usrpb210.conf](HowToConnectOAIENBWithOAIUEWithoutS1Interface/enb.band5.tm1.usrpb210.conf).
---++++ Step 1: Loading the _nasmesh_ Kernel Module and Setup the OAI Interface
Loading the nasmesh.ko to setup the radio bearer and providing the IP connectivity between eNB and attached UE. ### 2.2 Run UE on 2nd Ubuntu Machine
<pre>cd ~/openairinterface5g/
#### Step 1: Loading the `nasmesh` Kernel Module and Setup the OAI Interface
Loading the `nasmesh.ko` to setup the radio bearer and providing the IP connectivity between eNB and attached UE.
```shell
cd ~/openairinterface5g/
source ./targets/bin/init_nas_nos1 UE source ./targets/bin/init_nas_nos1 UE
</pre> ```
You should now have the `oai0` interface with IP address 10.0.1.9 netmask 255.255.255.0.
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.
<strong>Note: </strong>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
---++++ Step 2: Running the UE
The command of running the UE should be as follow: The command of running the UE should be as follow:
<pre>cd cmake_targets
sudo -E ./lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2680000000 -r25 --ue-scan-carrier --ue-txgain 70 --ue-rxgain 80 -d &gt;&1 | tee UE.log ```shell
cd cmake_targets
sudo -E ./lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2680000000 -r25 --ue-scan-carrier --ue-txgain 70 --ue-rxgain 80 -d >&1 | tee UE.log
```
</pre> By running UE with pipes `tee UE.log`, allow you to record the UE logging to be used for further investigation.
By running UE with pipes "tee UE.log", allow you to record the UE logging to be used for further investigation. For the UE to able to sync with eNB, the timing advance needs to set 0 in FDD
Band 5. (openair_daq_vars.timing_advance = 0). That patch can be found at [\[1\]][1] and use `-A 0` for setting timing advance to 0.
For the UE to able to sync with eNB, the timing advance needs to set 0 in FDD Band 5. (openair_daq_vars.timing_advance = 0). That patch can be found at [1] and use "-A 0" for setting timing advance to 0. ### 2.3 Results of Successful UE attached to eNB
---+++ 2.3 Results of Successful UE attached to eNB
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 [[%ATTACHURL%/UE.log][UE.log]]. 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](HowToConnectOAIENBWithOAIUEWithoutS1Interface/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 [[%ATTACHURL%/ENB.log][ENB.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](HowToConnectOAIENBWithOAIUEWithoutS1Interface/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: 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: LTE UL Scope eNB:
<img alt="LTEULScopeL.png" src="https://twiki.eurecom.fr/twiki/pub/OpenAirInterface/HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEULScopeL.png" /> ![LTEULScopeL.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEULScopeL.png)
Stats: Stats:
<img alt="LTEStats.png" src="https://twiki.eurecom.fr/twiki/pub/OpenAirInterface/HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEStats.png" /> ![LTEStats.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEStats.png)
L2 Stats: L2 Stats:
<img alt="LTEl2Stats.png" src="https://twiki.eurecom.fr/twiki/pub/OpenAirInterface/HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEl2Stats.png" /> ![LTEl2Stats.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEl2Stats.png)
When there is traffic going on between the UE and the eNB, the following stats and LTE DL Scope UE can be observed: 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: LTE DL Scope UE:
<img alt="LTEDLScopeL.png" src="https://twiki.eurecom.fr/twiki/pub/OpenAirInterface/HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEDLScopeL.png" /> ![LTEDLScopeL.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEDLScopeL.png)
Stats: Stats:
<img alt="LTEDLStatsL.png" src="https://twiki.eurecom.fr/twiki/pub/OpenAirInterface/HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEDLStatsL.png" /> ![LTEDLStatsL.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/LTEDLStatsL.png)
---++ 3. Network Testing between OAI eNB and OAI UE without S1 Interface
## 3. Network Testing between OAI eNB and OAI UE without S1 Interface
Once the UE is attached to the eNB, you should able to do simple ping test or iperf test. Once the UE is attached to the eNB, you should able to do simple ping test or iperf test.
---+++ 3.1 Ping Test
---++++ Step 1: Ping from UE to eNB
Open the terminal and type the "ping 10.0.1.1 -c 10". This means sending 10 ICMP echo request packets from UE to eNB and expecting ICMP echo reply packets from eNB to UE. ### 3.1 Ping Test
#### Step 1: Ping from UE to eNB
Open the terminal and type the `ping 10.0.1.1 -c 10`. This means sending
10 ICMP echo request packets from UE to eNB and expecting ICMP echo reply packets from eNB to UE.
You should see somethings, like that: You should see somethings, like that:
<img alt="PING-UE-eNB.png" src="https://twiki.eurecom.fr/twiki/pub/Sandbox/ChunYeowYeohSandbox/PING-UE-eNB.png" /> ![PING-UE-eNB.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/PING-UE-eNB.png)
---++++ Step 2: Ping from eNB to UE
Open the terminal and type the "ping 10.0.1.9 -c 10". This means sending 10 ICMP echo request packets from eNB to UE and expecting ICMP echo reply packets from UE to eNB. #### Step 2: Ping from eNB to UE
Open the terminal and type the `ping 10.0.1.9 -c 10`. This means sending
10 ICMP echo request packets from eNB to UE and expecting ICMP echo reply packets from UE to eNB.
You should see somethings, like that: You should see somethings, like that:
<img alt="PING-eNB-UE.png" src="https://twiki.eurecom.fr/twiki/pub/Sandbox/ChunYeowYeohSandbox/PING-eNB-UE.png" /> ![PING-eNB-UE.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/PING-eNB-UE.png)
---+++ 3.2 Iperf Test
---++++ UDP Test from UE to eNB ### 3.2 Iperf Test
#### UDP Test from UE to eNB
Open the terminal in eNB and type the "iperf -s -i 1 -u". Open the terminal in eNB and type the `iperf -s -i 1 -u`.
Next, open the terminal in UE and type the "iperf -c 10.0.1.1 -i 1 -u -t 10 -b 1M". 1M means 1Mbps UDP throughput generated from UE to eNB. Next, open the terminal in UE and type the `iperf -c 10.0.1.1 -i 1 -u -t 10 -b 1M`.
1M means 1Mbps UDP throughput generated from UE to eNB.
The following results can be observed: The following results can be observed:
<img alt="IPerf-ENB.png" src="https://twiki.eurecom.fr/twiki/pub/Sandbox/ChunYeowYeohSandbox/IPerf-ENB.png" /> ![IPerf-ENB.png](HowToConnectOAIENBWithOAIUEWithoutS1Interface/IPerf-ENB.png)
<img alt="IPerf-UE.png" src="https://twiki.eurecom.fr/twiki/pub/Sandbox/ChunYeowYeohSandbox/IPerf-UE.png" /> <img alt="IPerf-UE.png" src="https://twiki.eurecom.fr/twiki/pub/Sandbox/ChunYeowYeohSandbox/IPerf-UE.png" />
---++ Duplex and Antenna: ---++ Duplex and Antenna:
...@@ -188,7 +242,7 @@ The picture of antenna [3] used for this testing and duplexer as follow: ...@@ -188,7 +242,7 @@ The picture of antenna [3] used for this testing and duplexer as follow:
[1] If you encounter the following errors reported by , please switch to the svn trunk version 7763: [1] If you encounter the following errors reported by , please switch to the svn trunk version 7763:
<span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">[PHY][I][pbch_detection] [UE0] Initial sync: starting PBCH detection (rx_offset 71032)</span><span style="color: #500050; font-family: arial, sans-serif; font-size: 12.8000001907349px;"><br />Program received signal SIGILL, Illegal instruction.<br /></span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">[Switching to Thread 0x7fffd7fff700 (LWP 18558)]</span><br /><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">multadd_real_vector_complex_</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">scalar (x=x@entry=0xb97bc0 &lt;filt24_0&gt;, alpha=alpha@entry=</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">0x7fffd7ffe1f0,</span><br /><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"> y=y@entry=0x354d91f0, N=N@entry=24) at /home/openairlte/openair4G/</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">openair1/PHY/TOOLS/cmult_sv.c:</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">94</span><br /><span style="color: #500050; font-family: arial, sans-serif; font-size: 12.8000001907349px;">94 alpha_r_128 = set1_int16(alpha[0]);</span> <span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">[PHY][I][pbch_detection] [UE0] Initial sync: starting PBCH detection (rx_offset 71032)</span><span style="color: #500050; font-family: arial, sans-serif; font-size: 12.8000001907349px;"><br />Program received signal SIGILL, Illegal instruction.<br /></span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">[Switching to Thread 0x7fffd7fff700 (LWP 18558)]</span><br /><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">multadd_real_vector_complex_</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">scalar (x=x@entry=0xb97bc0 <filt24_0>, alpha=alpha@entry=</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">0x7fffd7ffe1f0,</span><br /><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"> y=y@entry=0x354d91f0, N=N@entry=24) at /home/openairlte/openair4G/</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">openair1/PHY/TOOLS/cmult_sv.c:</span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">94</span><br /><span style="color: #500050; font-family: arial, sans-serif; font-size: 12.8000001907349px;">94 alpha_r_128 = set1_int16(alpha[0]);</span>
This is due to the <span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">machine doesn't support avx2 [2] and generates illegal instructions. EURECOM will soon </span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">introduce some new SIMD code which exploits the AVX2.</span> This is due to the <span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">machine doesn't support avx2 [2] and generates illegal instructions. EURECOM will soon </span><span style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;">introduce some new SIMD code which exploits the AVX2.</span>
... ...
......