free5gc/free5gc
Open source 5G core network base on 3GPP R15
repo name | free5gc/free5gc |
repo link | https://github.com/free5gc/free5gc |
homepage | https://free5gc.org |
language | Go |
size (curr.) | 127 kB |
stars (curr.) | 170 |
created | 2020-01-31 |
license | Apache License 2.0 |
Hardware Tested
There are no gNB and UE for standalone 5GC available in the market yet.
Recommended Environment
- Software
- OS: Ubuntu 18.04
- gcc 7.3.0
- Go 1.12.9 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
Installation
A. Pre-requisite
-
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.12.9
wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz sudo tar -C /usr/local -zxvf go1.12.9.linux-amd64.tar.gz
- Please remove the previous Go version
- Clean installation
- Install Go 1.12.9
wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz sudo tar -C /usr/local -zxvf go1.12.9.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 echo 'export GO111MODULE=off' >> ~/.bashrc source ~/.bashrc
- Install Go 1.12.9
- 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
B. Install Control Plane Entities
-
Clone free5GC project in
$GOPATH/src
cd $GOPATH/src git clone https://github.com/free5gc/free5gc.git cd free5gc git checkout v3.0.2 git submodule sync git submodule update --init --jobs `nproc`
(Optional) If you want to use the nightly version, runs:
cd $GOPATH/src/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 $GOPATH/src/free5gc chmod +x ./install_env.sh ./install_env.sh Please ignore error messages during the package dependencies installation process.
In step 2, the folder name should remain free5gc. Please do not modify it or the compilation would fail.
-
Compile network function services in
$GOPATH/src/free5gc
individually, e.g. AMF (redo this step for each NF), orcd $GOPATH/src/free5gc go build -o bin/amf -x src/amf/amf.go
To build all network functions in one command
./build.sh
C. Install User Plane Function (UPF)
-
Please check Linux kernel version if it is
5.0.0-23-generic
uname -r
Get Linux kernel module 5G GTP-U
git clone https://github.com/PrinzOwO/gtp5g.git cd gtp5g make sudo make install
-
Build from sources
cd $GOPATH/src/free5gc/src/upf mkdir build cd build cmake .. make -j`nproc`
Note: Config is located at $GOPATH/src/free5gc/src/upf/build/config/upfcfg.yaml
Run
A. Run Core Network
Option 1. Run network function service individually, e.g. AMF (redo this for each NF), or
cd $GOPATH/src/free5gc
./bin/amf
Note: For N3IWF needs specific configuration in section B
Option 2. Run whole core network with command
./run.sh
B. Run N3IWF (Individually)
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 $GOPATH/src/free5gc/
sudo ./bin/n3iwf
Test
Start Wireshark to capture any interface with pfcp||icmp||gtp
filter and run the tests below to simulate the procedures:
cd $GOPATH/src/free5gc
chmod +x ./test.sh
a. TestRegistration
(In directory: $GOPATH/src/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
Questions
For questions and support please use the official forum. The issue list of this repo is exclusively for bug reports and feature requests.
Release Note
Detailed changes for each release are documented in the release notes.