Difference between revisions of "Free5GC: Install"

From OnnoWiki
Jump to navigation Jump to search
Line 1: Line 1:
A. Prerequisites
+
Sumber: https://www.free5gc.org/installations/stage-1-all-in-one/
Linux Kernel Version
 
  
In order to use the UPF element, you must use the 5.0.0-23-generic or 5.4.x version of the Linux kernel. free5gc uses the gtp5g kernel module, which has been tested and compiled against that kernel versions only. If you installed Ubuntu 20.04, the version looks like 5.4.x. To determine the version of the Linux kernel you are using:
 
    $ uname -r
 
    5.4.0-65-generic
 
You will not be able to run most of the tests in Test section unless you deploy a UPF.
 
  
Golang Version
+
free5GC Installation on KVM
 +
Minimum Requirement
 +
Software
  
As noted above, free5gc is built and tested with Go 1.14.4
+
OS: Ubuntu 18.04
To check the version of Go on your system, from a command prompt:
+
Linux kernel: 4.15.0-43-generic
    go version
+
gcc 7.3.0
If another version of Go is installed, remove the existing version and install Go 1.14.4:
+
Go 1.11.4
    # this assumes your current version of Go is in the default location
+
QEMU emulator 2.11.1
    sudo rm -rf /usr/local/go
 
    wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
 
    sudo tar -C /usr/local -zxvf go1.14.4.linux-amd64.tar.gz
 
If Go is not installed on your system:
 
    wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
 
    sudo tar -C /usr/local -zxvf go1.14.4.linux-amd64.tar.gz
 
    mkdir -p ~/go/{bin,pkg,src}
 
    # The following assume that your shell is bash
 
    echo 'export GOPATH=$HOME/go' >> ~/.bashrc
 
    echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
 
    echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> ~/.bashrc
 
    echo 'export GO111MODULE=auto' >> ~/.bashrc
 
    source ~/.bashrc
 
Further information and installation instructions for golang are available at the official golang site.
 
Control-plane Supporting Packages
 
  
sudo apt -y update
+
Hardware
sudo apt -y install mongodb wget git
 
sudo systemctl start mongodb
 
WARNING: MongoDB 5.0+ requires a CPU with AVX support. Or downgrade your MongoDB to 4.4
 
  
see https://www.mongodb.com/community/forums/t/mongodb-5-0-cpu-intel-g4650-compatibility/116610/2
+
CPU: Intel i5 processor
 +
RAM: 4GB
 +
Hard drive: 160G
 +
NIC card: 1Gbps ethernet card
  
see also docker-library/mongo#485 (comment)
+
Hardware recommended
  
User-plane Supporting Packages
+
  CPU: Intel i7 processor
sudo apt -y update
+
  RAM: 8GB
sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev
+
  Hard drive: 160G
Linux Host Network Settings
+
  NIC card: 10Gbps ethernet card
  sudo sysctl -w net.ipv4.ip_forward=1
 
  sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE
 
  sudo iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
 
  sudo systemctl stop ufw
 
  
B. Install Control Plane Elements
+
Hardware Tested
Clone the free5GC repository
 
  
To install the latest stable build (v3.2.1):
+
eNB
    cd ~
 
    git clone --recursive -b v3.2.1 -j `nproc` https://github.com/free5gc/free5gc.git
 
    cd free5gc
 
(Alternatively) to install the latest nightly build:
 
    cd ~/free5gc
 
    git checkout main
 
    git submodule sync
 
    git submodule update --init --jobs `nproc`
 
    git submodule foreach git checkout main
 
    git submodule foreach git pull --jobs `nproc`
 
Compile network function services in free5gc
 
  
To do so individually (e.g., AMF only):
+
WNC OSQ4G-01E2, 3GPP Rel-13 compliance (4G LTE Small Cell)
    cd ~/free5gc
+
D-Link DWR-1012, 3GPP Rel-12 compliance (4G LTE Small Cell)
    make amf
