lib | ||
src | ||
support | ||
test | ||
webui | ||
acinclude.m4 | ||
configure.ac | ||
LICENSE | ||
main.c | ||
Makefile.am | ||
README.md |
Building NextEPC
This post will guide you on how to get installed with NextEPC. To date, NextEPC has been compiled and tested on GNU/Linux distributions(Debian, Ubuntu, Fedora, OpenSUSE) and FreeBSD.
We will describe this guide using Ubuntu 16.04 LTS (Xenial). You'll need to install Ubuntu if you don't have it installed already. To get the latest Ubuntu version, please visit the official Ubuntu website: https://www.ubuntu.com/download/.
Install the dependencies for building the source
The first step is to use apt-get to install all depedencies.
sudo apt-get -y install git gcc flex bison make autoconf libtool pkg-config libsctp-dev libssl-dev libgnutls-dev libgcrypt-dev libmongoc-dev libbson-dev mongodb
Retrieve the latest version of the source package
git clone https://github.com/acetcom/nextepc
Configure the build
cd nextepc
test -f configure || autoreconf -iv
CFLAGS='-O2' ./configure --prefix=`pwd`/install
Compiling
Hopefully, once you have completed the autotools configuration, you only need to run:
make -j `nproc`
Installing
Once the compilation is complete, you can install in the configured paths with:
make install
(this might require sudo depending on the configured target directories)
Web Setup
NextEPC is configured with Mongo DB, which manages Subscriber Information mainly, and Configuration File made in JSON format.
The configuration file can be modified using a general editor such as vi or emacs, but Subscriber Information can be managed properly using Mongo DB Client.
NextEPC provides Web User Interface solely designed to manage Subscriber Information in an easy way without using Mongo DB Client. Let's how to install it from now on.
Install Node.js and NPM
To get the latest Node.js and NPM version, you can visit the official Node.js website: https://nodesjs.org/en/download/.
Or, you can install Node.js and NPM on Ubuntu as follows:
sudo apt-get -y install curl
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get -y install nodejs
Install the dependencies for building the source
The first step is to use npm to install all depedencies.
cd nextepc/webui
npm install
Build Web User Interface
npm run build
Running Web Server
npm run start
Login with default account
Use Web Browser to connect it. http://localhost:3000
- Username : admin
- Password : 1423
Then, you can change your password in Account Menu.
Network Configuration
NextEPC consists of five nodes such as MME, SGW, PGW, HSS and PCRF. Basically, each node can be installed in a physically separate host or in the same host.
We will run these five nodes that make up NextEPC in a Single Host. The reason is why it is the easiest way to understand how to configure NextEPC network.
IP Configuration
In order to run MME, HSS, SGW, PGW, and PCRF on a Single Host, IP address is set by using IP aliasing.
sudo ifconfig eth1:hss 10.1.35.214/24 up
sudo ifconfig eth1:mme 10.1.35.215/24 up
sudo ifconfig eth1:sgw_s5 10.1.35.216/24 up
sudo ifconfig eth1:sgw_s11 10.1.35.217/24 up
sudo ifconfig eth1:pcrf 10.1.35.218/24 up
sudo ifconfig eth1:pgw 10.1.35.219/24 up
Setup for Data Path
Use the TUN Driver to make Data Path to be used by the PGW.
sudo ip tuntap add name pgwtun mode tun
sudo ifconfig pgwtun 45.45.0.1/16 up
Check Configuration File
A configuration file is located etc/nextepc.conf
from the installed paths. If you need to change the IP address for a particular problem, you should modify XXXX_IPV4
field in the configuration file.
For example, if you want the IP aliasing address of PGW to be 10.1.35.254, PGW.NETWORK.S5C_IPV4
and PGW_NETWORK.S5U_IPV4
field should be updated like the followings.
PGW : { FD_CONF_PATH : "/etc/freeDiameter NETWORK : { S5C_IPV4: "10.1.35.254", S5U_IPV4: "10.1.35.254" } TUNNEL: { DEV_NAME: "pgwtun" } IP_POOL : { CIDR: 45.45.45.0/24 } DNS : { PRIMARY_IPV4: "8.8.8.8", SECONDARY_IPV4: "4.4.4.4" } }
Testing Network Configuration
Once you are done, run the testing script.
./test/testepc
You can see the simulated packet through Wireshark. (FILTER : s1ap || gtpv2 || diameter)
Running NextEPC
Update GUMMEI and TAI
The followings are the GUMMEI and TAI of the MME currently set to Default. Your eNodeB will also have a PLMN ID and TAC set. Refer to these parameters to change the setting of MME or eNodeB.
GUMMEI: { PLMN_ID : { MCC : "001", MNC : "01" } MME_GID : 2, MME_CODE : 1 }, TAI: { PLMN_ID : { MCC: "001", MNC: "01", } TAC: 12345 }
For reference, MME can set several GUMMEI and TAI as JSON array notation as follows.
GUMMEI: [ { PLMN_ID : { MCC : "001", MNC : "01" } MME_GID : 2, MME_CODE : 1 }, { PLMN_ID : { MCC : "005", MNC : "05" } MME_GID : 5, MME_CODE : 6 }, ] TAI: [ { PLMN_ID : { MCC: "001", MNC: "01", } TAC: 12345 }, { PLMN_ID : { MCC: "005", MNC: "05", } TAC: 6789 } ]
Register Subscriber Information
There is only one setting for this guide. The Subscriber Information required for HSS should be registered in Mongo DB. Let's run the Web User Interface with npm run start
as mentioned eariler.
Connect http://localhost:3000 using Web Browser.
- Go to Subscriber Menu
- Click + Button to add Subscriber Information
- Fill IMSI, Security(K, OP, AMF), APN in the Form
- Click the
SAVE
Button
Running NextEPC
Generally, to use NextEPC in several hosts, you must use an independent daemon called mmed, sgwd, pgwd, hssd, and pcrfd.
However, we are preparing a more convenient daemon named epcd. It enables to service all five nodes of NextEPC.
./epcd
Turn on your eNodeB and Mobile. Check Wireshark!
Hopefully, you can see the real packet for TAU/Service Request, Dedicated Bearer, Multiple APN, and S1/X2-Handover.