はじめに
Part1からPart3でOAIとNextEPCにより呼処理のシミュレーションを行いました。
今回はsrsLTEをセットアップして、呼処理シミュレーションを行います。
srsLTE
- SoftwareRadioSystemsが提供する3GPPに準拠したEUTRANとEPCのアプリケーション
- ソースコード : https://github.com/srsLTE/srsLTE
- C++ 製
- 機能
- srsUE
- UE(UEのシミュレーター)
- srsENB
- eNodeB
- srsEPC
- MME
- HSS
- SPGW
- srsUE
- Subscribe情報はCSVファイルに記述し、アプリ起動時にそれが読み込まれる(データベース非実装)
今回はsrsEPCとOAI SIM(UE/eNodeBシミュレーター)を接続して、呼処理のシミュレーションを行います。(srsUEとsrsENBは今回は利用しません。またの機会にできればと思います。)
セットアップ(srsEPC)
1.VM作成
以下の通りUbuntu VMを作成します。
- ホスト名 : sepc01
- OS : Ubuntu 16.04.5 LTS
- Spec
- CPU : 4vcore
- Memory : 4GB
- Disk : 100GB
- Network
- ens3 : 管理用インターフェース
- ens9 : 内部通信(EUTRAN-EPC)用インターフェース
- ens10 : インターネット接続用インターフェース
※OAI SIMはその2でセットアップしたものと同一のものです。
2.依存パッケージのインストール
# apt-get update
# apt-get install cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev
3.srsLTEのダウンロード/ビルド
最新リリースをダウンロードします。
# git clone https://github.com/srsLTE/srsLTE.git -b release_19_03
# cd srsLTE
# mkdir build
# cd build/
# cmake ../
# make
4.srsLTEのインストール
# make install
./srslte_install_configs.sh user
インストールスクリプトの引数にuserを指定すると、<実行ユーザのホームディレクトリ>/.config/srslteに設定ファイルなどがインストールされます。
※rootユーザで操作しているため、/root配下にディレクトリができます。
5.srsEPCの設定
以下の通り/root/.config/srslte/epc.confを編集します
左の数字は行番号です。(vimでset numberを有効化)
23 [mme]
24 mme_code = 0x1a
25 mme_group = 0x0001
26 tac = 0x0001
27 mcc = 208
28 mnc = 93
29 mme_bind_addr = 172.16.0.56
30 apn = srsapn.ipv4
31 dns_addr = 8.8.8.8
32 encryption_algo = EEA0
33 integrity_algo = EIA1
34 paging_timer = 2
55 [spgw]
56 gtpu_bind_addr = 172.16.0.56
57 sgi_if_addr = 77.77.0.1
58 sgi_if_name = srs_spgw_sgi
59 max_paging_queue = 100
MMEの設定(mcc,mncなど)はOAI SIMに合わせます。
29行目のmme_bind_addrがMMEのS1-MME側IF、56行目のgtpu_bind_addrがsgwのS1-U側IFの設定となります。
VMのIF設定に合わせて、IFアドレスを設定します。
また57行目のsgi_if_addrとVMのIFが同じセグメントになりそうなので、デフォルトから変更しています。
sgi_if_addrの次のアドレスからUEに払い出されるようです。
6.Subscriberの登録
epc.confと同一ディレクトリにあるuser_db.csvにSubscriber情報を登録します。
OAI SIMに合わせて以下のエントリーを登録します。
ue1,mil,208930100001111,8baf473f2f8fd09487cccbd7097c6862,op,1006020f0a478bf6b699f15c062e42b3,8000,0000000012b8,9,dynamic
7.NATの有効化
このままだとUE(OAI SIM)がSGi(インターネット)と接続する際にNATされません。そのためインターネットに接続しているIFにてNATを有効化する必要があります。
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
iptables -t nat -A POSTROUTING -o ens10 -j MASQUERADE
iptables -I INPUT -i pgwtun -j ACCEPT
8.起動
# srsepc epc.conf
--- Software Radio Systems EPC ---
Reading configuration file epc.conf...
HSS Initialized.
MME S11 Initialized
MME GTP-C Initialized
MME Initialized. MCC: 0xf208, MNC: 0xff93
SPGW GTP-U Initialized.
SPGW S11 Initialized.
SP-GW Initialized.
OAI EPC、NextEPCとの大きな違いとして、すべての機能が一つのプロセスに集約されています。
機能毎にプロセスが別れていないとコンテナ化してもあまり意味はなさそうです。
OAI SIMとの接続
1. OAI SIMの設定変更
srsEPCに登録したSubscriber情報はOAI SIMに合わせているので、インターフェース設定(141行目)のみ変更します。
# vi /root/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf
141 mme_ip_address = ( { ipv4 = "172.16.0.56";
142 ipv6 = "192:168:30::17";
143 active = "yes";
144 preference = "ipv4";
145 }
146 );
148 NETWORK_INTERFACES :
149 {
150 ENB_INTERFACE_NAME_FOR_S1_MME = "ens9";
151 ENB_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.115/24";
152
153 ENB_INTERFACE_NAME_FOR_S1U = "ens9";
154 ENB_IPV4_ADDRESS_FOR_S1U = "172.16.0.115/24";
155 ENB_PORT_FOR_S1U = 2152; # Spec 2152
2.OAI SIMの起動
# cd /root/openairinterface5g/cmake_targets/tools
# ./run_enb_ue_virt_s1
起動に成功したらsrsEPC VMにPGW(SPGW?)の仮想IFが作成されていることが確認できます。
srs_spgw_sgi Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:77.77.0.1 P-t-P:77.77.0.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:336 (336.0 B) TX bytes:168 (168.0 B)
3. 接続確認
接続が成功したら以下の出力が表示されます。
S1 Setup Request - eNB Name: eNB_Eurecom_LTEBox, eNB id: 0xe00
S1 Setup Request - MCC:208, MNC:93, PLMN: 194617
S1 Setup Request - TAC 1, B-PLMN 0
S1 Setup Request - Paging DRX 2
Sending S1 Setup Response
Initial UE message: LIBLTE_MME_MSG_TYPE_ATTACH_REQUEST
Received Initial UE message -- Attach Request
Attach request -- IMSI Style Attach request
Attach request -- IMSI: 208930100001111
Attach request -- eNB-UE S1AP Id: 6535084
Attach request -- Attach type: 1
Attach Request -- UE Network Capabilities EEA: 10000000
Attach Request -- UE Network Capabilities EIA: 00100000
Attach Request -- MS Network Capabilities Present: false
PDN Connectivity Request -- EPS Bearer Identity requested: 0
PDN Connectivity Request -- Procedure Transaction Id: 1
PDN Connectivity Request -- ESM Information Transfer requested: false
Downlink NAS: Sending Authentication Request
UL NAS: Received Authentication Response
Authentication Response -- IMSI 208930100001111
UE Authentication Accepted.
Generating KeNB with UL NAS COUNT: 0
Downlink NAS: Sending NAS Security Mode Command.
UL NAS: Received Security Mode Complete
Security Mode Command Complete -- IMSI: 208930100001111
Getting subscription information -- QCI 9
Sending Create Session Request.
Creating Session Response -- IMSI: 208930100001111
Creating Session Response -- MME control TEID: 1
Received GTP-C PDU. Message type: GTPC_MSG_TYPE_CREATE_SESSION_REQUEST
SPGW: Allocated Ctrl TEID 1
SPGW: Allocated User TEID 1
SPGW: Allocate UE IP 77.77.0.2
UEに77.77.0.2のIPアドレスが払い出されていることがわかります。
OAI SIMのIFを確認するとoip1が作成され、77.77.0.2が付与されています。
# ifconfig oip1
oip1 Link encap:AMPR NET/ROM HWaddr
inet addr:77.77.0.2 Bcast:77.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:168 (168.0 B) TX bytes:336 (336.0 B)
4. インターネットへの接続
このoip1 IFからPINGを8.8.8.8(Google Public DNSサーバ)に送信して、インターネットとの接続を確認します。ただ今のままではインターネットへのルーティング情報がないため、デフォルトゲートウェイをPGW(SPGW?)に向ける必要があります。
以下の通り、srsEPCのPGW(SPGW?)にデフォルトゲートウェイを向けるようにします。
# route add default gw 77.77.0.1
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 77.77.0.1 0.0.0.0 UG 0 0 0 oip1
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
45.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 oip1
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 em49
これで準備が整いました。それではPINGを送信します。
# ping 8.8.8.8 -I oip1
PING 8.8.8.8 (8.8.8.8) from 77.77.0.2 oip1: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=305 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=49 time=205 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=49 time=166 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=49 time=163 ms
oip1 IF経由でインターネットと接続することができました!
パケットキャプチャを確認してみると、GTPトンネルを通りインターネットと接続できていることがわかります。
最後に
これでsrsEPCをセットアップしてOAI SIMと接続することができました。
srsEPCはインストール/設定はNextEPCと同じくらいよういに行うことができますが、機能ごとにプロセスがわかれていないという点でコンテナなどによる運用が難しいという欠点があります。
最後にまとめとしてOAI/NextEPC/srsLTEの比較について記事にできればと思います。