|
|
TEst |
|
|
\ No newline at end of file |
|
|
# How to Connect OAI eNB with COTS UE via the NGFI RRU
|
|
|
|
|
|
In this tutorial, we will describe 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 extended 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 as depicted in the following figure:
|
|
|
|
|
|
|
|
|
![topology_wiki.png](HowToConnectCOTSUEwithOAIeNBviaRRHGW/topology_wiki.png)
|
|
|
|
|
|
Figure 1.: OAI RRH GW, OAI eNB and OAI EPC+HSS 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 firstly 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.
|
|
|
|
|
|
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 repository 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.
|
|
|
|
|
|
The tutorial set up is depicted once more in the following figure, this time containing interconnection information (i.e. IP addresses and Ethernet interface names) that will be used in certain configuration files.
|
|
|
|
|
|
![topology_wiki_if_info.png](HowToConnectCOTSUEwithOAIeNBviaRRHGW/topology_wiki_if_info.png)
|
|
|
|
|
|
Figure 2.: OAI RRH GW, OAI eNB and OAI EPC+HSS on different hosts (interface information included)
|
|
|
|
|
|
## 1. Installation and Configuration of OAI EPC + HSS
|
|
|
|
|
|
### 1.1 Installation
|
|
|
|
|
|
#### Step 1: Check out the Trunk
|
|
|
|
|
|
Download the source code from the appropriate Git repository (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
|
|
|
|
|
|
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 scripts for openair-cn
|
|
|
|
|
|
```shell
|
|
|
git checkout v0.3.2
|
|
|
./build_epc -i #(Need to run only once to install missing packages)
|
|
|
./build_hss -i #(Need to run only once to install missing packages)
|
|
|
```
|
|
|
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 and execution
|
|
|
|
|
|
#### Step 1: Edit the EPC configuration file: `~/openair-cn/BUILD/EPC/epc.conf.in`
|
|
|
|
|
|
As depicted in Figure 2 the IP address of EPC+HSS is `192.168.12.4` and the Ethernet interface name is `eth0`. Also we assume that the UE that will be used will be configured with the following information ([SIMInfo](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)
|
|
|
|
|
|
Using this information the configuration file of EPC is edited as follows:
|
|
|
|
|
|
|
|
|
```
|
|
|
TAI_LIST = (
|
|
|
{MCC="208" ; MNC="93"; TAC = "1"; } # YOUR PLMN CONFIG HERE</div>
|
|
|
);
|
|
|
|
|
|
|
|
|
NETWORK_INTERFACES :
|
|
|
{
|
|
|
MME_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
|
|
MME_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.4/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 = "eth0";
|
|
|
SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP = "192.168.12.4/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 = "eth0";
|
|
|
PGW_IPV4_ADDRESS_FOR_SGI = "192.168.12.4/24";
|
|
|
PGW_MASQUERADE_SGI = "yes";
|
|
|
};
|
|
|
...
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Note that PGW_IPV4_ADDRESS_FOR_SGI is the address used by EPC to access the (external) Internet.
|
|
|
|
|
|
#### Step 2: Run 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
|
|
|
```
|
|
|
|
|
|
EPC should be able to connect to HSS and you should see both enter STATE_OPEN in the terminal.The OAI core network is up and running.
|
|
|
|
|
|
## 2. Installation and Configuration of OAI RRH GW
|
|
|
|
|
|
### 2.1 Installation
|
|
|
|
|
|
#### Step 1: Check out the Trunk
|
|
|
|
|
|
Download the source code from the appropriate Git repository (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 -t ETHERNET --install-optional-packages #for USRP
|
|
|
./build_oai -I -g --RRH --install-system-files -w BLADERF -t ETHERNET --install-optional-packages #for BladeRF
|
|
|
```
|
|
|
|
|
|
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.
|
|
|
* --RRH: installs RRH GW, i.e., rrh_gw.
|
|
|
* --install-system-files: installs OAI required files in Linux system.
|
|
|
* -w: adds the hardware support, which is USRP in our case.
|
|
|
* -t: adds fronthaul transport protocol support (currently only ETHERNET is supported)
|
|
|
* --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.
|
|
|
* 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.
|
|
|
|
|
|
Look at [AutoBuild](AutoBuild) for more details.
|
|
|
|
|
|
#### 2.2 Configuration and execution
|
|
|
|
|
|
#### Step 1: Run RRH GW
|
|
|
|
|
|
All the required configuration for RRH GW is given via input arguments which will be adjusted with respect to the following:
|
|
|
* we assume that `UDP` will be used as the transport protocol in the link between RRH GW and eNB
|
|
|
* only `one` eNB will be connected to RRH GW (see Figure 1)
|
|
|
* RRH GW will have a radio front end equipment (USRPB210) attached to it, so there is `no emulation operation` (see Figure 1)
|
|
|
* the name of the Ethernet interface for RRH GW is `eth0` (see Figure 2).
|
|
|
|
|
|
##### Compile & Run RRH GW:
|
|
|
|
|
|
```shell
|
|
|
cd ~/openairinterface5g
|
|
|
source oaienv
|
|
|
./cmake_targets/build_oai -w USRP -t ETHERNET --RRH -c
|
|
|
cd cmake_targets/rrh_gw/build
|
|
|
sudo -E ./rrh_gw -n1 -i eth0 -m0 -x
|
|
|
sudo -E ./rrh_gw -h #(to see help options)
|
|
|
```
|
|
|
You may print out the help message to see other options. A summary of the above options follows.
|
|
|
* -n: number of eNBs that will be connected to RRH GW (in this case is 1)
|
|
|
* -i: name of the RRH GW Ethernet interface (in this case the name is "eth0")
|
|
|
* -m: choose between UDP and RAW version of Ethernet (UDP:0 RAW:1)
|
|
|
* -x: choose between real time or emulated operation (in this case real time operation is used)
|
|
|
|
|
|
__Note__: some other options are very useful for debugging purposes, such as `-v`, which enables VCD and generates a log file (/tmp/openair_dump_rrh.vcd) with a lot of details and `-g9` which sets logging information to debug level. Finally, there is the option `-t`, which prints periodic round trip delay measurements between RRH GW and eNB. Since all three of them consume computing resources (e.g. VCD is heavy on file access), you are recommended to disable them for normal use.
|
|
|
|
|
|
When OAI RRH GW is up waiting for a connection from the eNB, you should see something like the following:
|
|
|
|
|
|
```
|
|
|
...
|
|
|
[RRH][I]eth0: IP address: 192.168.12.1
|
|
|
[RRH][I]UDP mode selected for ethernet.
|
|
|
[ETHERNET]: Initializing openair0_device for RRH ...
|
|
|
[RRH] has loaded ETHERNET transport protocol.
|
|
|
[RRH] local ip addr 192.168.12.1 port 50000
|
|
|
[RRH] binding mod_0 to 192.168.12.1:50000
|
|
|
```
|
|
|
|
|
|
## 3. Installation and Configuration of OAI eNB
|
|
|
|
|
|
### 3.1 Installation
|
|
|
|
|
|
#### Step 1: Check out the Trunk
|
|
|
Download the source code from the appropriate Git repository (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 None -t ETHERNET --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 None in our case (radio hardware support is associated with RRH GW).
|
|
|
* -t: adds fronthaul transport protocol support (currently only ETHERNET is supported)
|
|
|
* --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.
|
|
|
* 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.
|
|
|
|
|
|
Look at [AutoBuild](AutoBuild) for more details.
|
|
|
|
|
|
### 3.2 Configuration and execution
|
|
|
|
|
|
#### Step 1: Edit the eNB configuration file (`~/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf`)
|
|
|
|
|
|
The file is edited appropriately with respect to Figure 2:
|
|
|
* IP address of EPC/HSS is `192.168.12.4`
|
|
|
* IP address of eNB towards EPC/HSS is `192.168.12.3` and Ethernet interface name is `eth1`
|
|
|
* IP address of eNB towards RRH GW is `192.168.12.2` and Ethernet interface name is `eth0`
|
|
|
* IP address of RRH GW is `192.168.12.1`
|
|
|
* RRH GW will have a `USRPB210` attached to it
|
|
|
|
|
|
It is assumed that `UDP` ETHERNET communication will be used and finally, we again assume that the UE that will be used will be configured with the information mentioned in `Step 1: Edit the EPC configuration file`. Using this information the configuration file of eNB is edited as follows:
|
|
|
|
|
|
```
|
|
|
tracking_area_code = "1";
|
|
|
mobile_country_code = "208";
|
|
|
mobile_network_code = "93";
|
|
|
|
|
|
|
|
|
////////// MME parameters:
|
|
|
mme_ip_address = ( { ipv4 = "192.168.12.4";
|
|
|
ipv6 = "192:168:3::17";
|
|
|
active = "yes";
|
|
|
preference = "ipv4";
|
|
|
}
|
|
|
);
|
|
|
rrh_gw_config = (
|
|
|
{
|
|
|
local_if_name = "eth0";
|
|
|
remote_address = "192.168.12.1";
|
|
|
local_address = "192.168.12.2";
|
|
|
local_port = 50001; #for raw option local port must be the same to remote
|
|
|
remote_port = 50000;
|
|
|
rrh_gw_active = "yes";
|
|
|
tr_preference = "udp"
|
|
|
rf_preference = "usrp_b200";
|
|
|
iq_txshift = 4;
|
|
|
tx_sample_advance = 70;
|
|
|
tx_scheduling_advance = 9;
|
|
|
|
|
|
}
|
|
|
);
|
|
|
|
|
|
NETWORK_INTERFACES :
|
|
|
{
|
|
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth1";
|
|
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.3/24";
|
|
|
|
|
|
ENB_INTERFACE_NAME_FOR_S1U = "eth1";
|
|
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.3/24";
|
|
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
|
|
};
|
|
|
|
|
|
```
|
|
|
|
|
|
__Note__: Some notes on the following parameters:
|
|
|
* iq_txshift: corresponds to the value that will be used to shift the bits of I/Q samples in TX path and is dependent on the output fromat of the radio hardware target attached to RRH GW
|
|
|
* tx_sample_advance and tx_scheduling_advance are parameters used for timestamp adjustment between the radio hardware target and its host and they depend on the radio hardware target used and the bandwidth
|
|
|
* tx_sample_advance-> fine-grain parameter - each unit corresponds to a sample
|
|
|
* tx_scheduling_advance-> coarse-grain parameter-each unit corresponds to one packet
|
|
|
|
|
|
#### Step 2: Run eNB
|
|
|
|
|
|
##### Compile & Run eNB:
|
|
|
|
|
|
```shell
|
|
|
cd ~/openairinterface5g
|
|
|
source oaienv
|
|
|
./cmake_targets/build_oai -w None -t ETHERNET --eNB -x -V -c
|
|
|
cd cmake_targets/lte_build_oai/build
|
|
|
sudo -E ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf
|
|
|
```
|
|
|
You may print out the help message (`./lte-softmodem -h`) to see other options. A summary of the above options is given below.
|
|
|
* -O: configuration file
|
|
|
|
|
|
__Note__: some other options are very useful for debugging purposes, such as `-V`, which enables VCD and generates a log file (/tmp/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 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
|
|
|
|
|
|
At this point we have an operating base station and core network, so it is time to configure the COTS UE and use it (see Stage 2 of [HowToConnectCOTSUEwithOAIeNB](HowToConnectCOTSUEwithOAIeNB) tutorial).
|
|
|
|
|
|
## 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.rrh.usrpb210.conf](HowToConnectCOTSUEwithOAIeNBviaRRHGW/enb.band7.tm1.rrh.usrpb210.conf)
|
|
|
* [epc.conf.in](HowToConnectCOTSUEwithOAIeNB/epc.conf.in)
|
|
|
* [topology_wiki.png](HowToConnectCOTSUEwithOAIeNBviaRRHGW/topology_wiki.png)
|
|
|
* [topology_wiki_if_info.png](HowToConnectCOTSUEwithOAIeNBviaRRHGW/topology_wiki_if_info.png)
|
|
|
|