+
GemTek WLTGFC-101, 3GPP Rel-9 compliance (4G LTE Small Cell)
To build all network functions:
 
    cd ~/free5gc
 
    make
 
  
C. Install User Plane Function (UPF)
+
UE
As noted above, the GTP kernel module used by the UPF requires that you use Linux kernel version 5.0.0-23-generic or 5.4.x. To verify your version:
 
uname -r
 
Retrieve the 5G GTP-U kernel module using git and build it
 
git clone https://github.com/free5gc/gtp5g.git
 
cd gtp5g
 
make
 
sudo make install
 
Build the UPF (you may skip this step if you built all network functions above):
 
  
to build using make:
+
LG C90 cellular phone
  cd ~/free5gc
+
D-Link DWR-932C dongle via USB cable
  make upf
+
 
Customize the UPF as desired. The UPF configuration file in run.sh is free5gc/config/upfcfg.yaml.
+
Preparation
 +
KVM Environment Setup
 +
VM NIC Cards
 +
NIC for connecting to the Internet
 +
Network source: Virtual network - NAT
 +
Interface name in VM: ens3 (in this example)
 +
NIC for connecting to eNB:
 +
Network source: Host device <Host Interface Name>
 +
Interface name in VM: ens4 (in this example)
 +
Collect eNodeB and USIM Information
 +
 
 +
eNodeB information (in this example)
 +
 
 +
  IP Address: 192.188.2.1
 +
Gateway:    192.188.2.2 (IP of NIC connected to eNB)
 +
PLMN:
 +
  MCC: 208
 +
  MNC: 93
 +
MME GID:  1
 +
MME Code: 1
 +
TAC: 1
 +
 
 +
USIM information (in this example)
 +
 
 +
IMSI 208930000000003
 +
K    8baf473f2f8fd09487cccbd7097c6862
 +
  OPc  8e27b6af0e692e750f32667a3b14605d
 +
 
 +
Installation
 +
Please follow the instructions from Part A ~ Part C.
 +
 
 +
Part A. Compile Source Code
 +
Prerequisites
 +
Install MongoDB 3.6.3, Golang 1.11.4.
  
D. Install WebConsole
 
Before building WebConsole, install nodejs and yarn packages first:
 
sudo apt remove cmdtest
 
sudo apt remove yarn
 
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
 
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
 
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
 
 
  sudo apt-get update
 
  sudo apt-get update
  sudo apt-get install -y nodejs yarn
+
  sudo apt-get -y install mongodb wget git
  Build WebConsole
+
sudo systemctl start mongodb (if '/usr/bin/mongod' is not running)
 +
 
 +
# Check if golang is installed
 +
 
 +
go version
 +
 
 +
# If not, run commands below
 +
 
 +
wget -q https://storage.googleapis.com/golang/getgo/installer_linux
 +
chmod +x installer_linux
 +
./installer_linux
 +
source ~/.bash_profile
 +
rm -f installer_linux
 +
 
 +
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"
 +
 
 +
To run free5GC with least privilege, TUN device permission should be a crw-rw-rw-(666).
 +
 
 +
ls -al /dev/net/tun
 +
crw-rw-rw- 1 root root 10, 200 Jan 14 13:09 /dev/net/tun
 +
 
 +
Write the configuration file for the TUN device.
 +
 
 +
sudo sh -c "cat << EOF > /etc/systemd/network/99-free5gc.netdev
 +
[NetDev]
 +
Name=uptun
 +
Kind=tun
 +
EOF"
 +
 
 +
sudo systemctl enable systemd-networkd
 +
sudo systemctl restart systemd-networkd
 +
 
 +
Check IPv6 Kernel Configuration. Although you can skip this step, we suggest that you set this up to support IPv6-enabled UE.
 +
 
 +
sysctl -n net.ipv6.conf.uptun.disable_ipv6
 +
 
 +
(if the output is 0 and IPv6 is enabled, skip the followings)
 +
 
 +
sudo sh -c "echo 'net.ipv6.conf.uptun.disable_ipv6=0' > /etc/sysctl.d/30-free5gc.conf"
 +
