open5gs/docs/_docs/tutorial/01-your-first-lte.md

10 KiB

title head_inline
Your First LTE <style> .blue { color: blue; } .bold { font-weight: bold; } </style>

This post is the perfect starting point for learning to build your own LTE network. View this lession as a guided introduction -- including the installation, configuration, and best practices that will ease your learning.

Prerequisites


First, you have to prepare USRP B200/B210 to run srsENB. However, please keep in mind that you would still need a fairly high-end PC (at least dual-core i5, better quad-core i7) with USB 3.0 to attach the USRP B200/B210.

Also, for USRP B200/B210 you will need a GPS antenna for clock synchronization. It is good to have a window near your desk where you can put the small GPS patch antenna. In my case, a 1 to 2 meters antenna cable is used between desk/computer and the window.

For stable operation of USRP B200/B210, I used 10Mhz GPS-DO(GPS disciplined oscillator). Of course, a USIM card(sysmoUSIM-SJS1) was also inserted into the phone.

Overall Physical Setup


Setup your devices in the following order:

  1. GPS antenna near window
  2. GPS antenna connected to "GPS ANT" connector of GPS-DO (SMA)
  3. 10MHz output (BNC) of GPS-DO connected to 10MHz input of USRP (SMA)
  4. GPS input of USRP open/unused!
  5. 1PPS input of USRP open/unused!
  6. 4x Small Antennas connected to USRP Rx/Tx ports (RF-A/RF-B)
  7. USRP powered via power supply or over USB
  8. USRP USB port connected to your PC
  9. GPS-DO powered via power supply

Note: When the GPS-DO acquires a lock on the GPS signal, a GREEN LED is displayed. GPS takes time to function normally. You also need to wait for the RED LED(ALARM) to turn off. {: .notice--warning}

Installation


We will use Ubuntu 18.04(Bionic) installed PC. {: .blue .bold}

1. USRP Hardware Driver

Most Linux distributions provide UHD as part of their package management. On Debian and Ubuntu systems, this will install the base UHD library, all headers and build-specific files, as well as utilities:

$ sudo add-apt-repository ppa:ettusresearch/uhd
$ sudo apt update
$ sudo apt install libuhd-dev libuhd003 uhd-host

After installing, you need to download the FPGA images packages by running uhd images downloader on the command line (the actual path may differ based on your installation):

$ sudo /usr/lib/uhd/utils/uhd_images_downloader.py

2. srsENB

On Ubuntu 18.04(Bionic), one can install the required libraries with:

$ sudo apt install cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev

Download and build srsLTE:

➜  git git clone https://github.com/srsLTE/srsLTE.git
➜  git cd srsLTE
➜  srsLTE git:(master) ✗ mkdir build
➜  srsLTE git:(master)cd build
➜  build git:(master) ✗ cmake ../
➜  build git:(master) ✗ make
➜  build git:(master) ✗ make test

3. NextEPC

The NextEPC package is available on the recent versions of Ubuntu.

# Getting the authentication key
$ sudo apt install wget
$ wget https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_18.04/Release.key
$ sudo apt-key add Release.key

# Installing NextEPC
$ sudo sh -c "echo 'deb https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_18.04/ ./' > /etc/apt/sources.list.d/open5gs.list"
$ sudo apt update
$ sudo apt install nextepc

The following shows how to install the Web UI of NextEPC.

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt install nodejs
$ curl -sL http://nextepc.org/static/webui/install | sudo -E bash -

Configuration & Running


1. NextEPC

When you purchase the sysmoUSIM, you will receive the following information via e-mail.

Title : sysmocom SIM Card Details / AM93\PICK\00859

IMSI    ICCID   ACC PIN1    PUK1    PIN2    PUK2    Ki  OPC ADM1    KIC1    KID1    KIK1
...
901700000017408	8988211000000174089	0100	3623	84724035	8774	57473966	B1233463AB9BC2AD2DB1830EB6417E7B	625150E2A943E3353DD23554101CAFD4	47190711	C865CAA0A54542333929B29B116F4375	7D7F65DCD99003C0A0D5D31CA3E5253E	5B27983AF628FC3FCB36B89300012944

Here's my subscriber information from above.

IMSI : 901700000017408
K : B1233463AB9BC2AD2DB1830EB6417E7B
OPc : 625150E2A943E3353DD23554101CAFD4  

Connect to http://localhost:3000 and login with admin account.

Username : admin
Password : 1423

Then proceed as follows:

  1. Go to Subscriber Menu.
  2. Click + Button to add a new subscriber.
  3. Fill the IMSI, security context(K, OPc, AMF), and APN of the subscriber.
  4. Click SAVE Button

