Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

OAI L2 nFAPI + Free5GCによるNSA 5GC構築方法

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.全体構成

f:id:metonymical:20200103094645p:plain
f:id:metonymical:20200103094710p:plain

1-3 .全体の流れ ~概要~
  1. 事前準備
  2. Free5GC設定
  3. OAI L2nFAPI設定
  4. 起動と動作確認

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の設定

GTP終端インターフェースを作成します。*3

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
f:id:metonymical:20200103103443p:plain

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

f:id:metonymical:20200103104030p:plain
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の起動
  2. NAS UEレイヤーの初期化
  3. eNBの起動
  4. UEの起動
  5. 経路設定とPing疎通確認

ターミナル画面を複数起動した方が良いので以下に定義しておきます。

項番 工程 ターミナル ホスト名
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:  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

~~~一部省略~~~

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
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:実際は・・・と表示されます

*9:UEのアドレスがアサインされるインターフェース

*10:出力されるまでに10秒くらい掛かる場合がありました。

*11:非対称になるとPingが返って来ないと勘違いするため

*12:OAISIMの場合、概ね80~90msくらいで推移します。

*13:年末にk8s上でのDPDK動作検証を実施したのですが挫折しました。。。正確に言うと、OvSでもVPPでもDPDK自体は動作したのですが、外部NWにトラフィックを流すことができませんでした。