DOC: update L2 nFAPI simulator
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
This commit is contained in:
+12
-7
@@ -14,19 +14,24 @@
|
|||||||
|
|
||||||
This simulator allows to test L2 and above Layers using the nFAPI interface.
|
This simulator allows to test L2 and above Layers using the nFAPI interface.
|
||||||
|
|
||||||
|
The UE executable is able to "simulate" multiple UEs in order to stimulate the scheduler in the eNB.
|
||||||
|
|
||||||
**This simulator is available starting the `v1.0.0` release on the `master` branch.**
|
**This simulator is available starting the `v1.0.0` release on the `master` branch.**
|
||||||
|
|
||||||
Currently the only validated deployment by CI and developers is *with S1 interface and eNB / UEs are on the same machine*.
|
Currently the Continuous Integration process is validating this simulator the following way:
|
||||||
|
|
||||||
Others deployments will be supported later after bug fixes and validation in the CI process.
|
|
||||||
|
|
||||||
1. [With S1 -- eNB and UE on same machine](L2NFAPI_S1.md)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* the LTE modem executable is run on one host (in our CI deployment it is a **Xenial Virtual Machine**)
|
||||||
|
* the UE(s) modem executable is run on another host (in our CI deployment it is also a **Xenial Virtual Machine**)
|
||||||
|
* We are testing:
|
||||||
|
* in S1 mode (ie we are connected to a 3rd-party EPC)
|
||||||
|
* in noS1 mode (no need for an EPC)
|
||||||
|
|
||||||
|
Normally it should be fine to run both executables on the same host using the `loopback` interface to communicate. **But we are not guaranting it**
|
||||||
|
|
||||||
|
1. [With S1 -- eNB and UE on 2 hosts](L2NFAPI_S1.md)
|
||||||
|
2. [No S1 -- eNB and UE on 2 hosts](L2NFAPI_NOS1.md)
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,349 @@
|
|||||||
|
<table style="border-collapse: collapse; border: none;">
|
||||||
|
<tr style="border-collapse: collapse; border: none;">
|
||||||
|
<td style="border-collapse: collapse; border: none;">
|
||||||
|
<a href="http://www.openairinterface.org/">
|
||||||
|
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
|
||||||
|
</img>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
||||||
|
<b><font size = "5">L2 nFAPI Simulator (no S1 Mode / 2-host deployment)</font></b>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Table of Contents ##
|
||||||
|
|
||||||
|
1. [Environment](#1-environment)
|
||||||
|
2. [Retrieve the OAI eNB-UE source code](#2-retrieve-the-oai-enb-ue-source-code)
|
||||||
|
3. [Setup of the USIM information in UE folder](#3-setup-of-the-usim-information-in-ue-folder)
|
||||||
|
4. [Setup of the Configuration files](#4-setup-of-the-configuration-files)
|
||||||
|
1. [The eNB Configuration file](#41-the-enb-configuration-file)
|
||||||
|
2. [The UE Configuration file](#42-the-ue-configuration-file)
|
||||||
|
5. [Build OAI UE and eNodeB](#5-build-oai-ue-and-enodeb)
|
||||||
|
6. [Start the eNB](#6-start-the-enb)
|
||||||
|
7. [Start the UE](#7-start-the-ue)
|
||||||
|
8. [Test with ping](#8-test-with-ping)
|
||||||
|
9. [Limitations](#9-limitations)
|
||||||
|
|
||||||
|
# 1. Environment #
|
||||||
|
|
||||||
|
You may not have access to an EPC or you don't want to hassle to deploy one.
|
||||||
|
|
||||||
|
2 servers are used in this deployment. You can use Virtual Machines instead of each server; like it is done in the CI process.
|
||||||
|
|
||||||
|
* Machine B contains the OAI eNB executable (`lte-softmodem`)
|
||||||
|
* Machine C contains the OAI UE(s) executable (`lte-uesoftmodem`)
|
||||||
|
|
||||||
|
Example of L2 nFAPI Simulator testing environment:
|
||||||
|
|
||||||
|
<img src="./images/L2-sim-noS1-2-host-deployment.png" alt="" border=3>
|
||||||
|
|
||||||
|
Note that the IP addresses are indicative and need to be adapted to your environment.
|
||||||
|
|
||||||
|
# 2. Retrieve the OAI eNB-UE source code #
|
||||||
|
|
||||||
|
At the time of writing, the tag used in the `develop` branch to do this documentation was `2020.w16`.
|
||||||
|
|
||||||
|
The tutorial should be valid for the `master` branch tags such as `v1.2.0` or `v1.2.1`. But you may face issues that could be fixed in newer `develop` tags.
|
||||||
|
|
||||||
|
Please try to use the same commit ID on both eNB/UE hosts.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git enb_folder
|
||||||
|
cd enb_folder
|
||||||
|
git checkout develop
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ue_folder
|
||||||
|
cd ue_folder
|
||||||
|
git checkout develop
|
||||||
|
```
|
||||||
|
|
||||||
|
# 3. Setup of the USIM information in UE folder #
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
cd ue_folder
|
||||||
|
# Edit openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf with your preferred editor
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit the USIM information within this file in order to match the HSS database. They **HAVE TO** match:
|
||||||
|
|
||||||
|
* PLMN+MSIN and IMSI of users table of HSS database **SHALL** be the same.
|
||||||
|
* OPC of this file and OPC of users table of HSS database **SHALL** be the same.
|
||||||
|
* USIM_API_K of this file and the key of users table of HSS database **SHALL** be the same.
|
||||||
|
|
||||||
|
When testing multiple UEs, it is necessary to add other UEs information like described below for 2 Users. Only UE0 (first UE) information is written in the original file.
|
||||||
|
|
||||||
|
```
|
||||||
|
UE0:
|
||||||
|
{
|
||||||
|
USER: {
|
||||||
|
IMEI="356113022094149";
|
||||||
|
MANUFACTURER="EURECOM";
|
||||||
|
MODEL="LTE Android PC";
|
||||||
|
PIN="0000";
|
||||||
|
};
|
||||||
|
|
||||||
|
SIM: {
|
||||||
|
MSIN="0000000001"; // <-- Modify here
|
||||||
|
USIM_API_K="8baf473f2f8fd09487cccbd7097c6862";
|
||||||
|
OPC="e734f8734007d6c5ce7a0508809e7e9c";
|
||||||
|
MSISDN="33611123456";
|
||||||
|
};
|
||||||
|
...
|
||||||
|
};
|
||||||
|
// Copy the UE0 and edit
|
||||||
|
UE1: // <- Edit here
|
||||||
|
{
|
||||||
|
USER: {
|
||||||
|
IMEI="356113022094149";
|
||||||
|
MANUFACTURER="EURECOM";
|
||||||
|
MODEL="LTE Android PC";
|
||||||
|
PIN="0000";
|
||||||
|
};
|
||||||
|
|
||||||
|
SIM: {
|
||||||
|
MSIN="0000000002"; // <-- Modify here
|
||||||
|
USIM_API_K="8baf473f2f8fd09487cccbd7097c6862";
|
||||||
|
OPC="e734f8734007d6c5ce7a0508809e7e9c";
|
||||||
|
MSISDN="33611123456";
|
||||||
|
};
|
||||||
|
...
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
You can repeat the operation for as many users you want to test with.
|
||||||
|
|
||||||
|
# 4. Setup of the Configuration files #
|
||||||
|
|
||||||
|
**CAUTION: both proposed configuration files resides in the ci-scripts realm. You can copy them but you CANNOT push any modification on these 2 files as part of an MR without informing the CI team.**
|
||||||
|
|
||||||
|
## 4.1. The eNB Configuration file ##
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
cd enb_folder
|
||||||
|
# Edit ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf with your preferred editor
|
||||||
|
```
|
||||||
|
|
||||||
|
First verify the nFAPI interface setup on the physical ethernet interface of machineB and put the proper IP addresses for both hosts.
|
||||||
|
|
||||||
|
```
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
local_s_if_name = "ens3"; // <-- HERE
|
||||||
|
remote_s_address = "192.168.122.169"; // <-- HERE
|
||||||
|
local_s_address = "192.168.122.31"; // <-- HERE
|
||||||
|
local_s_portc = 50001;
|
||||||
|
remote_s_portc = 50000;
|
||||||
|
local_s_portd = 50011;
|
||||||
|
remote_s_portd = 50010;
|
||||||
|
tr_s_preference = "nfapi";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are testing more than 16 UEs, a proper setting on the RUs is necessary. **Note that this part is NOT present in the original configuration file**.
|
||||||
|
|
||||||
|
```
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 20
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [38];
|
||||||
|
max_pdschReferenceSignalPower = -23;
|
||||||
|
max_rxgain = 116;
|
||||||
|
eNB_instances = [0];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
Last, the S1 interface shall be properly set.
|
||||||
|
|
||||||
|
```
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR"; // replace with 192.168.122.195
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "ens3"; // replace with the proper interface name
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR"; // replace with 192.168.122.31
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "ens3"; // replace with the proper interface name
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR"; // replace with 192.168.122.31
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR"; // replace with 192.168.122.31
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4.2. The UE Configuration file ##
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
cd ue_folder
|
||||||
|
# Edit ci-scripts/conf_files/ue.nfapi.conf with your preferred editor
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify the nFAPI interface setup on the loopback interface.
|
||||||
|
|
||||||
|
```
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "nfapi";
|
||||||
|
local_n_if_name = "ens3"; // <- HERE
|
||||||
|
remote_n_address = "192.168.122.31"; // <- HERE
|
||||||
|
local_n_address = "192.168.122.169"; // <- HERE
|
||||||
|
local_n_portc = 50000;
|
||||||
|
remote_n_portc = 50001;
|
||||||
|
local_n_portd = 50010;
|
||||||
|
remote_n_portd = 50011;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
# 5. Build OAI UE and eNodeB #
|
||||||
|
|
||||||
|
See [Build documentation](./BUILD.md).
|
||||||
|
|
||||||
|
# 6. Start the eNB #
|
||||||
|
|
||||||
|
In the first terminal (the one you used to build the eNB):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
cd enb_folder/cmake_targets
|
||||||
|
sudo -E ./ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf --noS1 > enb.log 2>&1
|
||||||
|
sleep 10
|
||||||
|
ifconfig
|
||||||
|
ens3 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
|
||||||
|
inet addr:192.168.122.31 Bcast:192.168.122.255 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_enb1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.1.1 P-t-P:192.172.0.2 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
```
|
||||||
|
|
||||||
|
If you don't use redirection, you can test but many logs are printed on the console and this may affect performance of the L2-nFAPI simulator.
|
||||||
|
|
||||||
|
We do recommend the redirection in steady mode once your setup is correct.
|
||||||
|
|
||||||
|
# 7. Start the UE #
|
||||||
|
|
||||||
|
In the second terminal (the one you used to build the UE):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
cd ue_folder/cmake_targets
|
||||||
|
# Test 64 UEs, 1 thread in FDD mode
|
||||||
|
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --noS1 --L2-emul 3 --num-ues 64 --nums_ue_thread 1 --nokrnmod 1 > ue.log 2>&1
|
||||||
|
# Test 64 UEs, 1 thread in TDD mode
|
||||||
|
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --noS1 --L2-emul 3 --num-ues 64 --nums_ue_thread 1 --nokrnmod 1 -T 1 > ue.log 2>&1
|
||||||
|
# The "-T 1" option means TDD config
|
||||||
|
```
|
||||||
|
|
||||||
|
- The number of UEs can set by using `--num-ues` option and the maximum UE number is 255 (with the `--mu*` options, otherwise 16).
|
||||||
|
- The number of threads can set with the `--nums-ue-thread`. This number **SHALL NOT** be greater than the number of UEs.
|
||||||
|
* At the time of writing, it seems to be enough to run on a single thread.
|
||||||
|
- The `--nokrnmod 1` option makes use of the preferred and supported tunnel interface.
|
||||||
|
- How many UE that can be tested depends on hardware (server , PC, etc) performance in your environment.
|
||||||
|
|
||||||
|
For example, running with 4 UEs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
cd ue_folder/cmake_targets
|
||||||
|
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --noS1 --L2-emul 3 --num-ues 64 --nums_ue_thread 1 --nokrnmod 1 > ue.log 2>&1
|
||||||
|
sleep 10
|
||||||
|
ifconfig
|
||||||
|
ens3 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
|
||||||
|
inet addr:192.168.122.169 Bcast:192.168.122.255 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.1.2 P-t-P:192.172.0.2 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.1.3 P-t-P:192.172.0.3 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue3 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.1.4 P-t-P:192.172.0.4 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue4 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.1.5 P-t-P:192.172.0.5 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_uem1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.2.2 P-t-P:10.0.2.2 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
....
|
||||||
|
```
|
||||||
|
|
||||||
|
Having the 4 oaitun_ue tunnel interfaces up and with an allocated address means the connection with EPC went alright.
|
||||||
|
|
||||||
|
# 8. Test with ping #
|
||||||
|
|
||||||
|
In a third terminal, after around 10 seconds, the UE(s) shall be connected to the eNB: Check with ifconfig
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
# Ping UE1 IP address based on the EPC pool used: in this example:
|
||||||
|
ping -I oaitun_enb1 -c 20 10.0.1.2
|
||||||
|
# Ping UE4 IP address based on the EPC pool used: in this example:
|
||||||
|
ping -I oaitun_enb1 -c 20 10.0.1.5
|
||||||
|
```
|
||||||
|
|
||||||
|
Ping from the UE side:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
ping -I oaitun_ue1 -c 20 10.0.1.1
|
||||||
|
ping -I oaitun_ue3 -c 20 10.0.1.1
|
||||||
|
```
|
||||||
|
|
||||||
|
iperf operations can also be performed.
|
||||||
|
|
||||||
|
DL traffic:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
iperf -B 10.0.1.2 -u -s -i 1 -fm -p 5002
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
iperf -c 10.0.1.2 -u -t 30 -b 3M -i 1 -fm -B 10.0.1.1 -p 5002
|
||||||
|
```
|
||||||
|
|
||||||
|
UL traffic:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineB
|
||||||
|
iperf -B 10.0.1.1 -u -s -i 1 -fm -p 5002
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
iperf -c 10.0.1.1 -u -t 30 -b 2M -i 1 -fm -B 10.0.1.2 -p 5002
|
||||||
|
```
|
||||||
|
|
||||||
|
# 9. Limitations #
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||||
|
|
||||||
|
[oai softmodem features](FEATURE_SET.md)
|
||||||
|
|
||||||
|
[oai softmodem build procedure](BUILD.md)
|
||||||
|
|
||||||
|
[L2 nfapi simulator](L2NFAPI.md)
|
||||||
+97
-70
@@ -7,7 +7,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
||||||
<b><font size = "5">L2 nFAPI Simulator (with S1 / same machine deployment)</font></b>
|
<b><font size = "5">L2 nFAPI Simulator (with S1 / 2-host deployment)</font></b>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -21,25 +21,24 @@
|
|||||||
5. [Setup of the Configuration files](#5-setup-of-the-configuration-files)
|
5. [Setup of the Configuration files](#5-setup-of-the-configuration-files)
|
||||||
1. [The eNB Configuration file](#51-the-enb-configuration-file)
|
1. [The eNB Configuration file](#51-the-enb-configuration-file)
|
||||||
2. [The UE Configuration file](#52-the-ue-configuration-file)
|
2. [The UE Configuration file](#52-the-ue-configuration-file)
|
||||||
6. [Bring Up a second loopback interface](#6-bring-up-a-second-loopback-interface)
|
6. [Build OAI UE and eNodeB](#6-build-oai-ue-and-enodeb)
|
||||||
7. [Build the eNB](#7-build-the-enb)
|
7. [Start EPC](#7-start-epc)
|
||||||
8. [Build the UE](#8-build-the-ue)
|
8. [Start the eNB](#8-start-the-enb)
|
||||||
9. [Initialize the NAS UE Layer](#9-initialize-the-nas-ue-layer)
|
9. [Start the UE](#9-start-the-ue)
|
||||||
10. [Start the eNB](#10-start-the-enb)
|
10. [Test with ping](#10-test-with-ping)
|
||||||
11. [Start the UE](#11-start-the-ue)
|
11. [Limitations](#11-limitations)
|
||||||
12. [Test with ping](#12-test-with-ping)
|
|
||||||
13. [Limitations](#13-limitations)
|
|
||||||
|
|
||||||
# 1. Environment #
|
# 1. Environment #
|
||||||
|
|
||||||
2 servers are used in this deployment. You can use Virtual Machines instead of each server; like it is done in the CI process.
|
3 servers are used in this deployment. You can use Virtual Machines instead of each server; like it is done in the CI process.
|
||||||
|
|
||||||
* Machine A contains the EPC.
|
* Machine A contains the EPC.
|
||||||
* Machine B contains the OAI eNB and the OAI UE(s)
|
* Machine B contains the OAI eNB executable (`lte-softmodem`)
|
||||||
|
* Machine C contains the OAI UE(s) executable (`lte-uesoftmodem`)
|
||||||
|
|
||||||
Example of L2 nFAPI Simulator testing environment:
|
Example of L2 nFAPI Simulator testing environment:
|
||||||
|
|
||||||
<img src="../l2-nfapi-simulator/L2-sim-single-server-deployment.png" alt="" border=3>
|
<img src="./images/L2-sim-S1-3-host-deployment.png" alt="" border=3>
|
||||||
|
|
||||||
Note that the IP addresses are indicative and need to be adapted to your environment.
|
Note that the IP addresses are indicative and need to be adapted to your environment.
|
||||||
|
|
||||||
@@ -47,26 +46,35 @@ Note that the IP addresses are indicative and need to be adapted to your environ
|
|||||||
|
|
||||||
Create the environment for the EPC and register all **USIM** information into the **HSS** database.
|
Create the environment for the EPC and register all **USIM** information into the **HSS** database.
|
||||||
|
|
||||||
If you are using OAI-EPC ([see on GitHub](https://github.com/OPENAIRINTERFACE/openair-cn)), build **HSS/MME/SPGW** and create config files.
|
If you are using OAI-EPC ([see on GitHub](https://github.com/OPENAIRINTERFACE/openair-epc-fed)), build **HSS/MME/SPGW** and create config files.
|
||||||
|
|
||||||
# 3. Retrieve the OAI eNB-UE source code #
|
# 3. Retrieve the OAI eNB-UE source code #
|
||||||
|
|
||||||
The eNB and the UE executables will compiled into 2 separate folders on the same machine `B`.
|
At the time of writing, the tag used in the `develop` branch to do this documentation was `2020.w16`.
|
||||||
|
|
||||||
|
The tutorial should be valid for the `master` branch tags such as `v1.2.0` or `v1.2.1`. But you may face issues that could be fixed in newer `develop` tags.
|
||||||
|
|
||||||
|
Please try to use the same commit ID on both eNB/UE hosts.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineB
|
$ ssh sudousername@machineB
|
||||||
$ git clone https://gitlab.eurecom.fr/oai/openairinterface5g/ enb_folder
|
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git enb_folder
|
||||||
$ cd enb_folder
|
cd enb_folder
|
||||||
$ git checkout -f v1.0.0
|
git checkout develop
|
||||||
$ cd ..
|
```
|
||||||
$ cp -Rf enb_folder ue_folder
|
|
||||||
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ue_folder
|
||||||
|
cd ue_folder
|
||||||
|
git checkout develop
|
||||||
```
|
```
|
||||||
|
|
||||||
# 4. Setup of the USIM information in UE folder #
|
# 4. Setup of the USIM information in UE folder #
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineB
|
$ ssh sudousername@machineC
|
||||||
$ cd ue_folder
|
cd ue_folder
|
||||||
# Edit openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf with your preferred editor
|
# Edit openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf with your preferred editor
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -126,19 +134,19 @@ You can repeat the operation for as many users you want to test with.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineB
|
$ ssh sudousername@machineB
|
||||||
$ cd enb_folder
|
cd enb_folder
|
||||||
# Edit ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf with your preferred editor
|
# Edit ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf with your preferred editor
|
||||||
```
|
```
|
||||||
|
|
||||||
First verify the nFAPI interface setup on the 2nd loopback interface.
|
First verify the nFAPI interface setup on the physical ethernet interface of machineB and put the proper IP addresses for both hosts.
|
||||||
|
|
||||||
```
|
```
|
||||||
MACRLCs = (
|
MACRLCs = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
local_s_if_name = "lo:"; // <-- HERE
|
local_s_if_name = "ens3"; // <-- HERE
|
||||||
remote_s_address = "127.0.0.1"; // <-- HERE
|
remote_s_address = "192.168.122.169"; // <-- HERE
|
||||||
local_s_address = "127.0.0.2"; // <-- HERE
|
local_s_address = "192.168.122.31"; // <-- HERE
|
||||||
local_s_portc = 50001;
|
local_s_portc = 50001;
|
||||||
remote_s_portc = 50000;
|
remote_s_portc = 50000;
|
||||||
local_s_portd = 50011;
|
local_s_portd = 50011;
|
||||||
@@ -171,7 +179,7 @@ Last, the S1 interface shall be properly set.
|
|||||||
|
|
||||||
```
|
```
|
||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR"; // replace with 192.168.10.20
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR"; // replace with 192.168.122.195
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
@@ -181,11 +189,11 @@ Last, the S1 interface shall be properly set.
|
|||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "ens3"; // replace with the proper interface name
|
ENB_INTERFACE_NAME_FOR_S1_MME = "ens3"; // replace with the proper interface name
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR"; // replace with 192.168.10.10
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR"; // replace with 192.168.122.31
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "ens3"; // replace with the proper interface name
|
ENB_INTERFACE_NAME_FOR_S1U = "ens3"; // replace with the proper interface name
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR"; // replace with 192.168.10.10
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR"; // replace with 192.168.122.31
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR"; // replace with 192.168.10.10
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR"; // replace with 192.168.122.31
|
||||||
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -195,7 +203,7 @@ Last, the S1 interface shall be properly set.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineB
|
$ ssh sudousername@machineB
|
||||||
$ cd ue_folder
|
cd ue_folder
|
||||||
# Edit ci-scripts/conf_files/ue.nfapi.conf with your preferred editor
|
# Edit ci-scripts/conf_files/ue.nfapi.conf with your preferred editor
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -206,9 +214,9 @@ L1s = (
|
|||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "nfapi";
|
tr_n_preference = "nfapi";
|
||||||
local_n_if_name = "lo"; // <- HERE
|
local_n_if_name = "ens3"; // <- HERE
|
||||||
remote_n_address = "127.0.0.2"; // <- HERE
|
remote_n_address = "192.168.122.31"; // <- HERE
|
||||||
local_n_address = "127.0.0.1"; // <- HERE
|
local_n_address = "192.168.122.169"; // <- HERE
|
||||||
local_n_portc = 50000;
|
local_n_portc = 50000;
|
||||||
remote_n_portc = 50001;
|
remote_n_portc = 50001;
|
||||||
local_n_portd = 50010;
|
local_n_portd = 50010;
|
||||||
@@ -217,20 +225,11 @@ L1s = (
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
# 6. Bring Up a second loopback interface #
|
# 6. Build OAI UE and eNodeB #
|
||||||
|
|
||||||
A second loopback interface is used to connect the eNB and the UEs.
|
See [Build documentation](./BUILD.md).
|
||||||
|
|
||||||
```bash
|
# 7. Start EPC #
|
||||||
$ ssh sudousername@machineB
|
|
||||||
$ sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up
|
|
||||||
```
|
|
||||||
|
|
||||||
# 7. [Build OAI UE and eNodeB](BUILD.md) #
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 8. Initialize the NAS UE Layer #
|
|
||||||
|
|
||||||
Start the EPC on machine `A`.
|
Start the EPC on machine `A`.
|
||||||
|
|
||||||
@@ -239,61 +238,89 @@ $ ssh sudousername@machineA
|
|||||||
# Start the EPC
|
# Start the EPC
|
||||||
```
|
```
|
||||||
|
|
||||||
# 9. Start the eNB #
|
# 8. Start the eNB #
|
||||||
|
|
||||||
In the first terminal (the one you used to build the eNB):
|
In the first terminal (the one you used to build the eNB):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineB
|
$ ssh sudousername@machineB
|
||||||
$ cd enb_folder/cmake_targets
|
cd enb_folder/cmake_targets
|
||||||
$ sudo -E ./ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf > enb.log 2>&1
|
sudo -E ./ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf > enb.log 2>&1
|
||||||
```
|
```
|
||||||
|
|
||||||
If you don't use redirection, you can test but many logs are printed on the console and this may affect performance of the L2-nFAPI simulator.
|
If you don't use redirection, you can test but many logs are printed on the console and this may affect performance of the L2-nFAPI simulator.
|
||||||
|
|
||||||
We do recommend the redirection in steady mode once your setup is correct.
|
We do recommend the redirection in steady mode once your setup is correct.
|
||||||
|
|
||||||
# 10. Start the UE #
|
# 9. Start the UE #
|
||||||
|
|
||||||
In the second terminal (the one you used to build the UE):
|
In the second terminal (the one you used to build the UE):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineB
|
$ ssh sudousername@machineC
|
||||||
$ cd ue_folder/cmake_targets
|
cd ue_folder/cmake_targets
|
||||||
# Test 64 UEs, 64 threads in FDD mode
|
# Test 64 UEs, 1 thread in FDD mode
|
||||||
$ sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 64 --nums-ue-thread 64 > ue.log 2>&1
|
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 64 --nums_ue_thread 1 --nokrnmod 1 > ue.log 2>&1
|
||||||
# Test 64 UEs, 64 threads in TDD mode
|
# Test 64 UEs, 1 thread in TDD mode
|
||||||
$ sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 64 --nums-ue-thread 64 -T 1 > ue.log 2>&1
|
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 64 --nums_ue_thread 1 --nokrnmod 1 -T 1 > ue.log 2>&1
|
||||||
# The "-T 1" option means TDD config
|
# The "-T 1" option means TDD config
|
||||||
```
|
```
|
||||||
|
|
||||||
- The number of UEs can set by using `--num-ues` option and the maximum UE number is 255 (with the `--mu*` options, otherwise 16).
|
- The number of UEs can set by using `--num-ues` option and the maximum UE number is 255 (with the `--mu*` options, otherwise 16).
|
||||||
- The umber of threads can set with the `--nums-ue-thread`. This number **SHALL NOT** be greater than the number of UEs.
|
- The number of threads can set with the `--nums-ue-thread`. This number **SHALL NOT** be greater than the number of UEs.
|
||||||
|
* At the time of writing, it seems to be enough to run on a single thread.
|
||||||
|
- The `--nokrnmod 1` option makes use of the preferred and supported tunnel interface.
|
||||||
- How many UE that can be tested depends on hardware (server , PC, etc) performance in your environment.
|
- How many UE that can be tested depends on hardware (server , PC, etc) performance in your environment.
|
||||||
|
|
||||||
# 11. Test with ping #
|
For example, running with 4 UEs:
|
||||||
|
|
||||||
In a third terminal, after around 10 seconds, the UE(s) shall be connected to the eNB:
|
```bash
|
||||||
|
$ ssh sudousername@machineC
|
||||||
|
cd ue_folder/cmake_targets
|
||||||
|
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 64 --nums_ue_thread 1 --nokrnmod 1 > ue.log 2>&1
|
||||||
|
sleep 10
|
||||||
|
ifconfig
|
||||||
|
ens3 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
|
||||||
|
inet addr:192.168.122.169 Bcast:192.168.122.255 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:192.172.0.2 P-t-P:192.172.0.2 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:192.172.0.3 P-t-P:192.172.0.3 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue3 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:192.172.0.4 P-t-P:192.172.0.4 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_ue4 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:192.172.0.5 P-t-P:192.172.0.5 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
oaitun_uem1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
||||||
|
inet addr:10.0.2.2 P-t-P:10.0.2.2 Mask:255.255.255.0
|
||||||
|
....
|
||||||
|
....
|
||||||
|
```
|
||||||
|
|
||||||
|
Having the 4 oaitun_ue tunnel interfaces up and with an allocated address means the connection with EPC went alright.
|
||||||
|
|
||||||
|
# 10. Test with ping #
|
||||||
|
|
||||||
|
In a third terminal, after around 10 seconds, the UE(s) shall be connected to the eNB: Check with ifconfig
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ssh sudousername@machineA
|
$ ssh sudousername@machineA
|
||||||
# Ping UE0 IP address based on the EPC pool used: in this example:
|
|
||||||
$ ping -c 20 192.168.200.2
|
|
||||||
# Ping UE1 IP address based on the EPC pool used: in this example:
|
# Ping UE1 IP address based on the EPC pool used: in this example:
|
||||||
$ ping -c 20 192.168.200.4
|
$ ping -c 20 192.172.0.2
|
||||||
|
# Ping UE4 IP address based on the EPC pool used: in this example:
|
||||||
|
$ ping -c 20 192.172.0.5
|
||||||
```
|
```
|
||||||
|
|
||||||
# 12. Limitations #
|
iperf operations can also be performed.
|
||||||
|
|
||||||
Testing on the CI process is currently limited at time of writing. Improvements will be made soon.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 11. Limitations #
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 87 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
Reference in New Issue
Block a user