OpenXG is a series of 5G/6G-oriented open source projects developed by Open Source Radio Access Network Community. Currently, the community has developed the project from five aspects, including:
* Core network projects, 3GPP R15/R16 specification compliant network functions have been developed, including AMF, SMF, NRF, UPF, AUSF, UDM, AUSF, NWDAF, etc. Message level stateless mechanism is introduced in to the core network to make it better adapted to the cloud environment.
* Open hardware reference design, the reference design of heterogeneous computing hardware, white-box radio frontend, and open source UE hardware are also opened to the community.
* Radio access network projects, currently CU, DU and UE protocol software are developed, which is mainly compliant with 3GPP R15/R16 specifications. The software is developed by a modular-design, and which is flexible to customize to different vertical scenarios.
* AI-enabled management projects, three kinds of projects are developed under this category, including the AIEngine, which is aimed to provide the core AI capability for the management, the network measurement, and computing network for cloud-edge-end collaborative.
* Uses cases and applications in verticals, some key use cases when applying OpenXG to vertical scenarios are also developed as a reference for the community.
# 2. License
The OpenXG series projects are distributed under OS-RAN license, which is derived from the Fair, Reasonable, and Non-Discriminatory principle. See [online version for details](http://www.openxg.org.cn/?falu_69.html).
# 3. How to start
## Download source code from Gitlab
```
http://git.opensource5g.org/openxg/upf.git
```
As master branch is usually the stable branch, so we would suggest you start from the master:
```
git checkout master
```
## Compile and install the UPF
### Configure golang
To configure the golang compilation environment, download the golang 1.15.7 installation package, decompress the package to /root, and copy the go folder to /usr/local.
Configure golang environment variables as user root
```
cd /root
mkdir workspace
vi ~/.bashrc
```
Copy the following to the ~/.bashrc file:
```
export GOROOT="/usr/local/go"
export GOBIN=$GOROOT/bin
export GOPATH="/root/workspace"
export PATH=:$PATH:$GOBIN
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
```
After the copy is complete, execute the `source ~/.bashrc` command
Run `go env` to see if the golang environment is normal.
### compile VPP
```
cd upf/scripts
./build_upf.sh --pre_install
./build_upf.sh --vpp
```
### compile N4
```
cd witxg-upf/scripts
./build_upf.sh --n4
```
### Modify the configuration file
```
vpp:
system:
gtpu_entry_ip: UPF-N3 IP
gtpu_export_ip: UPF-N6 IP
ip_link:
ueip: UE IP address pool
ueIPPrefix: UP IP subnet mask
snatInter: interface name
snatIP: interface IP
vppHost: vpphost interface name
vppHostIP: vpphost IP
gtpu_entry: UPF-N3 interface name
gtpu_export: UPF-N6 interface name
cpu: CPUMASK
n4:
smf: SMF-N4 IP
upf: UPF-N4 IP
logSize: 100
```
## launch UPF
If the above steps have been completed, you can run UPF: