The project implements a traffic generator for 5G Core Network. The traffic generator has the following features:
UE Features
NGAP Features
# initialize your local configuration file
git submodule init
# fetch all the data from that submodule
git submodule update
pip install pycrate
sudo apt-get install python3-dev
pip install pysctp
pip install scapy
pip install pyroute2
sudo apt-get install python3-bpfcc bpfcc-tools linux-headers-$(uname -r)
sudo apt-get install libbpf-dev
sudo apt-get install clang-14 && sudo ln /usr/bin/clang-14 /usr/bin/clang
sudo apt install python3-setuptools
pip install cryptography
sudo apt-get install build-essential
cd CryptoMobile && python3 setup.py install
pip install pyyaml
pip install tabulate
You will need to update the ip address in the files src/config/open5gs-ue.yaml
and src/config/open5gs-gnb.yaml
on the core network VM. The config files are inspired by UERANSIM's config files.
cd ~/cn-tg/
# usage: run.py [-h] [-i INTERVAL] [-u UE_CONFIG_FILE] [-g GNB_CONFIG_FILE] [-f FILE] [-v]
# Run 5G Core traffic generator
# optional arguments:
# -h, --help show this help message and exit
# -i INTERVAL, --interval INTERVAL
# Interval of adding UEs in seconds
# -n NUM_PKTS, --num_pkts NUM_PKTS
# Number of UP packets to send per second
# -u UE_CONFIG_FILE, --ue_config_file UE_CONFIG_FILE
# UE configuration file
# -g GNB_CONFIG_FILE, --gnb_config_file GNB_CONFIG_FILE
# GNB configuration file
# -f FILE, --file FILE Log file directory
# -v, --verbose Increase verbosity (can be specified multiple times)
# -s, --statistics Enable print of statistics
# -e, --ebpf Load ebpf programs to collect and graph SCTP stats
# -p, --period Period/interval (seconds) for printing statistics
python3 run.py -u config/oai-cn5g-ue.yaml -g config/oai-cn5g-gnb.yaml -vvv
Configuring the traffic generator to send IP packets
After PDU session establishment, the traffic generator can generate and send UP traffic for each UE that has established a PDU session. This is achieved by updating the procedures list to include 5GSMPDUSessionTransmission
after 5GSMPDUSessionEstabRequest
, see the sample below. The generator will generate at most the number of packets per second provided above. The default is (1 << 20), meaning it will generate the most it can.
...
# Procedures: a list of UE initiated messages that trigger a given procedure
procedures:
- 5GMMRegistrationRequest
- 5GSMPDUSessionEstabRequest
- 5GSMPDUSessionTransmission
- 5GMMMODeregistrationRequest
The traffic generator records the timestamp for each state transition for the UEs. This can be useful for analysing the performance of the Core Network, the computation cost of each prodecure, among other things. When the traffic genetaor exists, this information is stored in files procedure_times_{cpu}
(since each CPU will act an an independent gNB). Below is a sample result analysis you can extract from the information.
The traffic generator can be used to validate responses from the core network. The response data is checked against what's stated in the 3GPP TS 24.501 version 15.7.0. To start validate increase the verbose of the generator: vvvv
will print only failed validations and vvvvv
will print all the validation results.
For a tutorial on how to run or test the traffic generator with open source 5G networks see the Performance study of Open Source 5G Core networks under docs folder.