sudo sysctl -p /etc/sysctl.d/30-free5gc.conf
 +
 
 +
You are now ready to set the IP address on TUN device. If IPv6 is disabled for TUN device, please remove Address=cafe::1/64 from below.
 +
 
 +
sudo sh -c "cat << EOF > /etc/systemd/network/99-free5gc.network
 +
[Match]
 +
Name=uptun
 +
[Network]
 +
Address=45.45.0.1/16
 +
Address=cafe::1/64
 +
EOF"
 +
 
 +
sudo systemctl enable systemd-networkd
 +
sudo systemctl restart systemd-networkd
 +
 
 +
Add the following lines into /etc/network/interfaces for network-manager service
 +
 
 +
auto uptun
 +
iface uptun inet static 
 +
address 45.45.0.1
 +
netmask 255.255.0.0
 +
 +
iface uptun inet6 static
 +
pre-up modprobe ipv6
 +
address cafe::1
 +
netmask 64
 +
Restart uptun interface
 +
 
 +
sudo ip a flush uptun
 +
sudo systemctl restart networking
 +
 
 +
# Check if uptun is up
 +
 
 +
sudo apt-get -y install net-tools
 +
ifconfig uptun
 +
 
 +
AMF, SMF, UPF, HSS, and PCRF
 +
Install the depedencies for building the source
 +
 
 +
sudo 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
 +
 
 +
Git clone and compile
 +
 
 +
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
 +
 
 +
Part B. VM Internal Network Environment Setting
 +
[Option 1] Need to run on every boot
 +
 
 +
sudo ifconfig ens4 192.188.2.2
 +
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
 +
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
 +
sudo iptables -I INPUT -i uptun -j ACCEPT
 +
 
 +
[Option 2] or configure as auto run on boot
 +
 
 +
sudo 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
 +
 +
ifconfig ens4 192.188.2.2
 +
sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
 +
iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
 +
iptables -I INPUT -i uptun -j ACCEPT
 +
EOF"
 +
 +
sudo chmod 755 /etc/init.d/ngc-network-setup
 +
sudo /etc/init.d/ngc-network-setup
 +
 +
sudo ln -s /etc/init.d/ngc-network-setup /etc/rc3.d/S99ngc-network-setup
 +
sudo ln -s /etc/init.d/ngc-network-setup /etc/rc4.d/S99ngc-network-setup
 +
sudo ln -s /etc/init.d/ngc-network-setup /etc/rc5.d/S99ngc-network-setup
 +
 
 +
Part C. Run
 +
Run in all-in-one mode
 +
The daemon free5gc-ngcd includes AMF, SMF, UPF, HSS, and PCRF. Thus, instead of running all 5 daemons, you can just run free5gc-ngcd in your development environment.
 +
 
 +
./free5gc-ngcd
 +
 
 +
While running free5gc-ngcd
 +
All logs for AMF, SMF, UPF, HSS, and PCRF are written to ./install/var/log/free5gc/free5gc.log.
 +
All settings are managed in one place for ./install/etc/free5gc/free5gc.conf.
 +
You can find the log/conf path at the beginning of the running screen.
 +
You can user -f argument to specify config file to be used.
 +
Run functions separately
 +
We also provide 5GC functions running separately.
 +
 
 +
./free5gc-upfd
 +
./free5gc-amfd
 +
./free5gc-smfd
 +
./nextepc-hssd
 +
./nextepc-pcrfd
 +
 
 +
Note: We also provide a reference for 5GC functions running in separate machines.
 +
 
 +
[Optional] Self-test
 +
We provide a program that checks whether the installation is correct. After running the wireshark, select loopback interface, and then filter s1ap || diameter || gtpv2 || gtp and run ./test/testngc. You can see the packets virtually created.
 +
 
 +
./test/testngc -f install/etc/free5gc/test/free5gc.testngc.conf
 +
 
 +
Part D. Web User Interface
 +
Install Node.js and NPM
 +
 
 +
sudo apt-get -y install curl
 +
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
 +
