RF simulator and OAI UE tutorial

Version 0: initial writing

This tutorial explains how to run OpenAir EPC+eNB+UE with a RF card simulator.

Starting point: the all-in-one tutorial has been run, so the system is installed and running.

Setup the UE

The all-in-one tutorial already compiled the UE, even if we didn’t use it yet.

Our patch file also contains the needed configuration files.

We need now to add a virtual SIM card in binary form to our directory:

../../nas_sim_tools/build/conf2uedata -c ~/opencells-mods/sim.conf -o .

conf2uedata command compiles a OpenAir ascii description of a SIM card into binary files that the OpenAir UE can read.

The hss dump file we provided contains the same SIM card.

Two machines: UE on a second machine

Assuming here you have a separate machine for the UE, you have to install OAI again, nevertheless the next step is easy.

On eNB machine, run the eNB as with RF board, but adding “–rfsim” and some parameters in the configuration file (see “rfsimulator” section we added in ~/opencells-mods/enb.10MHz.b200).

sudo ./lte-softmodem –rfsim -O ~/opencells-mods/enb.10MHz.b200 –log_config.hw_log_level error

“–log_config.hw_log_level error” is there to show how you can change the log level per component on the command line. This is possible for all parameters. We will use the same for UE, because the UE doesn’t have a configuration file.

Lets’ run the UE on the second machine

./lte-uesoftmodem -C 2685000000 -r 50 --rfsim --rfsimulator.serveraddr a.b.c.d

a.b.s.d is the eNB machine IP address.

The UE is now running, any IP traffic can be routed by the LTE network: UE+eNB+EPC

One machine UE + SGi interface

3GPP networks tunnel the UE IP address to the SGi.

SGi is in the PGW for regular LTE, maybe in the eNB in OpenAir noS1 mode.

The UE can’t run directly on the same “machine” because both UE and the 3GPP network border (PGW, or eNB in all cases where eNB performs local connection to internet (OAI nS1, LIPA, SIPTO, …)) will try to route the same IP address.

One solution is to run the UE in a virtual machine.

A lighter solution is to create only a network namespace for the UE (a component of a “virtual machine”)

In case of previous trails, delete the already created network namespaces

assuming enp0s31f6 is your network interface to internet, and that network 10.200.1.0 can be used freely in your intranet.

ip netns delete ueNameSpace
ip link delete v-eth1
ip netns add ueNameSpace  
ip link add v-eth1 type veth peer name v-ue1
ip link set v-ue1 netns ueNameSpace
ip addr add 10.200.1.1/24 dev v-eth1  
ip link set v-eth1 up  
iptables -t nat -A POSTROUTING -s 10.200.1.0/255.255.255.0 -o enp0s31f6 -j MASQUERADE  
iptables -A FORWARD -i enp0s31f6 -o v-eth1 -j ACCEPT  
iptables -A FORWARD -o enp0s31f6 -i v-eth1 -j ACCEPT 
ip netns exec ueNameSpace ip link set dev lo up   
ip netns exec ueNameSpace ip addr add 10.200.1.2/24 dev v-ue1  
ip netns exec ueNameSpace ip link set v-ue1 up 

Set your window in the new namespace:

ip netns exec ueNameSpace bash

Run the UE

./lte-uesoftmodem -C 2685000000 -r 50 --rfsim --rfsimulator.serveraddr 10.200.1.1

you need now to transfer all ip packets in the namespace to the IP interface created by the OpenAir UE

route add default oaitun_ue1

Now, you can run any application in the UE namespace: all IP traffic will go through the UE+eNB+EPC

ip netns exec ueNameSpace bash
ping 8.8.8.8

DNS in the UE namespace

DNS resolv is convenient to use in the UE namespace.

If your DNS configuration uses a gateway on lo (a address starting by 127.0.0 as do Ubuntu by default), resolv won’t work because you have another lo interface inside the network namespace (so the DNS query won’t reach the resolver outside of the namespace).

The simplest is to add a routable DNS server in your Linux configuration for also this namespace, example using the google DNS server:

sudo echo 'nameserver 8.8.8.8' >> /etc/resolv.conf

Leave a Reply

Your email address will not be published. Required fields are marked *