aikaterini.trilyraki created page: HowtoconnectCOTSUEtoOAIeNBviaRRHGW authored by Aikaterini Trilyraki's avatar Aikaterini Trilyraki
# How to Connect OAI eNB with COTS UE via the OAI RRH GW (USRP-B210)
In this tutorial, we will introduce how to connect a commercial off-the-self UE (i.e. smartphone and LTE dongle) with the C-RAN version of the OAI eNB. As it is dictated by the C-RAN concept the radio front end hardware is detached from the eNB and is incorporated to a remote radio head (RRH) instead which is connected to the eNB. Within the framework of OAI this concept is realized as follows:
* the OAI eNB functionality is extented so that OAI eNB is able to interface via Ethernet a RRH
* a new software entity is introduced, namely the OAI RRH GW which acts as an abstraction between radio front end equipment (e.g. USRPB210, BLADERF and LMSSDR) and the OAI eNB
The present tutorial describes how to deploy and run OAI EPC, OAI eNB and OAI RRH GW on different hosts.
At this point, we have to note that the OAI RRH GW in its simplest form is defaulted to a single RRH which in this tutorial is a USRP-B210-based RRH.
The entire procedure is divided into the following stages:
1. Install and configure OAI EPC and HSS on a host. At the end of this stage, EPC should be able to connect to HSS.
2. Install and configure OAI RRH GW on a host. At the end of this stage, RRH GW should be an up and running server waiting for incoming eNB connections.
3. Install and configure OAI eNB on a host. At the end of this stage, eNB should be able to initially be connected to the EPC+HSS and later on initiate a connection with the RRH GW.
4. Configure UE (e.g., smartphone service mode, USIM card) and register the user on HSS database. At the end of this stage, UE should be able to attach and connect to eNB.
5. Configure networking settings between eNB and UE. At the end of this stage, they should be able to ping each other and `iperf` can be run to test the throughput.
Checklist prior to OAI installation:
* Ubuntu 14.04 LTS (32-bit or 64-bit)
* [Kernel setup](OpenAirKernelMainSetup)
* disable C-states from BIOS (or from GRUB)
* disable CPU frequency scaling
* install low-latency kernel
* Install _git_ with the command `sudo apt-get install git` (we will be downloading source codes from the trunk at this moment).
__Note__: If GNURadio has already been installed, check the version of UHD. In most cases,
GNURadio downloaded from Ubuntu repositoy is likely to be 3.7.2, which is outdated and does
not contain the latest UHD. The OAI build script will try to download the latest UHD during
automated installation and compilation may fail due to the conflict or missing libraries. So
the simplest way is to uninstall GNURadio and outdated UHD libraries.
## 1. Installation and Configuration of OAI EPC + HSS
### 1.1 Installation
#### Step 1: Check out the Trunk
First, we will download source codes from the link below as an example. See [GetSources](GetSources).
We assume that you have following directory:
* openair-cn : The location of openair-cn git repository
#### Step 2: Specify FQDN for EPC
Second, a fully qualified domain name (FQDN) needs to be set for the EPC (MME_GW) [\[1\]][1], before we use
the automated script to build eNB, EPC and HSS all at once. An example is as follows. Assume the
hostname is "labuser". You may check it in `/etc/hostname`.
```shell
labuser@labuser:$ cat /etc/hostname
labuser
```
Then fill the FQDN in /etc/hosts as follows:
```shell
labuser@labuser:$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 labuser.111.111 labuser
```
"labuser.111.111" is a sample FQDN, where "labuser" is your hostname, and "111.111" is your realm. You can replace "111.111" with other combination.
#### Step 3: Run automated script for openair-cn
```shell
./build_epc -i #(Need to run only once to install missing packages)
./build_hss -i #(Need to run only once to install missing packages)
```
During the building process, you will be asked to set the password for MySQL "root" user. You are recommended to use "linux", since this is the default password used by OAI; otherwise, you will have to edit some configuration file so that HSS is able to access MySQL database.
The detailed instructions for EPC are located in: **YOUR_openair-cn_DIRECTORY/DOCS/EPC_User_Guide.pdf**
Look at [AutoBuild](AutoBuild) for more details.
### 1.2 Configuration
#### 1.2.2 eNB and EPC+HSS on different hosts
Next, we explain the setup for running eNB and EPC+HSS on two different hosts. Assume the IP addresses of eNB and EPC+HSS are 192.168.100.102 and 192.168.100.103. Figure 2 is an example which specifies the network topology.
![eNB_EPC_different_hosts.png](HowToConnectCOTSUEwithOAIeNB/eNB_EPC_different_hosts.png)
Figure 2. eNB, EPC (MME+S/PGW) and HSS on different hosts.
Then, make sure the networking parameters are properly specified in eNB and EPC configuraiton files. In eNB configuration file (`~/openairinterface5g/targets/PROJECT/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf`),
```
tracking_area_code = "1";
mobile_country_code = "208";
mobile_network_code = "93";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.100.103";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.100.102/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth1";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.100.102/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
```
where mme_ip_address is network interface's IP address of your EPC/HSS, and NETWORK_INTERFACE is your eNB related network interface information.
In EPC configuration file (`~/openair-cn/BUILD/EPC/epc.conf.in`):
```
TAI_LIST = (
{MCC="208" ; MNC="93"; TAC = "1"; } # YOUR PLMN CONFIG HERE</div>
);
NETWORK_INTERFACES :
{
MME_INTERFACE_NAME_FOR_S1_MME = "eth1";
MME_IPV4_ADDRESS_FOR_S1_MME = "192.168.100.103/24";
MME_INTERFACE_NAME_FOR_S11_MME = "none";
MME_IPV4_ADDRESS_FOR_S11_MME = "0.0.0.0/24";
};
S-GW :
{
NETWORK_INTERFACES :
{
SGW_INTERFACE_NAME_FOR_S11 = "none";
SGW_IPV4_ADDRESS_FOR_S11 = "0.0.0.0/24";
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP = "eth1";
SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP = "192.168.100.103/24";
SGW_IPV4_PORT_FOR_S1U_S12_S4_UP = 2152;
SGW_INTERFACE_NAME_FOR_S5_S8_UP = "none";
SGW_IPV4_ADDRESS_FOR_S5_S8_UP = "0.0.0.0/24";
};
};
P-GW :
{
NETWORK_INTERFACES :
{
PGW_INTERFACE_NAME_FOR_S5_S8 = "none";
PGW_IPV4_ADDRESS_FOR_S5_S8 = "0.0.0.0/24";
PGW_INTERFACE_NAME_FOR_SGI = "eth1";
PGW_IPV4_ADDRESS_FOR_SGI = "192.168.100.103/24";
PGW_MASQUERADE_SGI = "yes";
};
...
}
```
Note that PGW_IPV4_ADDRESS_FOR_SGI is the address used by EPC to access the (external) Internet.
__Acknowledge__: this example was provided by Yeoh Chun-Yeow in one previous email.
#### 1.3.2 Running EPC and HSS
##### Compile & Run EPC:
```shell
cd ~/openair-cn
cd SCRIPTS
./build_epc -c -l
./run_epc -r
```
##### Compile & Run HSS:
```shell
cd ~/openair-cn
cd SCRIPTS
./build_hss -c -l
./run_hss
```
After EPC is connected to HSS (you should see both enter STATE_OPEN from the terminal), compile and start eNB with the following commands below:
## 2. Installation and Configuration of OAI RRH GW
### 2.1 Installation
#### Step 1: Check out the Trunk
First, we will download source codes from the link below as an example. See [GetSources](GetSources).
We assume that you have following directory:
* openairinterface5g: The location of openairinterface5g repository.
#### Step 2: Run automated script for OAI RRH GW
```shell
cd ~/openairinterface
source oaienv
cd cmake_targets
./build_oai -I -g --RRH --install-system-files -w USRP --install-optional-packages```
Look at [AutoBuild](AutoBuild) for more details.
#### 2.3.2 Running RRH GW
##### Compile & Run RRH GW:
```shell
cd ~/openairinterface5g
source oaienv
./cmake_targets/build_oai -w USRP -t ETHERNET -c --RRH
cd cmake_targets/rrh_gw/build
sudo -E ./rrh_gw -i ethx -m1 -x
sudo -E ./rrh_gw -h #(to see help options)
```
When OAI RRH GW is successfully connected, you should see something like the following on eNB terminal:
```
...
TYPE <CTRL-C> TO TERMINATE
```
## 3. Installation and Configuration of OAI eNB
### 3.1 Installation
#### Step 1: Check out the Trunk
First, we will download source codes from the link below as an example. See [GetSources](GetSources).
We assume that you have following directory:
* openairinterface5g: The location of openairinterface5g repository.
#### Step 2: Run automated build script (openairinterface5g)
```shell
cd ~/openairinterface
source oaienv
cd cmake_targets
./build_oai -I -g --eNB -x --install-system-files -w USRP --install-optional-packages```
You can print out the help message to see what these options mean using the command "./build_oai -h". A short summary is as follows.
* -I: installs required packages.
* -g: adds debugging symbols to compilation directives.
* --eNB: installs eNB, i.e., lte-softmodem.
* -x: adds a software oscilloscope feature to the produced binaries.
* --install-system-files: installs OAI required files in Linux system.
* -w: adds the hardware support, which is USRP in our case.
* --install-optional-packages: Installs optional packages
__Notes:__
* If you have previously build OAI on your host, please use -c or -C to remove existing compiled files.
Look at [AutoBuild](AutoBuild) for more details.
### 3.2 Configuration
#### 3.2.2 eNB and EPC+HSS on different hosts
##### Compile & Run eNB:
```shell
cd ~/openairinterface5g
source oaienv
./cmake_targets/build_oai -w None -t ETHERNET -x -c --eNB
cd cmake_targets/lte_build_oai/build
sudo -E ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECT/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -d
sudo -E ./lte-softmodem -h #(to see help options)
```
You may print out the help message to see other options. A summary of the above options is given below.
* -O: configuration file
* -m: set the maximum downluink MCS
* -t: set the maximum uplink MCS
* -x: set the transmission mode, valid option: 1
* -W: enable L2 Wireshark messages on localhost
__Note__: some other options are very useful for debugging purposes, such as `-V`, which enables VCD and generates a log file (/tnp/openair_dump_eNB.vcd) with a lot of details, and `-d`, which enables software oscilloscope with interactive graphic interfaces. Since both consume a lot of computing resources (one is heavy on file access, the other one is heavy on graphics), you are recommended to disable them for normal use.
When OAI eNB is successfully connected, you should see something like the following on eNB terminal:
```
...
[SCHED][eNB] Started eNB main thread on CPU 1 TID 5273
eNB_thread: mlockall in ...
eNB_thread: mlockall out ...
waiting for sync (eNB_thread)
TYPE <CTRL-C> TO TERMINATE
Entering ITTI signals handler
```
## 4. UE Configuration and User Registration on HSS Database
Now eNB, EPC and HSS are working properly, and we may move to the next stage. Assume
that the UE or USIM card has the following information ([Link](SIMInfo)):
* MCC (Mobile Country Code): 208
* MNC (Mobile Network Code): 93
* TAC (Tracking Area Code): 123
* IMSI: 208930000000001
* Ki: 8BAF473F2F8FD09487CCCBD7097C6862 (32 digits)
* OP (Operator Key): 11111111111111111111111111111111 (32 digits)
You may other combinations as you like.
### 4.1 USIM Card Programming
TBD (description USIM programming device + procedure + pics)
### 4.2 UE Configuration
TBD (pics + description)
#### 4.2.1 Smartphone: Samsung S3
#### 4.2.2 Smartphone: Samsung S4 mini
You have to create a new APN profile in your smartphone according the one that
you will assign to the UE in the HSS database. So you have to go
__Settings->Mobile network settings->Access Point Names-> Add a new apn__.
Give a **name** to this apn profile (e.g. `eur`). At the **APN field** write
the name that exists on the HSS database (e.g. `oai.ipv4`). At the **Bearer** field check the option `LTE`.
Save the apn profile and then select it.
#### 4.2.3 LTE Dongle: Bandrich LTE Dongle C501
#### 4.2.4 LTE Dongle: Huawei E3372
For this LTE Dongle you don't have to give at commands in order to configure it but you can do it from the graphical interface that it is on the url 192.168.8.1. You have to go to Profile Management and add a new APN profile (see the picture below)
![huawei_apn.png](HowToConnectCOTSUEwithOAIeNB/huawei_apn.png)
### 4.3 User Registration on HSS Database
In order for UE to complete the attach procedure successfully, we need to register the user on HSS database.
#### Step 1: Install Phpmyadmin (Optional)
In this case, phpmyadmin may come handy to you. Alternatively, you may access MySQL
database from the command line. The instructions are available [here](https://help.ubuntu.com/community/phpMyAdmin).
In most cases, the following commands will work for you.
```shell
sudo apt-get install phpmyadmin
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo /etc/init.d/apache2 reload
```
Then you can access the HSS database via http://127.0.0.1/phpmyadmin/ with username "**hssadmin**" and password "**admin**".
#### Step 2: Add User to Table oai_db.users
You may check out existing users in the database via phpmyadmin. However, you may not
be able to insert a user record on phpmyadmin, because the Key (as well as OPc) is stored
as binary in the database. Use the following commands as a guide.
```shell
shell > mysql -u root -p
# The password is "linux"
mysql > use oai_db;
mysql > INSERT INTO users (`imsi`, `msisdn`, `imei`, `imei_sv`, `ms_ps_status`, `rau_tau_timer`,
-> `ue_ambr_ul`, `ue_ambr_dl`, `access_restriction`, `mme_cap`, `mmeidentity_idmmeidentity`,
-> `key`, `RFSP-Index`, `urrp_mme`, `sqn`, `rand`, `OPc`)
-> VALUES ('208930000000001', '33638060010', NULL, NULL, 'PURGED', '120', '50000000', '100000000',
-> '47', '0000000000', '3', 0x8BAF473F2F8FD09487CCCBD7097C6862, '1', '0', '',
-> 0x00000000000000000000000000000000, '');
```
There are a couple of things to note:
* msisdn: even though it is optional, you may not leave it blank since OAI will check its presence (any value would be fine).
* OPc: OPc is computed from OP and Key. You may leave it NULL, since HSS will compute it for you; or you
may use the online tools listed [here](SIMInfo) to compute the value.
* **mmeidentity_idmmeidentity**: the value is 3 here; it has to match the one in Table oai_db.mmeidentity.
#### Step 3: Update Tables oai_db.mmeidentity and oai_db.pdn
You can directly insert a record to oai_db.mmeidentity via phpmyadmin. In this case,
"idmmeidentity" is 3, "mmehost" is "labuser.111.111" and "mmerealm" is "111.111".
Also, you need to insert a record to oai_db.pdn for the user via phpmyadmin.
### 4.4 Connect UE to eNB
### 4.5 Possible Issues
#### Issue 1: MNC Not Found (mcc_mnc_list)
If you choose a good combination of MCC and MNC that is not currently in the mcc_mnc_list,
you may see some error like the following on the EPC terminal:
```
...
Assertion (0) failed!
In mme_app_handle_nas_auth_param_req() /home/labuser/trunk/openair-cn/MME_APP/mme_app_authentication.c:291
MNC Not found (mcc_mnc_list)
...
```
So the solution is to add your own combination to the mcc_mnc_list located in `~/trunk/openair-cn/UTILS/mcc_mnc_itu.c`.
Then you can rebuild EPC with the following command.
```shell
~/openair-cn/SCRIPTS/build_epc #(Run this command with options as discussed in sections above)
```
#### Issue 2: iptables: No chain/target/match by that name.
```
...
iptables: No chain/target/match by that name.
[SPGW-APP][E]ERROR in system command iptables -t mangle -A FORWARD -d 192.168.3.2 -m mark --mark 0
-j GTPUSP --own-ip 127.0.0.1 --own-tun 1 --peer-ip 127.0.0.1 --peer-tun 3396329693 --action add: 256
at /home/labuser/trunk/openair-cn/SGW-LITE/sgw_lite_handlers.c:897
```
If you see an error like this, insert `~/trunk/targets/bin/xt_GTPUSP.ko`:
```shell
sudo insmod ~/trunk/targets/bin/xt_GTPUSP.ko
```
## 5. Networking Configuration for UE and eNB
## References:
\[1\] https://gitlab.eurecom.fr/oai/openair-cn/blob/master/DOCS/EPC_User_Guide.pdf
[1]: https://gitlab.eurecom.fr/oai/openair-cn/blob/master/DOCS/EPC_User_Guide.pdf
## Attachments
* [enb.band7.tm1.usrpb210.epc.local.conf](HowToConnectCOTSUEwithOAIeNB/enb.band7.tm1.usrpb210.epc.local.conf)
* [eNB_EPC_different_hosts.png](HowToConnectCOTSUEwithOAIeNB/eNB_EPC_different_hosts.png)
* [eNB_EPCHSS_local_host.png](HowToConnectCOTSUEwithOAIeNB/eNB_EPCHSS_local_host.png)
* [epc_commented.png](HowToConnectCOTSUEwithOAIeNB/epc_commented.png)
* [epc.conf.in](HowToConnectCOTSUEwithOAIeNB/epc.conf.in)
* [epc.png](HowToConnectCOTSUEwithOAIeNB/epc.png)
* [figure_local_eNB_EPC.png](HowToConnectCOTSUEwithOAIeNB/figure_local_eNB_EPC.png)
* [huawei_apn.png](HowToConnectCOTSUEwithOAIeNB/huawei_apn.png)
-- @Xuhang.Ying, @Virgilios.Passas - 25 Jul 2015