There are no gNB and UE for standalone 5GC available in the market yet.
For questions and support please use the official forum. The issue list of this repo is exclusively for bug reports and feature requests.
- Software
- OS: Ubuntu 18.04
- gcc 7.3.0
- Go 1.14.4 linux/amd64
- kernel version 5.0.0-23-generic (MUST for UPF)
Note: Please use Ubuntu 18.04 and kernel version 5.0.0-23-generic
You can use go version
to check your current Go version.
- 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
-
Required kernel version
5.0.0-23-generic
. This request is from the module gtp5g that we has used. Any more details please check here# Check kernel version $ uname -r 5.0.0-23-generic
-
Require go language
- If another version of Go is installed
- Please remove the previous Go version
sudo rm -rf /usr/local/go
- Install Go 1.14.4
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
- Please remove the previous Go version
- Clean installation
- Install Go 1.14.4
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} echo 'export GOPATH=$HOME/go' >> ~/.bashrc echo 'export GOROOT=/usr/local/go' >> ~/.bashrc echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> ~/.bashrc source ~/.bashrc
- Install Go 1.14.4
- If another version of Go is installed
-
Required packages for control plane
sudo apt -y update sudo apt -y install mongodb wget git sudo systemctl start mongodb
-
Required packages for user plane
sudo apt -y update sudo apt -y install git gcc cmake autoconf libtool pkg-config libmnl-dev libyaml-dev go get -u github.com/sirupsen/logrus
-
Network Setting
sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE sudo systemctl stop ufw
-
Clone free5GC project
cd ~ git clone --recursive -b v3.0.3 -j `nproc` https://github.com/free5gc/free5gc.git cd free5gc
(Optional) If you want to use the nightly version, runs:
cd ~/free5gc git checkout master git submodule sync git submodule update --init --jobs `nproc` git submodule foreach git checkout master git submodule foreach git pull --jobs `nproc`
-
Run the script to install dependent packages
cd ~/free5gc go mod download
In step 2, the folder name should remain free5gc. Please do not modify it or the compilation would fail.
-
Compile network function services in
free5gc
individually, e.g. AMF (redo this step for each NF), orcd ~/free5gc go build -o bin/amf -x src/amf/amf.go
To build all network functions in one command
./build.sh
-
Please check Linux kernel version if it is
5.0.0-23-generic
uname -r
Get Linux kernel module 5G GTP-U
git clone -b v0.1.0 https://github.com/PrinzOwO/gtp5g.git cd gtp5g make sudo make install
-
Build from sources
cd ~/free5gc/src/upf mkdir build cd build cmake .. make -j`nproc`
Note: UPF's config is located at free5gc/src/upf/build/config/upfcfg.yaml
Option 1. Run network function service individually, e.g. AMF (redo this for each NF), or
cd ~/free5gc
./bin/amf
Note: For N3IWF needs specific configuration in section B
Option 2. Run whole core network with command
./run.sh
To run N3IWF, make sure the machine is equipped with three network interfaces. (one is for connecting AMF, another is for connecting UPF, the other is for IKE daemon)
We need to configure each interface with a suitable IP address.
We have to create an interface for IPSec traffic:
# replace <...> to suitable value
sudo ip link add ipsec0 type vti local <IKEBindAddress> remote 0.0.0.0 key <IPSecInterfaceMark>
Assign an address to this interface, then bring it up:
# replace <...> to suitable value
sudo ip address add <IPSecInterfaceAddress/CIDRPrefix> dev ipsec0
sudo ip link set dev ipsec0 up
Run N3IWF (root privilege is required):
cd ~/free5gc/
sudo ./bin/n3iwf
Start Wireshark to capture any interface with pfcp||icmp||gtp
filter and run the tests below to simulate the procedures:
cd ~/free5gc
chmod +x ./test.sh
a. TestRegistration
(In directory: ~/free5gc)
./test.sh TestRegistration
b. TestServiceRequest
./test.sh TestServiceRequest
c. TestXnHandover
./test.sh TestXnHandover
d. TestDeregistration
./test.sh TestDeregistration
e. TestPDUSessionReleaseRequest
./test.sh TestPDUSessionReleaseRequest
f. TestPaging
./test.sh TestPaging
g. TestN2Handover
./test.sh TestN2Handover
h. TestNon3GPP
./test.sh TestNon3GPP
i. TestULCL
./test_ulcl.sh -om 3 TestRegistration
For more details, you can reference to our wiki
Detailed changes for each release are documented in the release notes.