Installing the NEW Core Network

There are many recent changes to openair-cn so I am updating my guide to account for this. The most We will use the latest commit of the master branch of the openair-cn repository on Github which is commit 96fb2aec8e94f6c78c1bed0b24ee82363e80e7d8 from June 12th, 2019. There is currently a wiki on the Github that I recommend you read over. My guide is based on that.


Computer Setup

Setup a computer with Ubuntu. I am currently using Ubuntu 16.04, but it shouldn’t matter for the core network since we will be putting it on a virtual box anyway. I think Ubuntu 16.04 is the better choice here since it is more compatible with the eNB and you may want to do an all-in-one setup.

Virtualmachine Setup

We will create a kvm virtual machine running Ubuntu 18.04 to actually run the core network.

Install virtual machine manager:

sudo apt install virt-manager 

Create the KVM:

sudo apt -y install uvtool  ## Fpr the cloud image of ubuntu to put into the KVM
uvt-simplestreams-libvirt sync release=bionic arch=amd64
uvt-kvm create --memory 4096 --disk 10 --cpu 2  test-install-openair-cn arch=amd64 release=bionic
uvt-kvm ssh test-install-openair-cn --insecure

Launch the “Virtual Machine Manager from the app launcher. The test-install-openair-cn should show up as an option. Start it. I like to start it, run ifconfig then ssh to the IP from the main host termial. The ssh from the host terminal is much nicer than the default terminal from the virtual machine manager.

Download the repos

Clone the openair-cn and openair-cn-cups repos:

git clone
git clone

Install Everything

I like to get the installations done first then go configure everything. All of the build scripts are in the openair-cn/scripts directory.

cd openair-cn/scripts

Install Cassandra Database for the HSS

./build_cassandra --check-installed-software --force

Install HSS

./build_hss_rel14 --check-installed-software --force
./build_hss_rel14 --clean

Install MME

./build_mme --check-installed-software --force
./build_mme --clean

Install SPGW

The SPGW is now in the openair-cn-cups repository.

cd ~/openair-cn-cups/build/scripts
./build_spgwu -I -f
./build_spgwu -c -V -b Debug -j
./build_spgwc -I -f
./build_spgwc -c -V -b Debug -j

Configure Everything

This is the fun part.

Throughout this, I find it easier to have some GUI access to the filesystem on the KVM. In Ubunutu, open the file explorer on the host machine, hit “Connect to Server” at the bottom of the left nav-bar. I type “sftp://ubuntu@” to connect to the location where most of these config files will live.

To make this easy, I also change the permisions on the folder where all the config files will be.

sudo mkdir /usr/local/etc/oai
sudo chmod 777 -R oai/

Configure Cassandra

If the ealier installation was good, you should be able to run the following command.

nodetool status

Stop Cassandra and cleanup the log files before modifying the configuration. This is blatently stolen from the official guide.