sudo apt-get -y install nodejs
 +
 
 +
Install the dependencies to run WebUI (first time)
 +
 
 +
cd webui
 +
npm install
 +
 
 +
Run WebUI
 +
 
 +
cd webui
 +
npm run dev
 +
 
 +
Now the web server is running on http://localhost:3000. The default username and password are “admin” and “1423”.
 +
 
 +
Core Network Configuration
 +
free5GC configuration file
 +
Modify ./install/etc/free5gc/free5gc.conf
 +
 
 +
amf-slap address (line 67)
 +
 
 +
amf:
 +
  s1ap:
 +
    addr: <IP of GW NIC to eNB: 192.188.2.2>
 +
 
 +
upf-gtpu address (line 162)
 +
 
 +
smf:
 +
  upf:
 +
    addr: <IP of GW NIC to eNB: 192.188.2.2>
 +
 
 +
AMF GUMMEI (line 91)
 +
 
 +
amf:
 +
  gummei:
 +
    plmn_id:
 +
      mcc: <eNB MCC: 208>
 +
            mnc: <eNB MNC: 93>
 +
    mme_gid: <eNB MME GID: 1>
 +
    mme_code: <eNB MME Code: 1>   
 +
 
 +
AMF TAI (line 130)
 +
 
 +
amf:
 +
  tai:
 +
    plmn_id:
 +
      mcc: <eNB MCC: 208>
 +
            mnc: <eNB MNC: 93>
 +
        tac: <eNB TAC: 1>
 +
 
 +
Add subscriber (UE)
 +
Add a subscriber by the Web UI
 +
Run the web server:
 +
 
 +
cd ./webui && npm run dev
 +
 
 +
Visit http://localhost:3000
 +
  - Username : admin
 +
  - Password : 1423
 +
Add a subscriber with IMSI, K, OPc
 +
  - Go to Subscriber Menu.
 +
  - Click `+` Button to add a new subscriber.
 +
  - Fill the IMSI, security context(K, OPc, AMF), and APN of the subscriber.
 +
  - Click `SAVE` Button
 +
 
 +
This addition will take effect immediately on free5GC without restaring any daemon.
 +
 
 +
Rebuild Project
 +
To completely rebuild the project after modifying source code
 +
 
 +
  (Control-C kill free5gc-ngcd)
 +
make maintainer-clean
 +
rm -rf ./install
 +
git pull
 +
autoreconf -iv
 +
./configure --prefix=`pwd`/install
 +
make -j `nproc`
 +
make install
 +
./free5gc-ngcd
 +
 
 +
Troubleshooting
 +
Note for modifying configuration file
 +
Use space for indent. DO NOT use tab.
 +
A white space must be added between the colon and value after the item name, e.g. addr: 192.188.2.2
 +
 +
./test/testngc test failure
 +
 
 +
Make sure all configuration files and environment settings are correct.
 +
 
 +
Kill testngc process which didn’t finish correctly
 +
 
 +
killall -9 testngc
 +
 
 +
