OAI(Open Air Interface)のL2 nFAPIシミュレータとFree5GCによる5GCoreの構築方法を記載します。
UEはOAIのLTE-UESoftModem、eNBはOAIのLTE-SoftModem、残り*1はFree5GCにて構築します。
構成としては、NSA(Non Stand Alone)型Option5のような構成となります。
以前に紹介した記事のNSA型5GC版と考えて頂ければ、とっつきやすいかなと思います。
なお、以前の記事では、S5/S8区間で分離させましたが、今回は最小構成で構築する方法を記載した後、分離に関しては、別な機会に記載したいと考えています。*2
1.環境
1-1.VMWare
筐体 : 自作PC(Win10pro) CPU : Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz VMWare : VMware(R) Workstation 15 Pro 15.1.0 build-13591040 OS : Ubuntu 18.04.3 LTS Kernel : 4.15.0-72-generic
1-2.全体構成
1-3 .全体の流れ ~概要~
- 事前準備
- Free5GC設定
- OAI L2nFAPI設定
- 起動と動作確認
2.事前準備
ntp時刻同期、ホスト名設定などは省略します。
2-1.u18c131:L2nFAPIの事前設定
ens33は、マネジメントNW(aptやgitで使う)なのでインターネットに出られればOKです。
vi /etc/systemd/network/01-ens33.network [Match] Name=ens33 [Network] Address=192.168.11.131/24 Gateway=192.168.11.1 DNS=192.168.11.1 vi /etc/systemd/network/03-ens35.network [Match] Name=ens35 [Network] Address=10.20.0.131/24 vi /etc/hosts 127.0.0.1 localhost.localdomain localhost u18c131 127.0.0.2 u18c131
2-2.u18c132:Free5GCの事前設定
こちらもens33は、同様です。
vi /etc/systemd/network/01-ens33.network [Match] Name=ens33 [Network] Address=192.168.11.132/24 Gateway=192.168.11.1 DNS=192.168.11.1 vi /etc/systemd/network/02-ens34.network [Match] Name=ens34 [Network] Address=10.10.0.136/24 vi /etc/systemd/network/03-ens35.network [Match] Name=ens35 [Network] Address=10.20.0.132/24 Address=10.20.0.133/24 Address=10.20.0.134/24 Address=10.20.0.135/24 Address=10.20.0.136/24
3.Free5GC設定
3-1.MongoDBのインストール
apt-get update && \ apt-get -y install mongodb wget git && \ systemctl start mongodb && \ systemctl enable mongodb systemctl status mongodb
3-2.Golangと各種パッケージのインストール
wget -q https://storage.googleapis.com/golang/getgo/installer_linux && \ chmod +x installer_linux && \ ./installer_linux && \ source ~/.bash_profile go get -u -v "github.com/gorilla/mux" && \ go get -u -v "golang.org/x/net/http2" && \ go get -u -v "golang.org/x/sys/unix"
3-3.uptunの設定
sh -c "cat << EOF > /etc/systemd/network/99-free5gc.netdev [NetDev] Name=uptun Kind=tun EOF" systemctl enable systemd-networkd && \ systemctl restart systemd-networkd vi /etc/network/interfaces auto uptun iface uptun inet static address 25.0.0.1 netmask 255.255.0.0
ifup/downコマンドなどが必要であれば、事前にインストールしてください。*4
apt -y install ifupdown2
3-3.依存関係パッケージのインストール
apt-get -y install autoconf libtool gcc pkg-config git flex bison libsctp-dev \ libgnutls28-dev libgcrypt-dev libssl-dev libidn11-dev libmongoc-dev libbson-dev libyaml-dev
3-4.Free5GCのビルド
cd ~/ && \ git clone https://bitbucket.org/nctu_5g/free5gc-stage-1.git && \ cd free5gc-stage-1 && \ autoreconf -iv && \ ./configure --prefix=`pwd`/install && \ make -j `nproc` && \ make install
3-5.IP forwarding設定
sh -c "cat << EOF > /etc/init.d/ngc-network-setup #!/bin/sh ### BEGIN INIT INFO # Provides: ngc-network-setup # Required-Start: networkd # Required-Stop: networkd # Default-Start: networkd # Default-Stop: networkd # Short-Description: # Description: # ### END INIT INFO sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' iptables -I INPUT -i uptun -j ACCEPT EOF" chmod 755 /etc/init.d/ngc-network-setup && \ /etc/init.d/ngc-network-setup ln -s /etc/init.d/ngc-network-setup /etc/rc3.d/S99ngc-network-setup && \ ln -s /etc/init.d/ngc-network-setup /etc/rc4.d/S99ngc-network-setup && \ ln -s /etc/init.d/ngc-network-setup /etc/rc5.d/S99ngc-network-setup
<補足>
公式手順ではMasqueradeの設定も入っていますが、私の経験上、N6(SGi)区間にはNATやDPI装置などが配置されており、UPF(PGW)でPATすることは皆無だったので削除しています。
これに伴い、L3SW上では以下のような戻りのルートを忘れずに設定しておいてください。
ip route 25.0.0.0 255.255.0.0 10.10.0.136
3-6.WebUIのインストール
apt-get -y install curl curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - apt-get -y install nodejs cd /root/free5gc-stage-1/webui && \ npm install #サービス起動 npm run dev #アクセス先URL http://192.168.11.132:3000/
インストール完了後、以下のページが表示されればOKです。
Username/Passwdは以下の通り。
admin/1423
3-6.SIM情報の登録
上記のアクセス先URLから以下のSIM情報を登録します。*5
IMSI | 208930100001111 |
Subscriber Key(Ki) | 8baf473f2f8fd09487cccbd7097c6862 |
Operator Key(OPc) | e734f8734007d6c5ce7a0508809e7e9c |
USIM Type | OPc |
APN | internet |
MSISDN | 33611123456 |
IMSI | 208930100001112 |
Subscriber Key(Ki) | 8baf473f2f8fd09487cccbd7097c6862 |
Operator Key(OPc) | e734f8734007d6c5ce7a0508809e7e9c |
USIM Type | OPc |
APN | internet |
MSISDN | 33611123457 |
IMSI, Subscriber Key(Ki), Operator Key(OPc), USIM Typeが必須項目となります。
APNは任意で構いませんが、この後のfree5gc.conf設定で使用します。
MSISDNは、ここでは設定不要ですが、OAISIMのビルド前に必要となりますので、念のため記載しています。
3-7.nextepc.conf設定
元からコメントされていた箇所は全て削除しています。
ens34, ens35のIP設定が同一環境であれば以下のconfをそのまま貼り付けでOKです。
vi /root/free5gc-stage-1/install/etc/free5gc/free5gc.conf db_uri: mongodb://localhost/free5gc logger: file: /root/free5gc-stage-1/install/var/log/free5gc/free5gc.log trace: app: 1 s1ap: 1 nas: 1 diameter: 1 gtp: 1 pfcp: 1 sbi: 1 parameter: no_ipv6: true amf: freeDiameter: amf.conf s1ap: addr: 10.20.0.132 gummei: plmn_id: mcc: 208 mnc: 93 mme_gid: 1 mme_code: 1 tai: plmn_id: mcc: 208 mnc: 93 tac: 1 security: integrity_order : [ EIA1, EIA2, EIA0 ] ciphering_order : [ EEA0, EEA1, EEA2 ] network_name: full: free5GC hss: freeDiameter: hss.conf pcrf: freeDiameter: pcrf.conf smf: freeDiameter: smf.conf pfcp: - addr: 10.20.0.134 # - addr: ::1 upf: - addr: 10.20.0.136 http: addr: 10.20.0.134 port: 8080 ue_pool: - addr: 25.0.0.1/16 apn: internet # - addr: cafe::1/64 dns: - 8.8.8.8 # - 8.8.4.4 # - 2001:4860:4860::8888 # - 2001:4860:4860::8844 upf: pfcp: addr: - 10.20.0.136 # - ::1 gtpu: - addr: 10.20.0.132 # - addr: ::1 ue_pool: - addr: 25.0.0.1/16 # - addr: cafe::1/64 dns: - 8.8.8.8 # - 8.8.4.4 # - 2001:4860:4860::8888 # - 2001:4860:4860::8844
3-8.freeDiameter関連confの設定
各種設定ファイルは以下となります。
vi /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/amf.conf vi /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/hss.conf vi /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/smf.conf vi /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/pcrf.conf
AMF→MME、SMF→SGWと読み換えれば基本的にNextEPCと変わりませんので、変更箇所がさほど気にならなければ以下の通り流し込んでください。
#AMFの設定 sed -i -e /^ListenOn/s/127.0.0.2/10.20.0.132/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/amf.conf sed -i -e /^ConnectPeer/s/127.0.0.4/10.20.0.133/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/amf.conf #HSSの設定 sed -i -e /^ListenOn/s/127.0.0.4/10.20.0.133/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/hss.conf sed -i -e /^ConnectPeer/s/127.0.0.2/10.20.0.132/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/hss.conf #SMFの設定 sed -i -e /^ListenOn/s/127.0.0.3/10.20.0.134/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/smf.conf sed -i -e /^ConnectPeer/s/127.0.0.5/10.20.0.135/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/smf.conf #PCRFの設定 sed -i -e /^ListenOn/s/127.0.0.5/10.20.0.135/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/pcrf.conf sed -i -e /^ConnectPeer/s/127.0.0.3/10.20.0.134/g \ /root/free5gc-stage-1/install/etc/free5gc/freeDiameter/pcrf.conf
3-9.Free5GCの起動
「-d」オプションはDaemonとして起動させます。
cd ~/free5gc-stage-1 && \ ./free5gc-ngcd -d
出力例
以下のようにDaemonが起動していればOKです。
root@u18c132:~/free5gc-stage-1# ./free5gc-ngcd -d free5GC daemon v1.0.0 - Jan 3 2020 05:14:03 PID[1803] : '/root/free5gc-stage-1/install/var/run/free5gc-ngcd/pid' File Logging : '/root/free5gc-stage-1/install/var/log/free5gc/free5gc.log' MongoDB URI : 'mongodb://localhost/free5gc' Configuration : '/root/free5gc-stage-1/install/etc/free5gc/free5gc.conf' [01/03 10:56:58.093] PCRF try to initialize root@u18c132:~/free5gc-stage-1# [01/03 10:56:58.140] PCRF initialize...done [01/03 10:56:58.140] UPF try to initialize [01/03 10:56:58.159] UPF initialize...done [01/03 10:56:58.161] SMF try to initialize [01/03 10:56:58.199] SMF initialize...done [01/03 10:56:58.200] pfcp_server() [10.20.0.134]:8805 [01/03 10:56:58.200] pfcp_connect() [10.20.0.136]:8805 [01/03 10:56:58.200] pfcp_xact_local_create 1 not freed in pfcp_xact_pool[64] of PFCP Transaction [01/03 10:56:58.202] HSS try to initialize [01/03 10:56:58.214] INFO: CONNECTED TO 'smf.localdomain' (TCP,soc#10): (fd_logger.c:93) [01/03 10:56:58.215] INFO: CONNECTED TO 'pcrf.localdomain' (TCP,soc#16): (fd_logger.c:93) [01/03 10:56:58.220] HSS initialize...done [01/03 10:56:58.220] AMF try to initialize [01/03 10:56:58.369] AMF initialize...done [01/03 10:56:58.369] INFO: free5GC daemon start (main.c:157) [01/03 10:56:58.371] INFO: CONNECTED TO 'amf.localdomain' (TCP,soc#8): (fd_logger.c:93) [01/03 10:56:58.371] INFO: CONNECTED TO 'hss.localdomain' (TCP,soc#11): (fd_logger.c:93) [01/03 10:56:58.376] s1ap_server() [10.20.0.132]:36412
終了させるときは、ps -auxなどで確認の上*6、kill -9などで停止させてください。
個別に起動させたい場合は以下の通りです。
cd ~/free5gc-stage-1 ./free5gc-upfd -d ./nextepc-pcrfd -d ./free5gc-smfd -d ./free5gc-amfd -d ./nextepc-hssd -d
4.OAI L2nFAPI設定
4-1.git リポジトリの取得
UE用とeNB用でディレクトリを別けます。
git clone https://gitlab.eurecom.fr/oai/openairinterface5g/ enb_folder && \ cd enb_folder && \ git checkout -f v1.0.3 && \ cd .. && \ cp -Rf enb_folder ue_folder
<補足>
v1.1.x以降のブランチに格納されているbuild_oai では、-t ETHERNET オプションに対応していないため、v1.0系の最新版としています。
4-2.SIM情報の設定
変更箇所のみ抜粋。UEを2台アタッチさせられるように1台追加しています。
cd ~/ue_folder vi openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf #画面下の方にスクロール UE0: { USER: { IMEI="356113022094149"; MANUFACTURER="EURECOM"; MODEL="LTE Android PC"; PIN="0000"; }; SIM: { MSIN="0100001111"; USIM_API_K="8baf473f2f8fd09487cccbd7097c6862"; OPC="e734f8734007d6c5ce7a0508809e7e9c"; MSISDN="33611123456"; }; # Home PLMN Selector with Access Technology HPLMN= "20893"; # User controlled PLMN Selector with Access Technology UCPLMN_LIST = (); # Operator PLMN List OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028"); # Operator controlled PLMN Selector with Access Technology OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204"); # Forbidden plmns FPLMN_LIST = (); # List of Equivalent HPLMNs #TODO: UE does not connect if set, to be fixed in the UE # EHPLMN_LIST= ("20811", "20813"); EHPLMN_LIST= (); }; #以下を追加 UE1: { USER: { IMEI="356113022094150"; MANUFACTURER="EURECOM"; MODEL="LTE Android PC"; PIN="0000"; }; SIM: { MSIN="0100001112"; USIM_API_K="8baf473f2f8fd09487cccbd7097c6862"; OPC="e734f8734007d6c5ce7a0508809e7e9c"; MSISDN="33611123457"; }; # Home PLMN Selector with Access Technology HPLMN= "20893"; # User controlled PLMN Selector with Access Technology UCPLMN_LIST = (); # Operator PLMN List OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028"); # Operator controlled PLMN Selector with Access Technology OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204"); # Forbidden plmns FPLMN_LIST = (); # List of Equivalent HPLMNs #TODO: UE does not connect if set, to be fixed in the UE # EHPLMN_LIST= ("20811", "20813"); EHPLMN_LIST= (); };
4-3.eNBの設定
cd ~/enb_folder vi ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf #画面下の方までスクロール ////////// MME parameters: mme_ip_address = ( { ipv4 = "10.20.0.132"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; } ); enable_measurement_reports = "no"; ///X2 enable_x2 = "no"; t_reloc_prep = 1000; /* unit: millisecond */ tx2_reloc_overall = 2000; /* unit: millisecond */ NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "ens35"; ENB_IPV4_ADDRESS_FOR_S1_MME = "10.20.0.131/24"; ENB_INTERFACE_NAME_FOR_S1U = "ens35"; ENB_IPV4_ADDRESS_FOR_S1U = "10.20.0.131/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 ENB_IPV4_ADDRESS_FOR_X2C = "10.20.0.131/24"; ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; } ); MACRLCs = ( { num_cc = 1; local_s_if_name = "lo"; remote_s_address = "127.0.0.2"; local_s_address = "127.0.0.1"; local_s_portc = 50001; remote_s_portc = 50000; local_s_portd = 50011; remote_s_portd = 50010; tr_s_preference = "nfapi"; tr_n_preference = "local_RRC"; } );
4-4.UEの設定
cd ~/ue_folder vi ci-scripts/conf_files/ue.nfapi.conf L1s = ( { num_cc = 1; tr_n_preference = "nfapi"; local_n_if_name = "lo"; remote_n_address = "127.0.0.1"; local_n_address = "127.0.0.2"; local_n_portc = 50000; remote_n_portc = 50001; local_n_portd = 50010; remote_n_portd = 50011; } );
<補足>
Loアドレスを使用している箇所は同一仮想マシンのためデフォルトのconfファイルから変更不要ですが、公式手順の図に合わせて、eNB:127.0.0.1、UE:127.0.0.2としています。*7
なお、eNBとUEを別筐体で稼働させる場合には、例として以下のように設定します。
#eNB:10.20.0.131 ens35 #UE :10.20.0.130 ens35 #eNBの設定 MACRLCs = ( { num_cc = 1; local_s_if_name = "ens35"; remote_s_address = "10.20.0.130"; local_s_address = "10.20.0.131"; local_s_portc = 50001; remote_s_portc = 50000; local_s_portd = 50011; remote_s_portd = 50010; tr_s_preference = "nfapi"; tr_n_preference = "local_RRC"; } ); #UEの設定 L1s = ( { num_cc = 1; tr_n_preference = "nfapi"; local_n_if_name = "ens35"; remote_n_address = "10.20.0.131"; local_n_address = "10.20.0.130"; local_n_portc = 50000; remote_n_portc = 50001; local_n_portd = 50010; remote_n_portd = 50011; } );
4-5.eNBのビルド
初回は依存関係を解決するため、-I オプションを追加しています。
なお、-h にて全てのオプションが確認できます。
cd ~/enb_folder && \ source oaienv && \ cd cmake_targets && \ ./build_oai --eNB -t ETHERNET -c -I
出力例
いくつかWarningが出力されますが、以下のような出力であれば正常にビルドが完了しています。
~~~一部省略~~~
WARNING: Parameterized type X2AP-PROTOCOL-IES expected for X2AP-PROTOCOL-IES at line 4997 in /root/enb_folder/openair2/X2AP/MESSAGES/ASN1/R14/x2ap-14.6.0.asn1
DEADLINE_SCHEDULER flag is False
CPU_Affinity flag is False
flexran.proto: warning: Import control_delegation.proto but not used.
-- Found Yaml: /usr/lib/x86_64-linux-gnu/libyaml.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for one of the modules 'libxml-2.0'
-- Checking for one of the modules 'libxslt'
-- Checking for one of the modules 'openssl'
-- Checking for one of the modules 'libconfig'
-- Checking for one of the modules 'libcrypto'
-- Checking for one of the modules 'openpgm-5.1;openpgm-5.2'
-- Checking for one of the modules 'nettle'
NETTLE VERSION_INSTALLED = 3.4
NETTLE_VERSION_MAJOR = 3
NETTLE_VERSION_MINOR = 4
-- Checking for one of the modules 'xpm'
-- Configuring done
-- Generating done
-- Build files have been written to: /root/enb_folder/cmake_targets/lte_build_oai/build
Compiling lte-softmodem
Log file for compilation has been written to: /root/enb_folder/cmake_targets/log/lte-softmodem.Rel14.txt
lte-softmodem compiled
WARNING: 9 warnings. See /root/enb_folder/cmake_targets/log/lte-softmodem.Rel14.txt
Log file for compilation has been written to: /root/enb_folder/cmake_targets/log/params_libconfig.Rel14.txt
params_libconfig compiled
Log file for compilation has been written to: /root/enb_folder/cmake_targets/log/coding.Rel14.txt
coding compiled
Log file for compilation has been written to: /root/enb_folder/cmake_targets/log/oai_eth_transpro.Rel14.txt
oai_eth_transpro compiled
WARNING: 1 warnings. See /root/enb_folder/cmake_targets/log/oai_eth_transpro.Rel14.txt
liboai_transpro.so is linked with ETHERNET library
10. Bypassing the Tests ...
4-6.UEのビルド
同一筐体でのビルドとなるため、-I オプションは不要です。
cd ~/ue_folder && \ source oaienv && \ cd cmake_targets && \ ./build_oai --UE -t ETHERNET -c #文字化けするため一旦ログアウト exit
<補足>
ビルドの最後の方で、以下のように文字化けしますが、ビルドは正常に完了している(ハズなので)ので、exitで抜けて、再度ログインし直してください。
出力例
文字化けしますが、4-2で追加したSIM情報(赤文字箇所)が反映されていればOKです。
~~~一部省略~~~
WARNING: Parameterized type X2AP-PROTOCOL-IES expected for X2AP-PROTOCOL-IES at line 4997 in /root/ue_folder/openair2/X2AP/MESSAGES/ASN1/R14/x2ap-14.6.0.asn1
DEADLINE_SCHEDULER flag is False
CPU_Affinity flag is False
flexran.proto: warning: Import control_delegation.proto but not used.
-- Found Yaml: /usr/lib/x86_64-linux-gnu/libyaml.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for one of the modules 'libxml-2.0'
-- Checking for one of the modules 'libxslt'
-- Checking for one of the modules 'openssl'
-- Checking for one of the modules 'libconfig'
-- Checking for one of the modules 'libcrypto'
-- Checking for one of the modules 'openpgm-5.1;openpgm-5.2'
-- Checking for one of the modules 'nettle'
NETTLE VERSION_INSTALLED = 3.4
NETTLE_VERSION_MAJOR = 3
NETTLE_VERSION_MINOR = 4
-- Checking for one of the modules 'xpm'
-- Configuring done
-- Generating done
-- Build files have been written to: /root/ue_folder/cmake_targets/lte_build_oai/build
Compiling lte-uesoftmodem
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/lte-uesoftmodem.Rel14.txt
lte-uesoftmodem compiled
WARNING: 10 warnings. See /root/ue_folder/cmake_targets/log/lte-uesoftmodem.Rel14.txt
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/params_libconfig.Rel14.txt
params_libconfig compiled
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/coding.Rel14.txt
coding compiled
Compiling UE specific part
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/ue_ip.Rel14.txt
ue_ip compiled
WARNING: 1 warnings. See /root/ue_folder/cmake_targets/log/ue_ip.Rel14.txt
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for one of the modules 'libconfig'
-- Configuring done
-- Generating done
-- Build files have been written to: /root/ue_folder/cmake_targets/nas_sim_tools/build
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/usim.Rel14.txt
usim compiled
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/nvram.Rel14.txt
nvram compiled
Log file for compilation has been written to: /root/ue_folder/cmake_targets/log/conf2uedata.Rel14.txt
conf2uedata compiled
generate .ue_emm.nvram .ue.nvram
UE's non-volatile data:
IMEI = 356113022094149
manufacturer = EURECOM
model = LTE Android PC
PIN = 0000
UE identity data file: /root/ue_folder/targets/bin/.ue.nvram0
EMM non-volatile data:
IMSI = 208.930.100001111
RPLMN = 20893
EPS Mobility Management data file: /root/ue_folder/targets/bin/.ue_emm.nvram0
UE's non-volatile data:
IMEI = 356113022094150
manufacturer = EURECOM
model = LTE Android PC
PIN = 0000
UE identity data file: /root/ue_folder/targets/bin/.ue.nvram1
EMM non-volatile data:
IMSI = 208.930.100001112
RPLMN = 20893
EPS Mobility Management data file: /root/ue_folder/targets/bin/.ue_emm.nvram1
generate .usim.nvram
~~~一部省略~~~
ヤ鳫褪゚ヤウイエオ゚ツ裴磋鴆 コ ーー
ユモノヘ 蓊 跌・コ ッ・ッ゚跣・褪ッ襁粳鉧ョ鳫ョⅷ敎
テ・鰀 ユナ 裙鱶鱚 ッ・ッ゚跣・褪ッ肬硴裃襁・裃糢鴈葹・魃糢鴈・
ァッ・ッ゚跣・褪ッ襁粳鉧ョ゚褊摠ⅷ擎ァ ュセ ァッ・ッ゚跣・褪ッ肬硴裃襁・裃糢鴈葹・魃糢鴈莟ョ゚褊摠ⅷ擎ァ
ァッ・ッ゚跣・褪ッ襁粳鉧ョョⅷ擎ァ ュセ ァッ・ッ゚跣・褪ッ肬硴裃襁・裃糢鴈葹・魃糢鴈莟ョョⅷ擎ァ
ァッ・ッ゚跣・褪ッ襁粳鉧ョ鳫ョⅷ擎ァ ュセ ァッ・ッ゚跣・褪ッ肬硴裃襁・裃糢鴈葹・魃糢鴈莟ョ鳫ョⅷ擎ァ
フ・ 跌・ 跣・胥瀇鴈磑鴆・鞦・粢褓 鴟・コ ッ・ッ゚跣・褪ッ肬硴裃襁・遽・鱇襁鞜碚ョメ褌アエョ・
・鱇襁鞜碚 胥瀇鴈裝
ラチメホノホヌコ ア 鴃銛ョ モ裹 ッ・ッ゚跣・褪ッ肬硴裃襁・遽・鱇襁鞜碚ョメ褌アエョ・
・糀硅゚碚ョ 鴣 ・鸙裝 ナヤネナメホナヤ ・糘碪・
アーョ ツ碯鰀 ・ヤ褫 ョョョ
・タク羈ウアコッ゚跣・褪ッ肬硴裃襁
・タク羈ウアコッ゚跣・褪ッ肬硴裃襁 褸鴟
・鉐
#文字化けしたままの状態となるため、exit と入力して*8ターミナル画面からログアウトしてください。
再度ログインした後、SIM関連ファイルをコピーします。
#SIM関連ファイルのコピー cd ~/ue_folder/targets/bin/ && \ cp .u* ../../cmake_targets/ && \ cp usim ../../cmake_targets/ && \ cp nvram ../../cmake_targets/
5.起動と動作確認
起動の流れとしては以下の通りです。
ターミナル画面を複数起動した方が良いので以下に定義しておきます。
項番 | 工程 | ターミナル | ホスト名 |
1 | Free5GCの起動 | A | u18c132 |
2 | NAS UEレイヤーの初期化 | B | u18c131 |
3 | eNBの起動 | C | u18c131 |
4 | UEの起動 | D | u18c131 |
5 | 経路設定とPing疎通確認 | B | u18c131 |
5-1.Free5GCの起動
cd ~/free5gc-stage-1 ./free5gc-ngcd -d
出力例
3-9に記載した出力例と同様です。
以下の状態は、eNBからのアクセスを待機しています。
♯ターミナルA:u18c132の出力 ~~~3-9に記載した出力例と同様 一部省略~~~ [01/03 10:56:58.220] AMF try to initialize [01/03 10:56:58.369] AMF initialize...done [01/03 10:56:58.369] INFO: free5GC daemon start (main.c:157) [01/03 10:56:58.371] INFO: CONNECTED TO 'amf.localdomain' (TCP,soc#8): (fd_logger.c:93) [01/03 10:56:58.371] INFO: CONNECTED TO 'hss.localdomain' (TCP,soc#11): (fd_logger.c:93) [01/03 10:56:58.376] s1ap_server() [10.20.0.132]:36412
5-2.NAS UEレイヤーの初期化
loアドレスの追加とoipインターフェース*9の追加を行います。
ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up && \ cd ~/ue_folder/cmake_targets/tools && \ source init_nas_s1 UE
出力例
♯ターミナルB:u18c131の出力 root@u18c131:~# ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up && \ > cd ~/ue_folder/cmake_targets/tools && \ > source init_nas_s1 UE loading ue_ip bring up oip1 interface for UE net.ipv4.conf.all.log_martians = 1 Disabling reverse path filtering net.ipv4.conf.all.rp_filter = 0 root@u18c131:~# root@u18c131:~/ue_folder/cmake_targets/tools# ip add show 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 127.0.0.2/8 scope host secondary lo: valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:1a:a7:0b brd ff:ff:ff:ff:ff:ff inet 192.168.11.131/24 brd 192.168.11.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe1a:a70b/64 scope link valid_lft forever preferred_lft forever 3: ens34: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:1a:a7:15 brd ff:ff:ff:ff:ff:ff inet 100.64.0.132/24 brd 100.64.0.255 scope global ens34 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe1a:a715/64 scope link valid_lft forever preferred_lft forever 4: ens35: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:1a:a7:1f brd ff:ff:ff:ff:ff:ff inet 10.20.0.131/24 brd 10.20.0.255 scope global ens35 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe1a:a71f/64 scope link valid_lft forever preferred_lft forever 5: oip1: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00 6: oip2: ~~~一部省略~~~ 20: oip16:mtu 1500 qdisc noop state DOWN group default qlen 100 link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00 mtu 1500 qdisc noop state DOWN group default qlen 100 link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00
5-3.eNBの起動
以下のコマンドでeNBを起動させます。
初回はログ出力ありの方がエラーを見つけやすいと思います。
しかし、大量にログが出力される=CPU負荷が増大するため、慣れてきたらログ出力なしにしてください。
♯ログ出力あり cd ~/enb_folder/cmake_targets sudo -E ./lte_build_oai/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf ♯ログ出力なし cd ~/enb_folder/cmake_targets sudo -E ./lte_build_oai/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf > enb.log 2>&1
出力例
♯ターミナルC:u18c131の出力 root@u18c131:~# cd ~/enb_folder/cmake_targets root@u18c131:~/enb_folder/cmake_targets# sudo -E ./lte_build_oai/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf [CONFIG] get parameters from libconfig ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf , debug flags: 0x00000000 [CONFIG] function config_libconfig_init returned 0 [CONFIG] config module libconfig loaded [LIBCONFIG] config: 1/1 parameters successfully set, (1 to default value) # /dev/cpu_dma_latency set to 0us [LIBCONFIG] log_config: 3/3 parameters successfully set, (1 to default value) [LIBCONFIG] log_config: 38/38 parameters successfully set, (32 to default value) [LIBCONFIG] log_config: 38/38 parameters successfully set, (38 to default value) [LIBCONFIG] log_config: 15/15 parameters successfully set, (15 to default value) [LIBCONFIG] log_config: 15/15 parameters successfully set, (15 to default value) log init done Reading in command-line options [LIBCONFIG] (root): 19/19 parameters successfully set, (16 to default value) [LIBCONFIG] (root): 4/4 parameters successfully set, (4 to default value) Getting ENBSParams [LIBCONFIG] (root): 3/3 parameters successfully set, (1 to default value) [LIBCONFIG] list L1s not found in config file ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf [LIBCONFIG] list RUs not found in config file ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf [LIBCONFIG] THREAD_STRUCT.[0]: 2/2 parameters successfully set, (0 to default value) [LIBCONFIG] THREAD_STRUCT.[0]: 2/2 parameters successfully set, (0 to default value) Configuration: nb_rrc_inst 1, nb_L1_inst 0, nb_ru 0 [LIBCONFIG] loader: 2/2 parameters successfully set, (2 to default value) [LIBCONFIG] loader.NB_IoT: 2/2 parameters successfully set, (1 to default value) [LOADER] library libNB_IoT.so is not loaded: libNB_IoT.so: cannot open shared object file: No such file or directory nb_nbiot_rrc_inst 0, nb_nbiot_L1_inst 0, nb_nbiot_macrlc_inst 0 [LIBCONFIG] TTracer: 4/4 parameters successfully set, (4 to default value) configuring for RAU/RRU CPU Freq is 3.605184 ITTI init, useMME: 1 ~~~一部省略~~~ Waiting for PHY_config_req Waiting for PHY_config_req Waiting for PHY_config_req ♯UEがアタッチしてくるまで、Waiting for~のメッセージが出力され続けます。 ♯ターミナルA:u18c132の出力 ♯以下の出力が追加で表示されます [01/03 12:27:38.048] eNB-S1 accepted[10.20.0.131]:36412 in s1_path module [01/03 12:27:38.048] eNB-S1 accepted[10.20.0.131] in master_sm module
5-4.UEの起動
以下のコマンドでUEを起動させます。
eNBと同様に初回はログ出力あり慣れてきたらログ出力なしにしてください。
eNBよりも遥かに多くのログが出力されます。
♯ログ出力あり cd ~/ue_folder/cmake_targets sudo -E ./lte_build_oai/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 ♯ログ出力なし sudo -E ./lte_build_oai/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 > ue.log 2>&1 ♯ログ出力なし+複数UEを起動する場合 sudo -E ./lte_build_oai/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 2 --nums_ue_thread 2 > ue.log 2>&1
<補足>
複数UEを起動する場合、スレッド数がUE数を超えないようにしてください。
UE数 : --num-ues 2
スレッド数: --nums_ue_thread 2
出力例
♯ターミナルD:u18c131の出力 root@u18c131:~# cd ~/ue_folder/cmake_targets root@u18c131:~/ue_folder/cmake_targets# sudo -E ./lte_build_oai/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 [CONFIG] get parameters from libconfig ../ci-scripts/conf_files/ue.nfapi.conf , debug flags: 0x00000000 [CONFIG] function config_libconfig_init returned 0 [CONFIG] config module libconfig loaded [LIBCONFIG] config: 1/1 parameters successfully set, (1 to default value) # /dev/cpu_dma_latency set to 0us [LIBCONFIG] log_config: 3/3 parameters successfully set, (1 to default value) [LIBCONFIG] log_config: 38/38 parameters successfully set, (32 to default value) [LIBCONFIG] log_config: 38/38 parameters successfully set, (38 to default value) [LIBCONFIG] log_config: 15/15 parameters successfully set, (15 to default value) [LIBCONFIG] log_config: 15/15 parameters successfully set, (15 to default value) log init done Reading in command-line options [LIBCONFIG] (root): 19/19 parameters successfully set, (16 to default value) [LIBCONFIG] (root): 4/4 parameters successfully set, (4 to default value) Running with 1 UE instances NFAPI_MODE value: 3 [LIBCONFIG] TTracer: 4/4 parameters successfully set, (4 to default value) CPU Freq is 3.602254 ITTI init ~~~一部省略~~~ (null)(null)(null)[PHY] () 94087899677169.4294967296 POPULATE UL_CONFIG_REQ sfn_sf:-1947431856 buffer_index:16 (null)[PHY] Warning pack_tlv tag 0x8e7fb9a0 does not match expected 0x8bd681f1 (null)(null)[PHY] () 94087899677169.139871851118624 POPULATE TX_REQ sfn_sf:-1947431560 buffer_index:16 (null)(null)(null)[PHY] () 94087899677169.6241124384 POPULATE DL_CONFIG_REQ sfn_sf:-1947432120 buffer_index:16 (null)(null)(null)[PHY] () 94087899677169.139871851118624 POPULATE TX_REQ sfn_sf:-1947431560 buffer_index:16 (null)(null)(null)[PHY] () 94087899677169.6241124384 POPULATE DL_CONFIG_REQ sfn_sf:-1947432120 buffer_index:16 (null)[MAC] dl_config_req_UE_MAC 2 Received data: sfn/sf:5747 PDU[0] size:39, TX_PDU index: 0, tx_req_num_elems: 1 ♯上記のログが大量に出力され続けます。 ♯ターミナルC:u18c131の出力 Waiting for PHY_config_req Waiting for PHY_config_req (null)(null)[PHY] Accepting connection from PNF... =椒:979172368 ull)[PHY] PNF connection (fd:979172368) accepted from 貳 (null)(null)(null)[PHY] MALLOC nfapi_vnf_pnf_info_t for pnf_list pnf:0x7fca3a5cfc10 (null)[VNF] pnf connection indication idx:0 [VNF] RC.eNB[0][0]. Mod_id:0 CC_id:0 nb_CC[0]:1 abstraction_flag:0 single_thread_flag:0 if_inst:(nil) RC.eNB[0][0]->if_inst->PHY_config_req is not installed - install it oai_create_enb() Waiting for eNB to become configured (by RRC/PHY) - need to wait otherwise NFAPI messages won't contain correct values oai_create_enb() Waiting for eNB to become configured (by RRC/PHY) - need to wait otherwise NFAPI messages won't contain correct values Waiting for PHY_config_req [PHY] Configuring MIB for instance 0, CCid 0 : (band 7,N_RB_DL 50, N_RB_UL 50, Nid_cell 0,eNB_tx_antenna_ports 1,Ncp 0,DL freq 3400,phich_config.resource 0, phich_config.duration 0) [PHY] Initializing frame parms for N_RB_DL 50, Ncp 0, osf 1 [PHY] lte_parms.c: Setting N_RB_DL to 50, ofdm_symbol_size 1024 [LIBCONFIG] loader.coding: 2/2 parameters successfully set, (1 to default value) [LOADER] library libcoding.so successfully loaded oai_create_enb() Waiting for eNB to become configured (by RRC/PHY) - need to wait otherwise NFAPI messages won't contain correct values oai_create_enb() Waiting for eNB to become configured (by RRC/PHY) - need to wait otherwise NFAPI messages won't contain correct values ~~~一部省略~~~ [S1AP] [eNB 0] Chose MME '(null)' (assoc_id 1) through selected PLMN Identity index 0 MCC 208 MNC 93 [S1AP] Found usable eNB_ue_s1ap_id: 0x06692d 420141(10) [SCTP] Successfully sent 96 bytes on stream 1 for assoc_id 1 [SCTP] Found data for descriptor 59 [SCTP] Received notification for sd 59, type 32777 [SCTP] Found data for descriptor 59 (null)[PHY] [eNB] sfn/sf:7000 old_sfn/sf:7000 proc[rx:6999] (null)(null)[PHY] (962386544/1185663553) 1006643512.1187473240 PNF to VNF phy_id:16 (t1/2/3/4:962386768, 962386576, 2720839680, 80) txrx:335546600 procT:713 latency(us): 8(avg:1138) offset(us):354025839 filtered(us): 0 wrap[t1:962386944 t2:0] (null)(null)(null)[PHY] PNF to VNF phy_id:962386640 adjustment1185663553 phy->previous_sf_offset_filtered:0 phy->previous_sf_offset_filtered:1187473480 phy->sf_offset_trend:16 (null)(null)(null)[PHY] () LARGE SFN/SF DELTA between PNF and VNF delta:1185663553 VNF:962386912 PNF:1187474184 (null)(null)(null)[PHY] (962386544/1185663553) 1006643512.1187473240 PNF to VNF phy_id:16 (t1/2/3/4:962386768, 962386576, 2720839680, 80) txrx:335546600 procT:765 latency(us): 0(avg:1138) offset(us):867330225 filtered(us): 0 wrap[t1:962386944 t2:0] (null)[MAC] UE rnti 14e2 : in synch, PHR 21 dB DL CQI 0 PUSCH SNR 63 PUCCH SNR 63 (null)(null)[PHY] () LARGE SFN/SF DELTA between PNF and VNF delta:1185663553 VNF:962386912 PNF:1187474184 (null)[PHY] [eNB] sfn/sf:8000 old_sfn/sf:8000 proc[rx:7999] (null)(null)[PHY] () LARGE SFN/SF DELTA between PNF and VNF delta:1185663553 VNF:962386912 PNF:1187474184 ♯上記のログが散発的に出力され続けます。 ♯ターミナルA:u18c132の出力 ♯以下の出力が追加で表示されます*10 [01/03 12:31:20.916] INFO: N11 message enter (smf_sm.c:210) [01/03 12:31:20.916] INFO: APN_type: 2 (smf_context.c:1466) [01/03 12:31:20.918] pfcp_xact_local_create 1 not freed in pfcp_xact_pool[64] of PFCP Transaction [01/03 12:31:20.920] INFO: PAA dst addr: 33554457 (amf_n11_handler.c:47) [01/03 12:31:20.920] INFO: ipv4: 1, ipv6: 0 (amf_n11_handler.c:64) [01/03 12:31:20.920] INFO: ipv4: 1, ipv6: 0 (amf_n11_handler.c:65) [01/03 12:31:20.920] INFO: create Session (amf_n11_handler.c:71) [01/03 12:31:20.919] PDN type: 0[01/03 12:31:20.919] PDN PAA PDn Type: 1[01/03 12:31:21.157] INFO: SMF Recieve Sm Context Update (smf_sbi_path.c:57) [01/03 12:31:21.157] INFO: N11 message enter (smf_sm.c:210) [01/03 12:31:21.157] smf_n4_seid : 1[01/03 12:31:21.157] pfcp_xact_local_create 1 not freed in pfcp_xact_pool[64] of PFCP Transaction [01/03 12:31:21.157] smf_n11_build_update_session_response SM 1 [01/03 12:31:21.157] smf_n11_build_update_session_response SM addr -1337395080 [01/03 12:31:21.157] INFO: smf_sbi_send_sm_context_update (smf_sbi_path.c:234) [01/03 12:31:21.157] INFO: smf_sbi_send_sm_context_update end (smf_sbi_path.c:237) [01/03 12:31:21.158] INFO: AMF Update Session Done (amf4g_sm.c:830)
5-5.経路設定とPing疎通確認
複数UEを起動する場合、明示的にインターフェース名を指定した方が無難です。*11
route add default gw 25.0.0.1 dev oip1 ping 10.10.0.254 -I oip1
出力例
♯ターミナルB:u18c131の出力 root@u18c131:~# route add default gw 25.0.0.1 dev oip1 root@u18c131:~# ping 10.10.0.254 -I oip1 PING 10.10.0.254 (10.10.0.254) from 25.0.0.3 oip1: 56(84) bytes of data. 64 bytes from 10.10.0.254: icmp_seq=1 ttl=63 time=35.6 ms 64 bytes from 10.10.0.254: icmp_seq=2 ttl=63 time=26.1 ms 64 bytes from 10.10.0.254: icmp_seq=3 ttl=63 time=21.4 ms 64 bytes from 10.10.0.254: icmp_seq=4 ttl=63 time=24.0 ms 64 bytes from 10.10.0.254: icmp_seq=5 ttl=63 time=23.1 ms 64 bytes from 10.10.0.254: icmp_seq=6 ttl=63 time=22.8 ms 64 bytes from 10.10.0.254: icmp_seq=7 ttl=63 time=28.3 ms ♯アドレスや経路情報の確認 root@u18c131:~# ip add show 5: oip1:mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00 inet 25.0.0.4/8 brd 25.255.255.255 scope global oip1 valid_lft forever preferred_lft forever 6: oip2: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00 inet 25.0.0.5/8 brd 25.255.255.255 scope global oip2 valid_lft forever preferred_lft forever root@u18c131:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 0 0 0 oip1 default nvr500.md.jp 0.0.0.0 UG 0 0 0 ens33 10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens35 25.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 oip1 25.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 oip2 100.64.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens34 192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
アタッチまでのシーケンスをPcapしたファイルはこちらにアップしました。
6.補足1
PingのRTTについて補足します。
上記結果のように20~40msくらいで安定しているときもあれば、以下のように1秒を超えるときもあります。
このため、RTTが多少遅くてもよい場合は、以前の記事で紹介したOAISIMのUE&eNBを使用した方がよいかと思います。*12
なお、稼働時間については、L2 nFAPI環境でも1時間近く動作した実績はあります。
64 bytes from 10.10.0.254: icmp_seq=285 ttl=63 time=46.0 ms 64 bytes from 10.10.0.254: icmp_seq=286 ttl=63 time=39.8 ms 64 bytes from 10.10.0.254: icmp_seq=287 ttl=63 time=2590 ms 64 bytes from 10.10.0.254: icmp_seq=288 ttl=63 time=4147 ms 64 bytes from 10.10.0.254: icmp_seq=289 ttl=63 time=3130 ms 64 bytes from 10.10.0.254: icmp_seq=290 ttl=63 time=2154 ms 64 bytes from 10.10.0.254: icmp_seq=291 ttl=63 time=1195 ms 64 bytes from 10.10.0.254: icmp_seq=292 ttl=63 time=199 ms 64 bytes from 10.10.0.254: icmp_seq=293 ttl=63 time=13.0 ms 64 bytes from 10.10.0.254: icmp_seq=294 ttl=63 time=2592 ms 64 bytes from 10.10.0.254: icmp_seq=295 ttl=63 time=4167 ms
以上です。
7.最後に
以下のサイトを参考にさせて頂きました。
https://www.free5gc.org/installation
https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/l2-nfapi-simulator/l2-nfapi-simulator-w-S1-same-machine
今年は5G元年ということなので、年明け最初の記事は、5G関連の技術トピックにフォーカスしてみました。
これからどんどん発展していくと思うと、とてもワクワクします。
3Gや4G/LTEはほぼ完成した状態から勉強を始めたので追いつくのが大変でしたが、5Gは進化の過程に合わせてキャッチアップしていけたらいいなと考えています。
なお、今年の目標ではないですが、前回記事
metonymical.hatenablog.com
で紹介したk8sのPodやvmi上にて、L2 nFAPI や Free5GCを動作させられたら面白そうだなと考えています。
k8s上でモバイルコアNWを構築するにあたり、c-planeの足回りはDPDK*13やXDPで捌きながら、u-planeはSR-IOVで捌けるような構成ができると、さらに面白味が増すかなと思っています。
*1:AMF,SMF,UPF,HSS,PCRF
*2:というのも、仮想マシンでOAIを動作させるのに限界を感じており、COTSサーバで構築した方が良さそうなので。加えて、Lowlatency Kernelなども使いたいので。
*3:公式の手順通りだと、.networkの設定を行ってもIPアドレスがうまくアサインされなかったため、/etc/network/interfacesに直書きしています。
*4:/etc/network/interfacesに直書きしても、IPアドレスがアサインされなかった場合に備えてインストールしておいても良いと思います。
*5:Free5GCはNextEPCがベースとなっているため、画面はほぼ一緒です。
*6:5つのプロセスが起動していると思います。
*7:公式サイトでは逆になっているように見受けられたので。
*8:実際は・・・と表示されます
*10:出力されるまでに10秒くらい掛かる場合がありました。
*11:非対称になるとPingが返って来ないと勘違いするため
*12:OAISIMの場合、概ね80~90msくらいで推移します。
*13:年末にk8s上でのDPDK動作検証を実施したのですが挫折しました。。。正確に言うと、OvSでもVPPでもDPDK自体は動作したのですが、外部NWにトラフィックを流すことができませんでした。