sudo service cassandra stop
sudo rm -rf /var/lib/cassandra/data/system/*
sudo rm -rf /var/lib/cassandra/commitlog/*
sudo rm -rf /var/lib/cassandra/data/system_traces/*
sudo rm -rf /var/lib/cassandra/saved_caches/*

Update /etc/cassandra/cassandra.yaml. HERE is my version. The summary of the changes is below:

  • Line 10: change cluster_name to ‘HSS Cluster’
  • Line 273: `seeds: “”
  • Line 386: listen_address: localhost
  • Line 444: rpc_address: localhost
  • Line 705: endpoint_snitch: GossipingPropertyFileSnitch

Restart Cassandra:

sudo service cassandra start

Add in your SIM Info

There are commands (./data_provisioning_users and ./data_provisioning_mme), to help with this. I am using SIM cards provided by opencells. They have a corenetwork sql file for the old hss that goes with their SIM cards. The commands below are for my SIM cards. Modify each as necessary.

cqlsh --file ../src/hss_rel14/db/oai_db.cql $Cassandra_Server_IP
./openair-cn/scripts/data_provisioning_users --apn default --apn2 internet --key 6874736969202073796d4b2079650a73 --imsi-first 208920100001100 --msisdn-first 33638020000 --mme-identity --no-of-users 20 --realm --truncate True --verbose True --cassandra-cluster $Cassandra_Server_IP

Add MME info to the database

./openair-cn/scripts/data_provisioning_mme --id 3 --mme-identity --realm --ue-reachability 1 --truncate True  --verbose True -C $Cassandra_Server_IP

Get Certificates:

cd  # Put yourself in your home dir
./openair-cn/src/hss_rel14/bin/ hss /usr/local/etc/oai                      # For HSS
sudo ./openair-cn/scripts/check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter  # For MME

Copy Files

The configurations are found in openair-cn/etc. Here, I have mine. The mme, hss_rel14, and spgw.conf files (I added a .txt after them so the broswer would display them without trying to download them) go in “/usr/local/etc/oai/.” The acl.conf and things that end in fd.conf go in “/usr/local/etc/oai/freeDiameter/.”

cp ~/openair-cn/etc/hss_rel14.conf   /usr/local/etc/oai
cp ~/openair-cn/etc/hss_rel14.json   /usr/local/etc/oai
cp ~/openair-cn/etc/mme.conf         /usr/local/etc/oai
cp ~/openair-cn-cups/etc/spgw_c.conf /usr/local/etc/oai
cp ~/openair-cn-cups/etc/spgw_u.conf /usr/local/etc/oai

cp ~/openair-cn/etc/acl.conf           /usr/local/etc/oai/freeDiameter
cp ~/openair-cn/etc/hss_rel14_fd.conf  /usr/local/etc/oai/freeDiameter
cp ~/openair-cn/etc/mme_fd.conf        /usr/local/etc/oai/freeDiameter

Fill in the config files

The official guide sets up everything via declaring variables and then performing sed commands. I prefer to do this manually. I think it is valuable to open each file, see all the paramters, and to fill them in according to your setup.

Note on the interfaces.

Nearly everything is done on virtual interfaces. The mme sets up it’s virtual interfaces when we run the command to start the MME.

The virtual interfaces for the SPGW are not set up automatically. These commands turn them on:

# Set up interfaces for SPGW-U
sudo ifconfig ens3:sxu up   # SPGW-U SXab interface
sudo ifconfig ens3:s1u up # SPGW-U S1U interface

# Set up interfaces for SPGW-C
sudo ifconfig ens3:sxc up # SPGW-C SXab interface
sudo ifconfig ens3:s5c up # SGW-C S5S8 interface
sudo ifconfig ens3:p5c up # PGW-C S5S8 interface
sudo ifconfig ens3:s11 up  # SGW-C S11 interface

Run Everything

We’ll need four separate terminals. Start with the hss. I really like to do things in screens, so I don’t need to ssh 3 seperate times.

screen -S hss # Create a named screen session for the HSS.
oai_hss -j /usr/local/etc/oai/hss_rel14.json  # This is run inside the screen session

The HSS will start, then you can exit the screen by hitting CTRL + A + D.

Then the mme:

screen -S mme # Create a named screen session for the MME.
cd ~/openair-cn/scripts
./run_mme --set-virt-if

The MME will start, then you can exit the screen by hitting CTRL + A + D.

And now the spgw:

screen -S spgw_c # Create a named screen session for the SPGW.
cd ~/openair-cn-cups/build/scripts
sudo spgwc -c /usr/local/etc/oai/spgw_c.conf

The SPGW_C will start, then you can exit the screen by hitting CTRL + A + D.

screen -S spgw_u # Create a named screen session for the SPGW.
cd ~/openair-cn-cups/build/scripts
sudo spgwu -c /usr/local/etc/oai/spgw_u.conf

The SPGW_U will start, then you can exit the screen by hitting CTRL + A + D.


You can see all your screens with

screen -ls

To attach to any and see the current console outputs,

screen -r hss # use hss, mme, spgw_u, or spgw_c


Once you are ready to quit, attach to each screen. Exit the application via CTRL + C Then kill the screen via CTRL + A then press K . Press y when it asks if you are serious about quitting.