前回でNextEPCの設定が完了しました。
今回は、UE情報の登録を行った後、NextEPCを起動します。
再々掲ですが、参考にしたURLは以下のとおりです。
構築環境
前々回同様、構築環境は、以下の図のとおりです。
EPCの構築対象マシンは、USBのEtherデバイスを2つ増設したThinkPad T430で、OSはUbuntu 16.04 LTSです。
eNodeBやUEについては、既存システムのノードをそのまま使用するため、手は入れません。
UE情報の登録
UE情報の登録は、Web UIを介して行います。
nextepcのビルドディレクトリ配下で以下のコマンドを実行し、WebUIを起動します。
$ cd webapi $ npm run dev
Webブラウザを起動し、URL欄に以下の内容を指定します。
- http://localhost:3000/
- http://<構築対象マシンのIPアドレス>:3000/
他のマシンから行う場合は、以下の内容を指定します。
以下のような画面が表示されますので、Usernameにadmin、Passwordに1423を指定してください。
ログインすると、以下のような画面が表示されます。
左のパネルのSubscriberを選択し、画面右下の”+”を押下すると、以下のような加入者情報の登録画面が表示されます。
UEが使用するSIMの情報に合わせて、IMSI、Subscriber Key、Authentication Management Field、Operator Keyを入力してください。
使用するSIMによっては、Subscriber KeyやOperator Keyが設定されていない場合があります。しかし、Web UI上ではこれらの値を入力しなければ登録することができません。
その場合、一旦何らかの値(例えば、半角空白)などで登録し、後述する登録情報の更新方法を参照し、変更してください。
その後、画面の下部に表示されている”Save”を押下すると、入力した情報がデータベースに登録されます。
登録情報の更新方法
Subscriber KeyやOperator Keyを値なし(null)に設定する場合、Web UI上では値なしで登録できないため、登録情報が保持されているデータベースを直接変更する必要があります。
以下の操作は、予期せぬ動作を引き起こす可能性がありますので、注意して行ってください。
構築対象マシン上で、以下のコマンドを実行します。
$ mongo > show dbs; admin (empty) local 0.078GB nextepc 0.078GB > use nextepc switched to db nextepc
登録情報の参照
上記操作を行ったコンソール上で以下のコマンドを実行すると、登録されている情報が表示されます。
> db.subscribers.find() { "_id" : ObjectId("5c9b2e623d13791d68fb3cf3"), "imsi" : "001010123456000", "pdn" : [ { "apn" : "Internet", "_id" : ObjectId("5c9b2e623d13791d68fb3cf4"), "pcc_rule" : [ ], "qos" : { "qci" : 9, "arp" : { "priority_level" : 8, "pre_emption_vulnerability" : 1, "pre_emption_capability" : 1 } }, "type" : 2 } ], "ambr" : { "downlink" : NumberLong(1024000), "uplink" : NumberLong(1024000) }, "subscribed_rau_tau_timer" : 12, "network_access_mode" : 2, "subscriber_status" : 0, "access_restriction_data" : 32, "security" : { "k" : " ", "amf" : "8000", "op" : null, "opc" : " " }, "__v" : 0 }
登録情報の更新
登録されている情報のSubscriber KeyやOperator Keyをなし(null)に設定する場合、以下のようなコマンドを実行します。
imsiに指定する値は、更新対象の情報によって異なりますので、注意してください。
> db.subscribers.update( { "imsi":"001010123456000"}, { $set: { "security" : { "k" : null, "amf" : "8000", "op" : null, "opc" : null } }})
imsiには対象のレコードを一意に特定するIMSIを指定してください。
実行後、更新実行時と同じIMSIの値を指定して、以下のコマンドを実行してください。
> db.subscribers.find( { "imsi":"001010123456000"}) { "_id" : ObjectId("5c9b2e623d13791d68fb3cf3"), "imsi" : "001010123456000", "pdn" : [ { "apn" : "Internet", "_id" : ObjectId("5c9b2e623d13791d68fb3cf4"), "pcc_rule" : [ ], "qos" : { "qci" : 9, "arp" : { "priority_level" : 8, "pre_emption_vulnerability" : 1, "pre_emption_capability" : 1 } }, "type" : 2 } ], "ambr" : { "downlink" : NumberLong(1024000), "uplink" : NumberLong(1024000) }, "subscribed_rau_tau_timer" : 12, "network_access_mode" : 2, "subscriber_status" : 0, "access_restriction_data" : 32, "security" : { "k" : null, "amf" : "8000", "op" : null, "opc" : null }, "__v" : 0 }
更新後は再度情報を参照し、意図通りに更新されていることを確認してください。
NextEPCの起動
nextepcのビルドディレクトリ配下で以下のコマンドを実行し、NextEPCを起動します。起動すると、以下のようなメッセージがコンソール上に出力されます。
$ ./nextepc-epcd NextEPC daemon v0.3.10 - Apr 5 2019 15:07:22 [04/05 16:09:19.832] WARN: pid file /home/bit/nextepc/install/var/run/nextepc-epcd/pid overwritten -- Unclean shutdown of previous NextEPC run? (application.c:113) PID[17128] : '/home/bit/nextepc/install/var/run/nextepc-epcd/pid' File Logging : '/home/bit/nextepc/install/var/log/nextepc/nextepc.log' MongoDB URI : 'mongodb://localhost/nextepc' Configuration : '/home/bit/nextepc/install/etc/nextepc/nextepc.conf' [04/05 16:09:19.836] PCRF try to initialize [04/05 16:09:19.960] PCRF initialize...done [04/05 16:09:19.961] PGW try to initialize [04/05 16:09:20.194] gtp_server() [127.0.0.3]:2123 [04/05 16:09:20.194] PGW initialize...done [04/05 16:09:20.194] gtp_server() [127.0.0.3]:2152 [04/05 16:09:20.195] INFO: CONNECTED TO 'pgw.localdomain' (TCP,soc#7): (fd_logger.c:93) [04/05 16:09:20.195] SGW try to initialize [04/05 16:09:20.196] INFO: CONNECTED TO 'pcrf.localdomain' (TCP,soc#10): (fd_logger.c:93) [04/05 16:09:20.202] SGW initialize...done [04/05 16:09:20.202] gtp_server() [127.0.0.2]:2123 [04/05 16:09:20.202] gtp_server() [192.168.4.80]:2152 [04/05 16:09:20.203] HSS try to initialize [04/05 16:09:20.228] HSS initialize...done [04/05 16:09:20.228] MME try to initialize [04/05 16:09:20.483] gtp_server() [192.168.1.130]:2123 [04/05 16:09:20.483] MME initialize...done [04/05 16:09:20.483] gtp_server() [192.168.4.80]:2123 [04/05 16:09:20.483] INFO: NextEPC daemon start (main.c:157) [04/05 16:09:20.483] gtp_server() [192.168.60.159]:2123 [04/05 16:09:20.483] gtp_client() [127.0.0.2]:2123 [04/05 16:09:20.483] INFO: CONNECTED TO 'mme.localdomain' (TCP,soc#7): (fd_logger.c:93) [04/05 16:09:20.483] s1ap_server() [192.168.4.80]:36412 [04/05 16:09:20.483] INFO: CONNECTED TO 'hss.localdomain' (TCP,soc#10): (fd_logger.c:93)
この状態で、既存システムのeNodeBとUEを起動させ、接続が成功するとUEがインターネットへ接続できるようになります。
以下に構築対象マシン上でダンプしたパケットの内容を、いくつか例として示します。
S1SetupRequest
DIAMETER
GTPv2
これで、既存システムのEPCをNextEPCに置き換えることができました。OpenEPCの実装に合わせてNextEPCを改修をするといったこともことなく、スムーズに移行できたことを考えると、各ノード間のインタフェースを厳密に定義し、それに従って実装することの重要性を再認識させられました。
もし、自分でEPCを構築してみたいと思った時には、是非NextEPCを試してみてください。
以上。