Skip to content

v2.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Oct 18:39
· 1 commit to main since this release

The first release since the 20250225 snapshot.

Highlights

  • User-plane tunnels without a kernel module. --tunnel works out of the box: the new ebpf backend carries
    the traffic of the UEs in the kernel with eBPF programs (Linux 6.6 or later), and the new userspace backend
    runs anywhere. gtp5g remains supported, and --tunnel-backend auto, the default, takes the first available of
    ebpf, gtp5g and userspace.
  • As fast as the kernel module, or faster. Through a free5GC UPF on one 16-core host, four UEs carry
    10 Gbit/s uplink and 14 Gbit/s downlink in total with ebpf, against 11 and 10.5 with gtp5g. The README has
    the figures.
  • IPv6 and dual-stack PDU sessions, with ue.pdusessiontype.
  • Several UEs carry traffic through one gNB: --tunnel no longer requires --dedicatedGnb.
  • UEs driven while a test runs: multi-ue --control-socket, then control for one action (idle, reconnect,
    handover, deregister, register…) or run-scenario for a JSON list of them.
  • Procedure results as a JSON report (--report-json) and Prometheus metrics (--metrics-addr).
  • Tagged releases come with Linux amd64 and arm64 archives and a ghcr.io/hewlettpackard/packetrusher
    image, and packetrusher --version tells which one is running.

Added

  • --tunnel-backend ebpf|gtp5g|userspace|auto. Only auto falls back: a backend requested by name that is not
    available is an error.
  • gNB IDs of 22 to 32 bits and a cell ID: gnodeb.plmnlist.gnbidlength and cellid.
  • multi-ue --number-of-gnbs, for handover targets; --numPduSessions 0, to only register; --loopCount and
    --timeBeforeReregistration, for registration loops.
  • ue.tunnelmtu. By default the MTU of a tunnel is the MTU of the N3 interface minus the 44 bytes of GTP-U.
  • The gNB re-establishes a lost AMF association, with a new NG Setup, after releasing the UEs it served.
  • A gNB whose N2 or N3 address is unavailable tries the next ones.
  • Each UE reports its own IMEISV, which strict cores can now decode.
  • CI registers a UE against Open5GS, with traffic through its UPF, and against free5GC.

Changed

  • gtp5g is optional, and its bundled version is 0.10.2, which builds on Linux up to 7.0.
  • A handover keeps the address and the connections of the UE: the address is on val<MSIN>, and the tunnel
    alternates between gtp0<MSIN> and gtp1<MSIN>.
  • A run removes the devices and routing rules that a killed one left behind.
  • A gNB that cannot reach its AMF or complete NG Setup ends the command with an error, and Ctrl-C during startup
    is a clean exit.
  • The first UE uses the configured gNB, and each following UE the next one.
  • Logs are written by zap: a line is now <time> <level> <message>.
  • Go 1.26.2 is required.

