はじめに
OpenAirInterface
- OpenAirInterface Software Alianceが提供するEUTRANおよびEPCのアプリケーション
- ソース(※1)
- C言語でできている
- 機能
- EUTRAN
- eNodeB
- シミュレータ(※2)
- EPC
- MME
- HSS
- SPGW(SGW + PGW)
- EUTRAN
※1
gitlabへのリンクですが、OAIはgithubでもソースを管理しているようです。どちらがメインなのかはよくわかりません。
※2
EUTRANのシミュレータはOAI SIMと呼ばれ、[ UE ] or [ eNodeB ] or [ UE & eNodeB ]をシミュレートすることが可能です。
セットアップ(EPC)
では実際にUbuntu VM上にEPCをセットアップしてみましょう。
私はVMのホストサーバとしてHPのDL360サーバを使用していますが、ノートPCなどの汎用PCでも動く"らしい"です。
セットアップ手順はGitLabのWikiにTutorialとして記載されています。
1.VM作成
以下の通りUbuntu VMを作成します。
- ホスト名: epc01
- OS: Ubuntu 16.04
- Spec
- CPU : 2vcore
- Memory : 4GB
- Disk : 50GB
- Network
2.カーネルUpgrade
カーネルのバージョンアップが要件となっています。
# uname -a
Linux epc01 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# git clone https://gitlab.eurecom.fr/oai/linux-4.7.x.git
# cd linux-4.7.x
# dpkg -i linux-headers-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb linux-image-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb
# reboot
# uname -a
Linux epc01 4.7.7-oaiepc #1 SMP Sun Oct 16 22:45:31 CST 2016 x86_64 x86_64 x86_64 GNU/Linux
3.ホスト名設定
ホスト名を変更し、/etc/hostsを編集します。
/etc/hostsには自信とmmeとhssのエントリーを追加します。
mmeとhssのエントリーにはFQDNも登録しておきます。(ドメイン名は任意のものを付けてください。)
# cat /etc/hostname
epc01
# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 epc01
127.0.1.1 mme.epc.lte mme
127.0.1.1 hss.epc.lte hss
4.ソースファイルのダウンロード
ソースファイルをダウンロードする際にバージョンを指定します。(今回は0.5.0)
(OAIはリリース/バージョンによって挙動が変わったり、安定感に欠けているような気がします。そのため再現性確保のためにバージョンを指定していた方がよいです。)
# git clone --depth 1 -b v0.5.0 https://gitlab.eurecom.fr/oai/openair-cn.git
# cd openair-cn
5.HSSのインストール
# pwd
/root/openair-cn
# cd scripts/
# ./build_hss -i
MySQLのrootパスワードの設定を求められるので、任意のパスワードを入力します。
HSS not compiled, to compile it, re-run build_hss without -i
上記の出力が表示されるため、-iなしでもう一度ビルドを実行します。
# ./build_hss
oai_hss installed
6.MMEのインストール
# ./build_mme -i
MME not compiled, to compile it, re-run build_mme without -i option
-iなしで再び実行します。
# ./build_mme
mme installed
7.SPGWのインストール
# ./build_spgw -i
SPGW not compiled, to compile it, re-run build_spgw without -i option
# ./build_spgw
spgw installed
8.設定ファイルの配置
設定ファイルのテンプレートを/usr/local/etc/oaiへコピーします。
# cd /root/openair-cn/etc
# cp ./mme.conf /usr/local/etc/oai/
# cp ./hss.conf /usr/local/etc/oai/
# cp ./spgw.conf /usr/local/etc/oai/
# cp ./acl.conf /usr/local/etc/oai/freeDiameter/
# cp ./mme_fd.conf /usr/local/etc/oai/freeDiameter/
# cp ./hss_fd.conf /usr/local/etc/oai/freeDiameter/
9.設定ファイルの編集
① mme.conf
MMEの設定ファイルの以下の箇所を変更します。
24 REALM = "epc.lte"; # YOUR REALM HERE
153 MME_INTERFACE_NAME_FOR_S1_MME = "ens9"; # YOUR NETWORK CONFIG HERE
154 MME_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.52/24"; # YOUR NETWORK CONFIG HERE
item | value | description |
---|---|---|
REALM | epc.lte | /etc/hostsに登録したMMEのドメイン名 |
MME_INTERFACE_NAME_FOR_S1_MME | ens9 | EUTRANと接続するIFのIF名 |
MME_IPV4_ADDRESS_FOR_S1_MME | 172.16.0.52/24 | 上記IFのIPアドレス |
② spgw.conf
SPGWの設定ファイルの以下の箇所を変更します。
30 SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP = "ens9"; # STRING, interface name, YOUR NETWORK CONFIG HERE, USE "lo" if S-GW run on eNB host
31 SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP = "172.16.0.52/24"; # STRING, CIDR, YOUR NETWORK CONFIG HERE
79 PGW_INTERFACE_NAME_FOR_SGI = "ens10"; # STRING, YOUR NETWORK CONFIG HERE
80 PGW_MASQUERADE_SGI = "yes"; # STRING, {"yes", "no"}. YOUR NETWORK CONFIG HERE, will do NAT for you if you put "yes".
90 IPV4_LIST = (
91 "1.1.1.0/24" # STRING, CIDR, YOUR NETWORK CONFIG HERE.
92 );
item | value | description |
---|---|---|
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | ens9 | EUTRANと接続するIFのIF名 |
SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP | 172.16.0.52 | 上記IFのIPアドレス |
PGW_INTERFACE_NAME_FOR_SGI | ens10 | インターネットと接続するIFのIF名 |
PGW_MASQUERADE_SGI | yes | SGIと通信する際にNATするか |
IPV4_LIST | 1.1.1.0/24 | UEに割り当てるアドレスのアドレス範囲 |
③ hss.conf
HSSの設定ファイルの以下の箇所を変更します。
25 MYSQL_user = "root"; # Database server login
26 MYSQL_pass = "rootroot"; # Database server password
item | value | description |
---|---|---|
MYSQL_user | root | mysqlのrootユーザ名 |
MYSQL_pass | rootroot | mysqlのrootユーザのパスワード |
④ mme_fd.conf
MMEのDiameter設定ファイルの以下の箇所を変更します。
※fd = FreeDiamater
4 Identity = "mme.epc.lte";
5 Realm = "epc.lte";
103 ConnectPeer= "hss.epc.lte" { ConnectTo = "127.0.1.1"; No_SCTP ; No_IPv6; Prefer_TCP; No_TLS; port = 3868; realm = "epc.lte";};
item | value | description |
---|---|---|
Identity | mme.epc.lte | MMEのFQDN |
Realm | epc.lte | MMEのドメイン名 |
ConnectPeer | hss.epc.lte | 接続先HSSのFQDN |
ConnectTo | 127.0.1.1 | 接続先HSSのIPアドレス |
realm | epc.lte | 接続先HSSのドメイン名 |
⑤ hss_fd.conf
7 Identity = "hss.epc.lte";
11 Realm = "epc.lte";
item | value | description |
---|---|---|
Identity | hss.epc.lte | HSSのFQDN |
Realm | epc.lte | HSSのドメイン名 |
10.証明書のインストール
# cd /root/openair-cn/scripts
# ./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.lte.epc
# ./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ mme.lte.epc
11.ビルド
./build_hss -c
./build_mme -c
./build_spgw -c
12.MySQLへのデータ登録
HSSは自身のデータベースとしてMySQLを使用します。そのためMySQLにOAI EPC関連のデータを登録する必要があります。
# ./run_hss -i ~/openair-cn/src/oai_hss/db/oai_db.sql
<Ctrl + C>
13.MySQLのアップデート
前の手順でOAI EPC関連のデータがMySQLに登録されましたが、まだデフォルト状態のためアップデートする必要があります。
oai_dbデータベースのmmedidentityテーブルに以下のようにデータを追加します。
# mysql -u root -p
mysql> use oai_db;
mysql> insert into mmeidentity values(7, "mme.epc.lte","epc.lte", 0);
mysql> select * from mmeidentity;
+---------------+------------------------+---------------+-----------------+
| idmmeidentity | mmehost | mmerealm | UE-Reachability |
+---------------+------------------------+---------------+-----------------+
| 2 | mme2.openair4G.eur | openair4G.eur | 0 |
| 1 | nano.openair4G.eur | openair4G.eur | 0 |
| 5 | abeille.openair4G.eur | openair4G.eur | 0 |
| 4 | yang.openair4G.eur | openair4G.eur | 0 |
| 3 | mme3.openair4G.eur | openair4G.eur | 0 |
| 6 | calisson.openair4G.eur | openair4G.eur | 0 |
| 7 | mme.epc.lte | epc.lte | 0 |
+---------------+------------------------+---------------+-----------------+
14.HSSの起動
# pwd
/root/openair-cn/scripts
# ./run_hss
....................................................
Initializing s6a layer: DONE
15.MMEの起動
# ./run_hss
....................................................
000261 00030:842323 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0033 ======================================= STATISTICS ============================================
000262 00030:842336 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0034 | Current Status| Added since last display| Removed since last display |
000263 00030:842338 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0036 Connected eNBs | 0 | 0 | 0 |
000264 00030:842341 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0038 Attached UEs | 0 | 0 | 0 |
000265 00030:842343 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0040 Connected UEs | 0 | 0 | 0 |
000266 00030:842346 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 Default Bearers| 0 | 0 | 0 |
000267 00030:842348 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0044 S1-U Bearers | 0 | 0 | 0 |
上記のようにSTATISTICSテーブルが定期的に表示されるようになれば、起動成功です。
16.SPGWの起動
# ./run_spgw
....................................................
000099 00000:866227 7F49E90FF700 DEBUG UDP /src/udp/udp_primitives_server.c:0356 Initializing UDP task interface
000100 00000:867361 7F49E90FF700 DEBUG UDP /src/udp/udp_primitives_server.c:0364 Initializing UDP task interface: DONE
000101 00000:867376 7F49E90FF700 DEBUG S11 oot/openair-cn/src/s11/s11_sgw.c:0259 Initializing S11 interface
....................................................
これでMME/HSS/SPGWが起動しました。
一度ここでVMの中でOAI EPCがどのように稼働しているか整理してみました。(もしかしたら間違えてるかも)
MME/HSS/SPGW各プロセスが上記のようにループバックインターフェースで接続しています。各プロセスが独立しているので、コンテナによるマイクロサービス化もやってみたいなーとか思ったり。。。
長くなったので今回はここまでとします。
最後に
今回はOAIのEPCをセットアップしました。
次回はOAI SIMをセットアップしてOAI EPCに接続させてみます。