Remove test subscriber left by previous failed test (NextEPC issue #57)
 +
 
 +
$ mongo
 +
> use free5gc
 +
> db.subscribers.find()  ### (Check the test subscriber)
 +
> db.subscribers.drop()  ### Remove all subscriber
 +
> db.subscribers.find()  ### (Check that all subscribers are empty)
 +
./free5gc-ngcd errors
 +
 
 +
ERRR: - The certificate is expired (NextEPC issue #94)
 +
 
 +
cd support/freeDiameter
 +
./make_certs.sh .
 +
cd ../..
 +
make install
 +
 
 +
Address already in use
 +
 
 +
$ killall -9 testngc
 +
 
 +
or
 +
 
 +
$ killall -9 free5gc-ngcd
 +
 
 +
Rebuild failure
 +
 
 +
config.status: error: cannot find input file: `Makefile.in' (NextEPC issue #68)
 +
autoheader \
 +
    && aclocal \
 +
    && libtoolize --ltdl --copy --force \
 +
    && automake --add-missing --copy \
 +
    && autoconf \
 +
    && ./configure
 +
 
 +
==Appendix A: Program the SIM Card==
 +
 
 +
Install packages:
 +
 
 +
sudo apt-get install pcscd pcsc-tools libccid python-dev swig python-setuptools python-pip libpcsclite-dev
 +
sudo pip install pycrypto
 +
 
 +
Download PySIM
 +
 
 +
git clone git://git.osmocom.org/pysim.git
 +
 
 +
Change to pyscard folder and install
 +
 
 +
cd <pyscard-path>
 +
sudo /usr/bin/python setup.py build_ext install
 +
 
 +
Verify your reader is ready
 +
 
 +
sudo pcsc_scan
 +
 
 +
Check whether your reader can read the SIM card
 +
 
 +
cd <pysim-path>
 +
./pySim-read.py –p 0
 +
 
 +
Program your SIM card information
 +
 
 +
./pySim-prog.py -p 0 -x 208 -y 93 -t sysmoUSIM-SJS1 -i 208930000000003 --op=8e27b6af0e692e750f32667a3b14605d -k 8baf473f2f8fd09487cccbd7097c6862 -s 8988211000000088313 -a 23605945
 +
 
 +
You can get your SIM card from sysmocom. You also need a card reader to write your SIM card. You can get a card reader from here or equivalent device will do.
 +
 
 +
==Referensi==
 +
 
 +
* https://www.free5gc.org/installations/stage-1-all-in-one/
  
to build using make:
+
==Pranala Menarik==
cd ~/free5gc
 
make webconsole
 
(Alternatively) to build manually:
 
cd ~/free5gc/webconsole/frontend
 
yarn install
 
yarn build
 
rm -rf ../public
 
cp -R build ../public
 
cd ..
 
go build -o bin/webconsole server.go
 
  
Note: 2GB or more of OS memory is recommended. WebConsole may be failed to build if memory is less then 1GB.
+
* [[5G]]

Revision as of 11:25, 9 December 2022

Sumber: https://www.free5gc.org/installations/stage-1-all-in-one/


free5GC Installation on KVM Minimum Requirement Software

OS: Ubuntu 18.04
Linux kernel: 4.15.0-43-generic
gcc 7.3.0
Go 1.11.4
QEMU emulator 2.11.1

Hardware

CPU: Intel i5 processor
RAM: 4GB
Hard drive: 160G
NIC card: 1Gbps ethernet card

Hardware recommended

CPU: Intel i7 processor
RAM: 8GB
Hard drive: 160G
NIC card: 10Gbps ethernet card

Hardware Tested

eNB

WNC OSQ4G-01E2, 3GPP Rel-13 compliance (4G LTE Small Cell)
D-Link DWR-1012, 3GPP Rel-12 compliance (4G LTE Small Cell)
GemTek WLTGFC-101, 3GPP Rel-9 compliance (4G LTE Small Cell)

UE

LG C90 cellular phone
D-Link DWR-932C dongle via USB cable

Preparation KVM Environment Setup VM NIC Cards NIC for connecting to the Internet Network source: Virtual network - NAT Interface name in VM: ens3 (in this example) NIC for connecting to eNB: Network source: Host device <Host Interface Name> Interface name in VM: ens4 (in this example) Collect eNodeB and USIM Information

eNodeB information (in this example)

IP Address: 192.188.2.1
Gateway:    192.188.2.2 (IP of NIC connected to eNB)
PLMN:
  MCC: 208
  MNC: 93
MME GID:  1
MME Code: 1
TAC: 1

USIM information (in this example)

IMSI 208930000000003
K    8baf473f2f8fd09487cccbd7097c6862
OPc  8e27b6af0e692e750f32667a3b14605d

Installation Please follow the instructions from Part A ~ Part C.

Part A. Compile Source Code Prerequisites Install MongoDB 3.6.3, Golang 1.11.4.

sudo apt-get update
sudo apt-get -y install mongodb wget git
sudo systemctl start mongodb (if '/usr/bin/mongod' is not running)
  1. Check if golang is installed
go version
  1. If not, run commands below
wget -q https://storage.googleapis.com/golang/getgo/installer_linux
chmod +x installer_linux
./installer_linux
source ~/.bash_profile
rm -f installer_linux
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"

To run free5GC with least privilege, TUN device permission should be a crw-rw-rw-(666).

ls -al /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Jan 14 13:09 /dev/net/tun

Write the configuration file for the TUN device.

sudo sh -c "cat << EOF > /etc/systemd/network/99-free5gc.netdev
[NetDev]
Name=uptun
Kind=tun
EOF"
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd

Check IPv6 Kernel Configuration. Although you can skip this step, we suggest that you set this up to support IPv6-enabled UE.

sysctl -n net.ipv6.conf.uptun.disable_ipv6

(if the output is 0 and IPv6 is enabled, skip the followings)

sudo sh -c "echo 'net.ipv6.conf.uptun.disable_ipv6=0' > /etc/sysctl.d/30-free5gc.conf"
sudo sysctl -p /etc/sysctl.d/30-free5gc.conf

You are now ready to set the IP address on TUN device. If IPv6 is disabled for TUN device, please remove Address=cafe::1/64 from below.

sudo sh -c "cat << EOF > /etc/systemd/network/99-free5gc.network
[Match]
Name=uptun
[Network]
Address=45.45.0.1/16
Address=cafe::1/64
EOF"
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd

Add the following lines into /etc/network/interfaces for network-manager service

auto uptun
iface uptun inet static  
	address 45.45.0.1 
	netmask 255.255.0.0

iface uptun inet6 static
	pre-up modprobe ipv6 
	address cafe::1
	netmask 64

Restart uptun interface

sudo ip a flush uptun
sudo systemctl restart networking
  1. Check if uptun is up
sudo apt-get -y install net-tools
ifconfig uptun

AMF, SMF, UPF, HSS, and PCRF Install the depedencies for building the source

sudo 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

Git clone and compile

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

Part B. VM Internal Network Environment Setting [Option 1] Need to run on every boot

sudo ifconfig ens4 192.188.2.2
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
sudo iptables -I INPUT -i uptun -j ACCEPT

[Option 2] or configure as auto run on boot

sudo 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

ifconfig ens4 192.188.2.2
sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
iptables -I INPUT -i uptun -j ACCEPT
EOF"

sudo chmod 755 /etc/init.d/ngc-network-setup
sudo /etc/init.d/ngc-network-setup

sudo ln -s /etc/init.d/ngc-network-setup /etc/rc3.d/S99ngc-network-setup
sudo ln -s /etc/init.d/ngc-network-setup /etc/rc4.d/S99ngc-network-setup
sudo ln -s /etc/init.d/ngc-network-setup /etc/rc5.d/S99ngc-network-setup

Part C. Run Run in all-in-one mode The daemon free5gc-ngcd includes AMF, SMF, UPF, HSS, and PCRF. Thus, instead of running all 5 daemons, you can just run free5gc-ngcd in your development environment.

./free5gc-ngcd

While running free5gc-ngcd All logs for AMF, SMF, UPF, HSS, and PCRF are written to ./install/var/log/free5gc/free5gc.log. All settings are managed in one place for ./install/etc/free5gc/free5gc.conf. You can find the log/conf path at the beginning of the running screen. You can user -f argument to specify config file to be used. Run functions separately We also provide 5GC functions running separately.

./free5gc-upfd
./free5gc-amfd
./free5gc-smfd
./nextepc-hssd
./nextepc-pcrfd

Note: We also provide a reference for 5GC functions running in separate machines.

[Optional] Self-test We provide a program that checks whether the installation is correct. After running the wireshark, select loopback interface, and then filter s1ap || diameter || gtpv2 || gtp and run ./test/testngc. You can see the packets virtually created.

./test/testngc -f install/etc/free5gc/test/free5gc.testngc.conf

Part D. Web User Interface Install Node.js and NPM

sudo apt-get -y install curl
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get -y install nodejs

Install the dependencies to run WebUI (first time)

cd webui
npm install

Run WebUI

cd webui
npm run dev

Now the web server is running on http://localhost:3000. The default username and password are “admin” and “1423”.

Core Network Configuration free5GC configuration file Modify ./install/etc/free5gc/free5gc.conf

amf-slap address (line 67)

amf:
  s1ap:
    addr: <IP of GW NIC to eNB: 192.188.2.2>

upf-gtpu address (line 162)

smf:
  upf:
    addr: <IP of GW NIC to eNB: 192.188.2.2>

AMF GUMMEI (line 91)

amf:
  gummei:
    plmn_id:
      mcc: <eNB MCC: 208>
            mnc: <eNB MNC: 93>
    mme_gid: <eNB MME GID: 1>
    mme_code: <eNB MME Code: 1>    

AMF TAI (line 130)

amf:
  tai:
    plmn_id:
      mcc: <eNB MCC: 208>
            mnc: <eNB MNC: 93>
        tac: <eNB TAC: 1>

Add subscriber (UE) Add a subscriber by the Web UI Run the web server:

cd ./webui && npm run dev

Visit http://localhost:3000

 - Username : admin
 - Password : 1423

Add a subscriber with IMSI, K, OPc

 - Go to Subscriber Menu.
 - Click `+` Button to add a new subscriber.
 - Fill the IMSI, security context(K, OPc, AMF), and APN of the subscriber.
 - Click `SAVE` Button

This addition will take effect immediately on free5GC without restaring any daemon.

Rebuild Project To completely rebuild the project after modifying source code

(Control-C kill free5gc-ngcd)
make maintainer-clean
rm -rf ./install
git pull
autoreconf -iv
./configure --prefix=`pwd`/install
make -j `nproc`
make install
./free5gc-ngcd

Troubleshooting Note for modifying configuration file Use space for indent. DO NOT use tab. A white space must be added between the colon and value after the item name, e.g. addr: 192.188.2.2

./test/testngc test failure

Make sure all configuration files and environment settings are correct.

Kill testngc process which didn’t finish correctly

killall -9 testngc

Remove test subscriber left by previous failed test (NextEPC issue #57)

$ mongo
> use free5gc
> db.subscribers.find()  ### (Check the test subscriber)
> db.subscribers.drop()  ### Remove all subscriber
> db.subscribers.find()  ### (Check that all subscribers are empty)
./free5gc-ngcd errors

ERRR: - The certificate is expired (NextEPC issue #94)

cd support/freeDiameter
./make_certs.sh .
cd ../..
make install

Address already in use

$ killall -9 testngc

or

$ killall -9 free5gc-ngcd

Rebuild failure

config.status: error: cannot find input file: `Makefile.in' (NextEPC issue #68)
autoheader \
    && aclocal \
    && libtoolize --ltdl --copy --force \
    && automake --add-missing --copy \
    && autoconf \
    && ./configure

Appendix A: Program the SIM Card

Install packages:

sudo apt-get install pcscd pcsc-tools libccid python-dev swig python-setuptools python-pip libpcsclite-dev
sudo pip install pycrypto

Download PySIM

git clone git://git.osmocom.org/pysim.git

Change to pyscard folder and install

cd <pyscard-path>
sudo /usr/bin/python setup.py build_ext install

Verify your reader is ready

sudo pcsc_scan

Check whether your reader can read the SIM card

cd <pysim-path>
./pySim-read.py –p 0

Program your SIM card information

./pySim-prog.py -p 0 -x 208 -y 93 -t sysmoUSIM-SJS1 -i 208930000000003 --op=8e27b6af0e692e750f32667a3b14605d -k 8baf473f2f8fd09487cccbd7097c6862 -s 8988211000000088313 -a 23605945

You can get your SIM card from sysmocom. You also need a card reader to write your SIM card. You can get a card reader from here or equivalent device will do.

Referensi

Pranala Menarik