Fixed

  • NGAP messages of a UE are handled in order (#102), and one UE's failed procedure no longer stops the simulator.
  • Races during fast registration and deregistration cycles (#187).
  • Duplicate gNB addresses after NG Setup retries (#138).
  • Uplink GTP-U packets leave from the N3 address of their gNB.
  • An N2 handover no longer loses the packets that the UPF still sends to the source gNB.
  • The bundled gtp5g on recent kernels: a handover could leave a CPU dropping every packet until reboot (Linux
    7.0), and the device was no longer lockless (Linux 6.12 and later), which capped its throughput.
  • The SQN is formatted on 6 bytes, and a PDU Session Resource Setup Request without NAS-PDU is accepted.

What's Changed

  • Fix packet-rusher crashing when running multi-ue cmd with loop and certain time parameters by @gw-de in #160
  • add source interface by @chen042531 in #161
  • fix: integrate latest free5gc's refactored MILENAGE library by @linouxis9 in #163
  • fix: off-by-one error in GNBUe.GetSelectedNssai by @yoursunny in #167
  • fix: fmt errors flagged by go vet by @yoursunny in #169
  • fix: format-san-to-6-bytes by @Alonza0314 in #171
  • Upgrade to go-gtp5gnl v1.6.0 by @yoursunny in #170
  • fix: set outer source IP for uplink GTP-U traffic by @yoursunny in #173
  • Replace google/gopacket with gopacket/gopacket by @yoursunny in #174
  • Represent IP addresses as netip.AddrPort by @yoursunny in #177
  • Represent N3 IP address as netip.Addr by @yoursunny in #178
  • Add logic to prevent gNB crash under PDU session create failure by @LSKhappychild in #188
  • Add fallback mechanism for gNB N2 IP setting by @LSKhappychild in #190
  • Make NAS-PDU in PDU Session Resource Setup Request List IE be optional by @LSKhappychild in #191
  • Add local release in case of NGAP EI after pending UE Context Release… by @LSKhappychild in #192
  • Add fallback mechanism for gNB N3 IP setting by @LSKhappychild in #195
  • Fix #187: Resolve race conditions during rapid UE registration/deregistration by @ssam18 in #189
  • feat(gtp5g): upgrade to upstream 4d3c39b by @Niahh in #196
  • Send a decodable, per-UE IMEISV in Security Mode Complete by @midwell in #197
  • Re-establish a lost AMF association instead of going silent by @midwell in #198
  • Stop one UE's NGAP message from ending the simulator by @midwell in #200
  • Share one GTP-U device per gNB so many UEs can carry traffic by @midwell in #199
  • Fix a self-deadlock in the test 5GC when force-releasing PDU sessions by @midwell in #201
  • Refuse PDU Session IDs outside 1..16 instead of crashing by @midwell in #202
  • Make a UE's AMF UE NGAP ID and state safe for concurrent use by @midwell in #203
  • Run build and test on pushes to main by @midwell in #204
  • Send a rejected PDU session's retry from the UE's own goroutine by @midwell in #206
  • fix: Preserve UE message order and finish shutdown after association loss by @linouxis9 in #208
  • refactor: Upgrade free5GC codecs and aio5gc to the native APIs by @linouxis9 in #213
  • fix: Keep tunnel ownership and UE sockets stable through handover by @linouxis9 in #209
  • fix: Correct UE distribution and validate multi-ue arguments by @linouxis9 in #211
  • fix: Repair the Docker workflow and document multi-gNB networking by @linouxis9 in #212
  • fix: Calculate tunnel MTU from N3 and the full GTP-U overhead by @linouxis9 in #210
  • feat: Export procedure results as JSON, CSV and Prometheus metrics by @linouxis9 in #214
  • Support configurable gNB identifier widths by @linouxis9 in #215
  • Add UE procedure controls and JSON scenarios by @linouxis9 in #216
  • Add a userspace GTP-U backend by @linouxis9 in #217
  • Support IPv6 and dual-stack PDU sessions by @linouxis9 in #218
  • Report the build version and publish tagged releases by @linouxis9 in #219
  • Preserve gNB addresses across setup retries by @linouxis9 in #220
  • Make gNB startup cancellable and return its errors by @linouxis9 in #222
  • Add an eBPF GTP-U backend by @linouxis9 in #223
  • Add real-core interoperability CI by @linouxis9 in #224
  • Remove leftovers of the recent changes by @linouxis9 in #228
  • Simplify the tunnel setup by @linouxis9 in #229
  • Simplify the procedure reports by @linouxis9 in #230
  • Retry rejected PDU sessions with one mechanism by @linouxis9 in #231
  • Dispatch NGAP messages through one queue per UE by @linouxis9 in #232
  • Remove test-only seams and tidy argument validation by @linouxis9 in #233
  • Switch logging from logrus to zap by @linouxis9 in #226
  • Add the v2.0.0 changelog by @linouxis9 in #234
  • Add a script measuring the user-plane throughput by @linouxis9 in #235
  • Keep receiving from the source gNB after a handover by @linouxis9 in #238
  • gtp5g: restore lockless transmit and TX stats on recent kernels by @linouxis9 in #237
  • gtp5g: disable BH around the End Marker transmit by @linouxis9 in #236
  • Update Codacy workflow actions by @linouxis9 in #225

New Contributors

Full Changelog: 2025022...v2.0.0