(updated: 2017, July 10th)
Modifs since version on July 6th:
- Latest commit
- Fix lacking file in the tarball
(non modified ones since the June version were missing) - improved code pieces formating in HTML, added automatic git patch
- Full re-test, from disk install of Ubuntu 17.04 to UE throughput measurement
This document explains how to install and configure OAI EPC+eNB on one single Ubuntu 17.04 64 bits machine connected with a regular UE (a Huawei E3272), routing the UE traffic to internet.
We use EPC after a major contribution in May 2017: a lot of code has been modified, all directories names were changes, configuration parameters names/values changed.
The description uses a USRP B210 board, a Lime SDR page is provided separately.
We also explain how to simplify, fix existing issues, to make a single computer as a full LTE network: EPC+eNB.
Known limitations fixed in the hereafter description
- OAI EPC require kernel >= 4.7, so we have to use Ubuntu 17.04
- We already pushed some enhancements in OAI, nevertheless some more are required
- GTP UDP ports are in conflict for eNB and SGW
- Useless link between OAI and the Ubuntu/Linux hostname removed
- Several simplifications and precisions to make easier and reliable installations
Install Ubuntu
- Prepare a machine: a 4 actual cores, no hyper-threading.
All other configuration in OAI Wiki (C1 states, …) describes is about useless. - Download Ubuntu 17.04 64 bits version iso file
- create a usb key to boot on it
- install Ubuntu: choose to install Third party SW, and to upgrade all packages while installing
- do: apt update; apt upgrade until the machine is up-to-date
- install git and configure your identification in git:
123sudo apt install gitgit config --global user.name "Laurent"git config --global user.email "laurent.thomas@open-cells.com" - Add the OAI repository as authorized remote system
1echo -n | openssl s_client -showcerts -connect gitlab.eurecom.fr:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt - if you are upset with sudo password, add this line in /etc/sudoers
- xxxxxx ALL=(ALL) NOPASSWD: ALL (xxxxxx is your login name)
- sudo will not ask anymore for a password
Install USRP drivers
Ettus has not yet released their driver for Ubuntu 17.04, we take it from source:
1 2 3 4 5 6 7 8 |
sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils python-requests cmake build-essential git clone git://github.com/EttusResearch/uhd.git cd uhd; mkdir host/build; cd host/build cmake -DCMAKE_INSTALL_PREFIX=/usr .. make -j4 sudo make install sudo ldconfig sudo /usr/lib/uhd/utils/uhd_images_downloader.py |
Download our modifications
download: patches extract the data:
1 |
tar xf opencells-mods-20170710.tgz |
Download & Compile the eNB on 17.04
1 2 3 |
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git cd openairinterface5g git checkout develop |
- We tested with commit 08b8b3142df16831396a5283a015564ff56bf91c
We already merged in develop most of updates for Ubuntu 17.04, so we need only to add in build_helper file the Ubuntu 17.04 support
1 |
git apply opencells-mods/eNB.patch |
- Now, you should be able to build as usual the eNB
1 2 3 |
source oaienv ./cmake_targets/build_oai -I # install SW packages from internet ./cmake_targets/build_oai -w USRP --eNB --UE # compile eNB |
Download and patch EPC
Clone OAI EPC:
1 2 3 |
git clone https://gitlab.eurecom.fr/oai/openair-cn.git cd openair-cn git checkout develop |
(we used: commit 5353b606662a6ae7eaadf6bc39cbf6452d298b0e)
Apply the patch:
1 |
git apply opencells-mods/EPC.patch |
The new version of the source files are also in the tar, if you want to merge with another version of OpenAir EPC
What is in the patch file:
- Add Ubuntu 17.04 for compilation and fix some bugs
- build/tools/build_helper
- src/common/common_defs.h
- src/oai_hss/utils/hss_config.c
- Remove link between Linux host name and LTE diameter protocol configuration
- src/s6a/s6a_peer.c
- Add usage of the input address for the SGW input socket
- src/gtpv1-u/gtp_mod_kernel.c
- src/gtpv1-u/gtp_mod_kernel.h
- src/gtpv1-u/gtpv1u_task.c
No kernel module patch is required anymore: generic Ubuntu kernel 17.04 works fine with OAI
Install third party SW for EPC
1 2 |
cd openair-cn; source oaienv; cd scripts ./build_hss -i |
- Do you want to install freeDiameter 1.2.0 ?: yes
- set your MySQL password and remember it!
- Answer yes to install: freeDiameter 1.2.0
- phpmyadmin:
- choose light or apache as you prefer
- Configure database for phpmyadmin with dbconfig-common: yes
- password: same as MySQL for simplicity
- We don’t use phpmyadmin later in this procedure, nevertheless we tested successfully also with it
- Install 3PP SW for mme and spgw
1 |
./build_mme -i |
- Do you want to install freeDiameter 1.2.0: no
- Do you want to install asn1c rev 1516 patched? <y/N>: no
- Do you want to install libgtpnl ? <y/N>: yes
- wireshark permissions: as you prefer
1 |
./build_spgw -i |
- Do you want to install libgtpnl ? <y/N>: no
Compile the EPC nodes
No difficulty found in this phase.
1 2 3 4 |
cd openair-cn; source oaienv; cd scripts ./build_hss ./build_mme ./build_spgw |
Our Network setup description
I’ve made a simple configuration for this all-in-one setup.
Each node is on a separate IP address, this address is used for all it’s interfaces. In our case of all-in-one, we take addresses on the loopback: this will be fine on all your machines.
- HSS is on localhost: 127.0.0.1
- eNB is on 127.0.0.10
- MME is on 127.0.0.20
- SPGW is on 127.0.0.30
The LTE diameter configuration is now isolated from Linux hostname.
realm for our EPC: “OpenAir5G.Alliance”, so, full distinguish names (FQDN) are: hss.OpenAir5G.Alliance, mme.OpenAir5G.Alliance
Install this configuration for eNB
In your eNB configuration file, the network is now fixed, as lo interface always exists and our computer internal addresses also:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
////////// MME parameters: mme_ip_address = ( { ipv4 = "127.0.0.20"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; } ); NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.10/8"; ENB_INTERFACE_NAME_FOR_S1U = "lo"; ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.10/8"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; |
In the eNB config file, you need also to set the MCC and MNC as per your SIM card:
tracking_area_code = “1”;
mobile_country_code = “208”;
mobile_network_code = “92”;
And obviously, your radio parameters.
Wwe tested with USRP B210 and two parameter files: 10MHz band, 20MHz band, Huawei E3272 UE, a cavity duplexer a simple antenna, about 1 meter distance UE/eNB antenna.
- openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
- openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
Install this configuration for EPC
For the EPC, we install in OAI default directory: /usr/local/etc/oai
1 2 |
sudo mkdir -p /usr/local/etc/oai sudo cp -rp opencells-mods/config_epc/* /usr/local/etc/oai |
1 2 3 |
cd openair-cn; source oaienv; cd scripts ./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter hss.OpenAir5G.Alliance ./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter mme.OpenAir5G.Alliance |
Only the SGi output to internet need to be configured.
In /usr/local/etc/oai/spgw.conf,
your should set the Ethernet interface that is connected to Internet, and,
to tell to the PGW to implement NAPT for the UE traffic
1 2 |
PGW_INTERFACE_NAME_FOR_SGI = "enp3s0"; PGW_MASQUERADE_SGI = "yes"; |
For the SIM card, you’ll have more to do:
- SIM MCC/MNC should be duplicated in a couple of files
- eNB: See above in eNB configuration chapter
- MME file: /usr/local/etc/oai/mme.conf to update
1 2 |
GUMMEI_LIST = ( MCC="208" ; MNC="92"; MME_GID="4" ; MME_CODE="1"; } ); TAI_LIST = ({MCC="208" ; MNC="92"; TAC = "1"; } ); |
-
- HSS
- Configure the password for MySQL
- in /usr/local/etc/oai/hss.conf, set password as the password you created during MySQL installation
- A HSS database in text is in: opencells-mods/opencells_db.sql
- We don’t use phpmyadmin: we load the database from a ascii file
- It is pre-configured with the
- mme id
- 10 users is network 208/92 (a French test network) are also created (don’t use 3GPP test network: 001/01: the mme fails when MCC starts by “0”)
- Each time you import this db, it erases the entire database
(example: you set mysql password to “linux”)
- Configure the password for MySQL
- HSS
1 |
./hss_db_import 127.0.0.1 root linux oai_db opencells-mods/opencells_db.sql |
-
-
-
- We use to modify the db by updating this file with regular text editor,
then we re-load the entire database,
but, if you prefer, usage of http://localhost/phpmyadmin is fine - The important values to set are:
- table pdn:
- all IMSI are listed, with the APN: these values are in UE/USIM
- table users:
- all IMSI, key (Ki) and OPc must be the same in USIM card
- Sqn increments automatically when the UE authenticate in both USIM and HSS DB: it should be set as per USIM internal incrementation
- table pdn:
- We use to modify the db by updating this file with regular text editor,
- SIM card update
- Open cells UICC and card reader will be supported
-
-
Final test and verification
open 4 terminal windows
- in each window
1 |
cd openair-cn; source oaienv; cd scripts; ./run_hss |
1 |
cd openair-cn; source oaienv; cd scripts; ./run_mme |
1 |
cd openair-cn; source oaienv; cd scripts; sudo -E ./run_spgw |
1 2 3 |
sudo bash cd openairinterface5g; source oaienv ./cmake_targets/lte_build_oai/build/lte-softmodem -O <your config file> |
Connect the UE, it should attach to network and be able to reach internet through OAI network
We re-built this procedure from scratch and tested two machines: i5-4570 and i5-6600K.
On the i5-4570, at maximum traffic, the eNB is stable on 10MHz band at full user data speed.
On the i5-6600K, we obtain stable performance at maximum traffic over 20MHz, transmission mode 1 (SISO), one single UE over-the-air 1 meter distance: