packetrusher

High performance 5G UE/gNB Simulator and CP/UP load tester.

https://github.com/hewlettpackard/packetrusher

Science Score: 57.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (16.3%) to scientific vocabulary

Keywords

5g 5g-simulation 5gc gnb load-testing packetrusher
Last synced: 6 months ago · JSON representation ·

Repository

High performance 5G UE/gNB Simulator and CP/UP load tester.

Basic Info
  • Host: GitHub
  • Owner: HewlettPackard
  • License: apache-2.0
  • Language: Go
  • Default Branch: main
  • Homepage:
  • Size: 12.4 MB
Statistics
  • Stars: 140
  • Watchers: 10
  • Forks: 32
  • Open Issues: 31
  • Releases: 3
Topics
5g 5g-simulation 5gc gnb load-testing packetrusher
Created about 2 years ago · Last pushed 11 months ago
Metadata Files
Readme Contributing License Citation Codeowners

README.md

PacketRusher

PacketRusher Logo


Description

Now with SUCI Concealing/Deconcealment (Null-Scheme, Profile A (X25519), Profile B (P-256))!

PacketRusher is a tool dedicated to the performance testing and automatic validation of 5G Core Networks using simulated UE (user equipment) and gNodeB (5G base station).

If you have questions or comments, feel free to open an issue after a careful review of existing closed issues.

PacketRusher borrows libraries and data structures from the free5gc project.

Features

  • Simulate multiple UEs and gNodeB from a single tool
    • We tested up to 10k UEs!
  • Supports both N2 (NGAP) and N1 (NAS) interfaces for stress testing
  • --pcap parameter to capture pcap of N1/N2 traffic
  • Implements main control plane procedures:
    • SUCI Concealing/Deconcealment (Null-Scheme, Profile A (X25519), Profile B (P-256))
    • UE attach/detach (registration/identity request/authentification/security mode) procedures
    • Create/Delete PDU Sessions, up to 15 PDU Sessions per UE
    • Xn handover: UE handover between simulated gNodeB (PathSwitchRequest)
    • N2 handover: UE handover between simulated gNodeB (HandoverRequired)
    • UE Enter/Exit CM-IDLE procedures (Service Request)
    • GUTI Re-registration
    • Supports 5G roaming: Tested with new https://github.com/open5gs/open5gs/issues/2194 Roaming feature
  • Implements high-performant N3 (GTP-U) interface
    • Generic tunnel supporting all kind of traffic (TCP, UDP, Video…)
    • We tested iperf3 traffic, and Youtube traffic through PacketRusher
    • We roughly reach 5 GB/s per UE, which is more than what a real UE can achieve.
  • Integrated all-in-one mocked 5GC/AMF for PacketRusher's integration testing

Installation

Quick start guide

The following is a quick start guide, for more details on the installation, configuration or usage, you may refer to the wiki.

Requirements

  • Ubuntu 20.04-24.04
    • All Linux distibutions with kernel >= 5.4 should work, but untested.
    • There might be issues with frankenstein kernel from RHEL/CentOS/Rocky, feel free to open a bug if you encounter one!
  • Windows is not supported (Windows does not support SCTP)
  • Go 1.23.0 or more recent
  • Root privilege
  • Secure boot disabled (for custom kernel module)

PacketRusher is not yet supported on Docker.

Dependencies

```bash $ sudo apt install build-essential linux-headers-generic make git wget tar linux-modules-extra-$(uname -r)

Warning this command will remove your existing local Go installation if you have one:

$ wget https://go.dev/dl/go1.24.1.linux-amd64.tar.gz && sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.24.1.linux-amd64.tar.gz

Add go binary to the executable PATH variable:

$ echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.profile ```

Download PacketRusher source code

bash $ git clone https://github.com/HewlettPackard/PacketRusher # or download the ZIP from https://github.com/HewlettPackard/PacketRusher/archive/refs/heads/master.zip and upload it to your Linux server $ cd PacketRusher && echo "export PACKETRUSHER=$PWD" >> $HOME/.profile $ source $HOME/.profile

Build free5gc's gtp5g kernel module

```bash $ cd $PACKETRUSHER/lib/gtp5g $ make clean && make && sudo make install

Make sure you have Secure boot disabled if you are unable to install the custom Kernel module

```

Build PacketRusher CLI

bash $ cd $PACKETRUSHER $ go mod download $ go build cmd/packetrusher.go $ ./packetrusher --help

You can edit the configuration in $PACKETRUSHER/config/config.yml as specified here, and then run a basic scenario using sudo ./packetrusher ue while in the $PACKETRUSHER folder.
More complex scenarios are possible using sudo ./packetrusher multi-ue, see ./packetrusher multi-ue --help for more details.
For more details on the installation, configuration or usage, you may refer to the wiki.

Contributing

We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great!
You can review our contributing guide.

Developer's Certificate of Origin

All contributions must include acceptance of the DCO.

Sign your work

To accept the DCO, simply add this line to each commit message with your name and email address (git commit -s will do this for you):

Signed-off-by: Jane Example <jane@example.com>

For legal reasons, no anonymous or pseudonymous contributions are accepted.

Citation

If you use this software, you may cite it as below: latex @software{PacketRusher, author = {D'Emmanuele, Valentin and Raguideau, Akiya}, doi = {10.5281/zenodo.10446651}, month = nov, title = {{PacketRusher: High performance 5G UE/gNB Simulator and CP/UP load tester}}, url = {https://github.com/HewlettPackard/PacketRusher}, version = {1.0.0}, year = {2023} }

License

© Copyright 2023 Hewlett Packard Enterprise Development LP

© Copyright 2024-2025 Valentin D'Emmanuele

This project is under the Apache 2.0 License license.

By contributing here, you agree to license your contribution under the terms of the Apache 2.0 License. All files are released with the Apache License 2.0.

PacketRusher borrows libraries and data structures from the free5gc project, and is originally based upon my5G-RANTester.

Owner

  • Name: Hewlett Packard Enterprise
  • Login: HewlettPackard
  • Kind: organization

Hewlett Packard Enterprise on github; please contact github@hpe.com for access

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "D'Emmanuele"
  given-names: "Valentin"
  orcid: "https://orcid.org/0009-0008-5802-401X"
- family-names: "Raguideau"
  given-names: "Akiya"
title: "PacketRusher: High performance 5G UE/gNB Simulator and CP/UP load tester"
version: 1.0.0
doi: 10.5281/zenodo.10446651
date-released: 2023-11-29
url: "https://github.com/HewlettPackard/PacketRusher"
references:
  - type: article
    authors:
    - given-name: Lucas
      family-name: Silveira
      name-suffix: B.D.
    - given-name: Henrique
      family-name: de Resende
    - given-name: Cristiano
      family-name: Both
      name-suffix: B.
    - given-name: Johann
      family-name: Marquez-Barja
      name-suffix: M.
    - given-name: Bruno
      family-name: Silvestre
    - given-name: Kleber
      family-name: Cardoso
      name-suffix: V.
    title: "Tutorial on communication between access networks and the 5G core"
    year: 2022
    journal: Computer Networks
    volume: 216
    doi: 10.1016/j.comnet.2022.109301
    url: https://doi.org/10.1016/j.comnet.2022.109301

GitHub Events

Total
  • Create event: 3
  • Release event: 1
  • Issues event: 50
  • Watch event: 31
  • Issue comment event: 62
  • Push event: 12
  • Gollum event: 2
  • Pull request event: 24
  • Pull request review event: 14
  • Pull request review comment event: 3
  • Fork event: 9
Last Year
  • Create event: 3
  • Release event: 1
  • Issues event: 50
  • Watch event: 31
  • Issue comment event: 62
  • Push event: 12
  • Gollum event: 2
  • Pull request event: 24
  • Pull request review event: 14
  • Pull request review comment event: 3
  • Fork event: 9

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 79
  • Total pull requests: 56
  • Average time to close issues: 3 months
  • Average time to close pull requests: 3 days
  • Total issue authors: 27
  • Total pull request authors: 10
  • Average comments per issue: 1.3
  • Average comments per pull request: 0.7
  • Merged pull requests: 49
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 21
  • Pull requests: 12
  • Average time to close issues: about 1 month
  • Average time to close pull requests: about 15 hours
  • Issue authors: 14
  • Pull request authors: 5
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.58
  • Merged pull requests: 11
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • linouxis9 (32)
  • yoursunny (7)
  • huahuaLover (4)
  • IgnacioCTO (3)
  • rjaksa (3)
  • abousselmi (3)
  • Mouradnetworking (2)
  • LSKhappychild (2)
  • infinitydon (2)
  • Borjis131 (2)
  • sambitcom (2)
  • avrodriguezgrad (2)
  • HasibuzzamanFUAS (1)
  • MA3CIN (1)
  • Raguideau (1)
Pull Request Authors
  • linouxis9 (39)
  • Raguideau (20)
  • brianchennn (11)
  • yoursunny (9)
  • abousselmi (6)
  • fossabot (2)
  • chen042531 (1)
  • gw-de (1)
  • infinitydon (1)
  • Alonza0314 (1)
Top Labels
Issue Labels
enhancement (33) bug (31)
Pull Request Labels

Dependencies

.github/workflows/ci-workflow.yml actions
  • actions/checkout v2 composite
  • actions/setup-go v2 composite
docker/Dockerfile docker
  • $BASE_IMAGE latest build
docker/docker-compose.yml docker
  • packetrusher latest
go.mod go
  • github.com/aead/cmac v0.0.0-20160719120800-7af84192f0b1
  • github.com/antonfisher/nested-logrus-formatter v1.3.1
  • github.com/cpuguy83/go-md2man/v2 v2.0.2
  • github.com/davecgh/go-spew v1.1.1
  • github.com/free5gc/go-gtp5gnl v1.4.5
  • github.com/free5gc/nas v1.1.1
  • github.com/free5gc/openapi v1.0.6
  • github.com/free5gc/util v1.0.4
  • github.com/golang-jwt/jwt v3.2.1+incompatible
  • github.com/google/gopacket v1.1.19
  • github.com/ishidawataru/sctp v0.0.0-20230406120618-7ff4192f6ff2
  • github.com/khirono/go-genl v1.0.1
  • github.com/khirono/go-nl v1.0.4
  • github.com/khirono/go-rtnllink v1.1.1
  • github.com/kr/text v0.2.0
  • github.com/mitchellh/mapstructure v1.4.2
  • github.com/russross/blackfriday/v2 v2.1.0
  • github.com/sirupsen/logrus v1.9.2
  • github.com/tetratelabs/wazero v1.3.0
  • github.com/urfave/cli/v2 v2.25.5
  • github.com/vishvananda/netlink v1.1.0
  • github.com/vishvananda/netns v0.0.4
  • github.com/wmnsk/go-gtp v0.8.6
  • github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673
  • golang.org/x/net v0.16.0
  • golang.org/x/sys v0.13.0
  • gopkg.in/yaml.v2 v2.4.0
go.sum go
  • github.com/aead/cmac v0.0.0-20160719120800-7af84192f0b1
  • github.com/antonfisher/nested-logrus-formatter v1.3.1
  • github.com/cpuguy83/go-md2man/v2 v2.0.2
  • github.com/creack/pty v1.1.9
  • github.com/davecgh/go-spew v1.1.0
  • github.com/davecgh/go-spew v1.1.1
  • github.com/free5gc/go-gtp5gnl v1.4.5
  • github.com/free5gc/nas v1.1.1
  • github.com/free5gc/openapi v1.0.6
  • github.com/free5gc/util v1.0.4
  • github.com/golang-jwt/jwt v3.2.1+incompatible
  • github.com/google/go-cmp v0.5.8
  • github.com/google/gopacket v1.1.19
  • github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1
  • github.com/ishidawataru/sctp v0.0.0-20230406120618-7ff4192f6ff2
  • github.com/jtolds/gls v4.20.0+incompatible
  • github.com/khirono/go-genl v1.0.1
  • github.com/khirono/go-nl v1.0.4
  • github.com/khirono/go-rtnllink v1.1.1
  • github.com/kr/pretty v0.1.0
  • github.com/kr/text v0.2.0
  • github.com/mitchellh/mapstructure v1.4.2
  • github.com/pascaldekloe/goe v0.1.0
  • github.com/pmezard/go-difflib v1.0.0
  • github.com/russross/blackfriday/v2 v2.1.0
  • github.com/sirupsen/logrus v1.9.2
  • github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d
  • github.com/smartystreets/goconvey v1.6.4
  • github.com/stretchr/objx v0.1.0
  • github.com/stretchr/testify v1.7.0
  • github.com/tetratelabs/wazero v1.3.0
  • github.com/urfave/cli/v2 v2.25.5
  • github.com/vishvananda/netlink v1.1.0
  • github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df
  • github.com/vishvananda/netns v0.0.4
  • github.com/wmnsk/go-gtp v0.8.6
  • github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673
  • golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
  • golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
  • golang.org/x/lint v0.0.0-20200302205851-738671d3881b
  • golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee
  • golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
  • golang.org/x/net v0.0.0-20190620200207-3b0461eec859
  • golang.org/x/net v0.16.0
  • golang.org/x/sync v0.0.0-20190423024810-112230192c58
  • golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a
  • golang.org/x/sys v0.0.0-20190412213103-97732733099d
  • golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444
  • golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8
  • golang.org/x/sys v0.13.0
  • golang.org/x/text v0.3.0
  • golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7
  • golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898
  • gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
  • gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
  • gopkg.in/yaml.v2 v2.4.0
  • gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
  • gopkg.in/yaml.v3 v3.0.1
.github/workflows/codacy.yml actions
  • actions/checkout v3 composite
  • codacy/codacy-analysis-cli-action d840f886c4bd4edc059706d09c6a1586111c540b composite
  • github/codeql-action/upload-sarif v2 composite