Modify [/etc/nextepc/mme.conf](https://github.com/{{ site.github_username }}/nextepc/blob/master/support/config/mme.conf.in) to set the S1AP/GTP-C IP address, PLMN ID, and TAC

diff -u mme.conf.old mme.conf
--- mme.conf.old	2018-04-15 18:28:31.000000000 +0900
+++ mme.conf	2018-04-15 19:53:10.000000000 +0900
@@ -14,18 +14,20 @@
 mme:
     freeDiameter: mme.conf
     s1ap:
+      addr: 127.0.1.100
     gtpc:
+      addr: 127.0.1.100
     gummei:
       plmn_id:
-        mcc: 001
-        mnc: 01
+        mcc: 901
+        mnc: 70
       mme_gid: 2
       mme_code: 1
     tai:
       plmn_id:
-        mcc: 001
-        mnc: 01
-      tac: 12345
+        mcc: 901
+        mnc: 70
+      tac: 7
     security:
         integrity_order : [ EIA1, EIA2, EIA0 ]
         ciphering_order : [ EEA0, EEA1, EEA2 ]

S1AP/GTP-C IP address, PLMN ID, TAC are changed as follows.

S1AP address : 127.0.1.100 - srsENB default value
GTP-C address : 127.0.1.100 - Use loopback interface
PLMN ID : MNC(901), MCC(70) - sysmoUSIM default value
TAC : 7 - srsENB default value

The GTP-U IP address will be set to 127.0.0.2. To do this, modify [/etc/nextepc/sgw.conf](https://github.com/{{ site.github_username }}/nextepc/blob/master/support/config/sgw.conf.in) to set the GTP-U IP address.

diff -u /etc/nextepc/sgw.conf.old /etc/nextepc/sgw.conf
--- sgw.conf.old	2018-04-15 18:30:25.000000000 +0900
+++ sgw.conf	2018-04-15 18:30:30.000000000 +0900
@@ -14,3 +14,4 @@
     gtpc:
       addr: 127.0.0.2
     gtpu:
+      addr: 127.0.0.2

After changing conf files, please restart NextEPC daemons.

$ sudo systemctl restart nextepc-mmed
$ sudo systemctl restart nextepc-sgwd

If your phone can connect to internet, you must run the following command in NextEPC-PGW installed host.

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
$ sudo iptables -t nat -A POSTROUTING -o 'interface-name' -j MASQUERADE
$ sudo iptables -I INPUT -i pgwtun -j ACCEPT

Note: In the above command, you should replace 'interface-name' with your interface name that can connect to the internet. (For example, enp0s25, wls3, and so on). {: .notice--danger}

2. srsENB

Change back to the srsENB source directory and copy the main config example as well as all additional config files for RR, SIB and DRB.

➜  srsLTE git:(master) ✗ cp srsenb/enb.conf.example srsenb/enb.conf
➜  srsLTE git:(master) ✗ cp srsenb/rr.conf.example srsenb/rr.conf
➜  srsLTE git:(master) ✗ cp srsenb/sib.conf.example srsenb/sib.conf
➜  srsLTE git:(master) ✗ cp srsenb/drb.conf.example srsenb/drb.conf

You should check your phone frequency. If your phone does not support Band-3, you should use a different DL EARFCN value.

--- enb.conf.example	2018-11-19 18:16:06.953631893 +0900
+++ enb.conf	2019-04-08 11:15:18.051261318 +0900
@@ -23,8 +23,8 @@
 cell_id = 0x01
 phy_cell_id = 1
 tac = 0x0007
-mcc = 001
-mnc = 01
+mcc = 901
+mnc = 70
 mme_addr = 127.0.1.100
 gtp_bind_addr = 127.0.1.1
 s1c_bind_addr = 127.0.1.1
@@ -66,12 +66,13 @@
 #                     Default "auto". B210 USRP: 400 us, bladeRF: 0 us.
 #####################################################################
 [rf]
-dl_earfcn = 3400
+dl_earfcn = 1600
 tx_gain = 80
 rx_gain = 40

 #device_name = auto
 #device_args = auto
+device_args="clock=external"
 #time_adv_nsamples = auto
 #burst_preamble_us = auto

PLMN ID, DL EARFCN, and Device Argument are updated as belows.

PLMN ID : MNC(901), MCC(70) sysmoUSIM default value
DL EARFCN : Band-3 - from your Phone
Device Argument : Clock source from external GPS-DO

Now, run the srsENB as follows:

➜  srsLTE git:(master)cd srsenb/
➜  srsenb git:(master) ✗ sudo ../build/srsenb/src/srsenb ./enb.conf
linux; GNU C++ version 6.2.0 20161027; Boost_106200; UHD_003.009.005-0-unknow

---  Software Radio Systems LTE eNodeB  ---

Reading configuration file ./enb.conf...
-- Loading firmware image: /usr/share/uhd/images/usrp_b200_fw.hex...
Opening USRP with args: "",master_clock_rate=30.72e6
-- Detected Device: B200
-- Loading FPGA image: /usr/share/uhd/images/usrp_b200_fpga.bin... done
-- Operating over USB 3.
-- Detecting internal GPSDO.... 'No GPSDO found'
-- Initialize CODEC control...
-- Initialize Radio control...
-- Performing register loopback test... pass
-- Performing CODEC loopback test... pass
-- Asking for clock rate 30.720000 MHz...
-- Actually got clock rate 30.720000 MHz.
-- Performing timer loopback test... pass
Setting frequency: DL=1845.0 Mhz, UL=1750.0 MHz
Setting Sampling frequency 11.52 MHz

==== eNodeB started ===
Type <t> to view trace

If you see the No GPSDO found, please exit the program with Ctrl-C. The following console output is the correct result of srsENB.

linux; GNU C++ version 6.2.0 20161027; Boost_106200; UHD_003.009.005-0-unknow

---  Software Radio Systems LTE eNodeB  ---

Reading configuration file ./enb.conf...
Opening USRP with args: "",master_clock_rate=30.72e6
-- Detected Device: B200
-- Operating over USB 3.
-- Initialize CODEC control...
-- Initialize Radio control...
-- Performing register loopback test... pass
-- Performing CODEC loopback test... pass
-- Asking for clock rate 30.720000 MHz...
-- Actually got clock rate 30.720000 MHz.
-- Performing timer loopback test... pass
Setting frequency: DL=1845.0 Mhz, UL=1750.0 MHz
Setting Sampling frequency 11.52 MHz

==== eNodeB started ===
Type <t> to view trace

Turn on your eNodeB and Phone


  • You can see actual traffic through wireshark -- srsenb.pcapng({{ site.url }}{{ site.baseurl }}/assets/pcapng/srsenb.pcapng).
  • You can view the log at /var/log/nextepc/*.log.