OrionOS 7.05 brings a new traffic-engine data layout, CGNAT port blocks that are never shared or lost, NAT logs that stay complete across restarts, DHCP server ports closed on the uplink, and security updates for OpenSSH, rsync and atftpd. It contains everything from the unpublished releases 7.01 to 7.04, so a gateway moves to it with one image upgrade. Every number marked measured comes from the published 7.05 image at 128,000 live PPPoE subscribers with traffic.
Each part of 7.05 changes something an ISP pays for: maintenance windows, support calls, compliance work or risk at the network edge.
Within 7.05, the traffic engine and the session service update live. Subscribers stay online and billing continues, because sessions keep their Acct-Session-Id.
A port block is never shared by two subscribers and never lost until a restart. A released block waits 60 s before anyone else gets it, and a check every 10 minutes repairs any leak.
NAT logs (syslog and IPFIX) stay continuous across traffic-engine restarts. QoS-only mode now logs every new UDP flow and inbound port-forward flows, with the public port on every IPv4 record.
DHCP server ports 67 and 547 are dropped on the uplink, NULL-scan TCP is dropped in both datapath modes, and OpenSSH, rsync, atftpd and the kernel carry current security fixes.
128,000 subscribers come online in 344 s after a mass redial, with 0 flaps. IPoE sessions behind a silent access switch are closed in seconds, with Accounting-Stop.
CGNAT pool changes that need a restart are held, not half-applied, and are shown as pending. Unclear yes/no settings are reported. A bandwidth view of 128,000 subscribers takes 0.21 s.
One standard x86 server. The traffic engine runs as XDP inside the NIC driver; the session service handles PPPoE, IPoE and RADIUS; NOC2 manages the fleet. In QoS-only mode XDP shapes and counts, and the kernel does NAT. In full-CGNAT mode XDP does NAT and firewall too, and sends the packet straight to the WAN.
The lab server is an AMD EPYC 9375F (32 cores / 64 threads, 128 GB) with two Intel E810 100G ports. A traffic generator emulates 128,000 PPPoE subscribers and sends traffic on 640 + 640 streams (every 200th session, both directions). The generator has 2 × 10G ports and tops out at about 1.2 million packets per second, so it is the limit in these tests, not the BNG.
zero to 128,000 subscribers online: ~372 new subscribers per second, 0 flaps
at the plateau: 0.984 Mpps of 1,400-byte packets, 0 NIC drops over 156 s
of 64 CPU threads busy at the 128k plateau with traffic (QoS-only)
to close all 128,000 sessions in a mass logout, nothing left behind
P1 = 1,400-byte packets (bandwidth). P2 = 128-byte packets (packet rate). Both are capped by the traffic generator (2 × 10G, ~1.2 Mpps).
Nanoseconds of XDP program time per packet from the kernel's BPF statistics, at 128,000 subscribers. Lower is better. Includes the cost of the statistics themselves.
Softirq and drops: 30 samples of 30 s at 128,000 subscribers, ~1 Mpps. Softirq = CPU time spent receiving and processing packets.
We profile CPU and memory at 20,000, 40,000, 80,000 and 128,000 subscribers in every run, so a cost that grows faster than the subscriber count shows up early.
Memory = resident set size at each point of the ramp. At 128,000 subscribers the session service holds ~17 KB and the traffic engine ~4 KB per subscriber. The server had 128 GB.
A BNG is upgraded and restarted far more often than it is installed. 7.05 does all three of the risky moves with 128,000 subscribers online and traffic flowing, and we measure loss, flaps and billing records for each.
ppm = lost packets per million sent, download direction, from the generator's per-stream counters. Each event is shown next to a control window of the same length taken just before it, so the noise floor of the measurement is visible.
| At 128,000 subscribers with traffic | QoS-only | Full-CGNAT |
|---|---|---|
| Session flaps (all three events) | pending | pending |
| Accounting-Stop records sent by a crash (kill -9) | pending | pending |
| Sessions online after the live upgrade | pending | pending |
| Soak: loss over 6 × 300 s at full traffic | pending | pending |
| NIC page-pool warnings after every event | pending | pending |
In full-CGNAT mode each subscriber gets a block of ports on a shared public address. If a block is handed out twice, one customer receives another customer's traffic. If a block is lost, a public address slowly fills up. 7.05 closes both doors.
of every public IP's port range is handed out. Active subscribers get X blocks of 128 ports (504 blocks per IP); inactive (walled-garden) subscribers get one 64-port block (1,008 blocks per IP). Before 7.05 the allocator stopped at block 512, so a 64-port pool filled at half its capacity.
before a released block goes to another subscriber, even when the public IP has run out of blocks.
between reconcile checks. repair by default; detect and off are available.
RELEASE records written when 128,000 full-CGNAT subscribers were torn down, one per allocated block.
cgnat_restart_pending in NOC status and in bngxdpctl cgnat pool, so the box never runs on a mix of old and new pool settings.A legal request asks "who had this address and port at this time?". The answer is only as good as the log. 7.05 keeps the log continuous when the traffic engine restarts, and widens what QoS-only mode records.
A zero-downtime restart no longer writes a second ALLOC for every live subscriber. A stop followed by a start writes matching RELEASE and ALLOC records. Syslog and IPFIX both.
Games, VoIP, VPN, any port, not only DNS and QUIC. Inbound port-forward flows are logged too, and every IPv4 record carries the public (translated) port.
NAT log completeness across a zero-downtime restart at 128,000 subscribers: pending.
When a switch or OLT on the access side goes quiet, its IPoE subscribers must be released quickly, with Accounting-Stop, so that billing is right and addresses and CGNAT blocks return to the pool.
| Measured | Result |
|---|---|
| Sessions active after the access side stopped | 0 after ~2 s |
| Sessions with a Terminate-Cause | 2,000 of 2,000 |
| Terminate-Cause | User-Request |
| Sessions terminated twice | 0 |
A CLI or RADIUS terminate also ends an IPoE DHCP session at once, with Accounting-Stop; the customer router gets a DHCPNAK at its next renewal. The configuration migration sets this on every upgraded box.
Every upload packet needs a routing answer: which WAN interface, which next hop. The 7.05 engine asks the kernel's forwarding table once and reuses that answer for the egress, on all three WAN layouts we see in the field.
Median of repeated runs of the full XDP program per case (bpftool prog run) on the published 7.05 engine. "Answer reused" is what the engine does when the WAN interface is recognised; "second lookup" is the path it takes otherwise. A microbenchmark measures the program alone, not a loaded server.
native_wan_vlans (or to be the first download interface). Otherwise IPv6 takes the second-lookup path: about 80 ns slower per packet, same result.DHCP server ports 67 (DHCPv4) and 547 (DHCPv6) arriving on the uplink are dropped by the firewall template. A DHCP server for subscribers must never be reachable from the internet side.
OpenSSH 10.6p2, rsync 3.5.2, atftpd 0.8.1 and kernel 7.3.4. The session service carries bounds fixes in DHCPv4 option handling and the CLI parser.
TCP packets with no flags set are dropped in QoS-only and full-CGNAT mode; full-CGNAT also screens IPv6 TCP the same way. Normal TCP is not affected.
Protection rules for ports 22, 53 and 161 apply only to traffic addressed to the gateway itself. Subscribers' own traffic on these ports is no longer dropped by them.
Subscribers in the inactive pool are really walled, and a rate CoA no longer reactivates them. NOC inactive walls a subscriber at once and keeps the same public IP.
Subscriber upload addressed to one of the gateway's own addresses is passed to the gateway, not treated as internet traffic.
Wall time of bngxdpctl list --format bw at 128,000 subscribers, 3 runs each, in the order daemon / direct / daemon. The engine keeps a ready snapshot, so the command reads it instead of walking the datapath maps.
sub show and diagThe subscriber's RADIUS or CoA rate is shown; a direction without a limit reads "unlimited".
config_set returns written, restart_required and held_keys next to applied.
A yes/no setting written as 1 or "on" logs an is not a boolean warning when it differs from the value used.
Faster flow-tracker clean-up after a load ends.
At 128,000 subscribers the CPU has room to spare, so the network card decides how much traffic one server carries. The most common choice, the Intel E810-CQDA2, has two 100G ports but one controller: it carries 100 Gbit/s in total, in any bond mode.
| E810-CQDA2 bonding | Maximum | How it behaves |
|---|---|---|
| Active-backup (mode 1) | 100 Gbit/s | Only one port is active. The second stands by and takes the traffic only if the first fails. |
| LACP (mode 4) / XOR (mode 2) | 100 Gbit/s total | Traffic is shared between the two ports. Because of the chip's internal limit they balance dynamically (for example 2 × 50 or 60 + 40 Gbit/s), but the sum never exceeds 100 Gbit/s. |
| Split with Intel EPCT | 100 Gbit/s total | 2 × 50, 4 × 25 or 8 × 10 Gbit/s: more ports, the same ceiling. |
Subscriber traffic enters and leaves through the same card (access VLAN in, WAN VLAN out), so plan the card's capacity for both directions together.
7.05 contains everything from 7.01 to 7.04. A gateway on 7.00 or older moves to it with one image upgrade and one reboot in one window, and its configuration is migrated on the way. After that, live updates work again.
7.05 uses a new shared data layout for the traffic engine, so a box older than 7.01 takes the image and a reboot, not a live update. The live update tools refuse such a box with a clear message.
There is no rollback to a pre-7.01 image or to the old session service. A failed upgrade is fixed forward, so plan the window and keep the console reachable.
Look for is not a boolean in the traffic-engine log and correct those keys to true or false, checking each first: some switch on a mode that needs a CGNAT cold start.
A new BNG should not need an engineer on site. The BNGSOFT live installer sets up a server from an install code created in NOC2, over the server's remote console or network boot.
The published image went through the same gates on two kinds of system: a 128,000-subscriber lab server with traffic in both datapath modes, and two demo gateways that run like customer boxes, one per mode. Each gate had a pass/fail rule set before it ran.
We list the limits we know, so that you plan for them rather than discover them.
| Area | What to know |
|---|---|
| DHCP relay | A box with dhcpv4-relay= whose DHCP server answers through the uplink needs an accept rule before the new drop (port 67, and 547 for DHCPv6). A read-only survey of 175 gateways found no relay configured. |
| Full-CGNAT after a mass redial | On a pool more than about 50% used, new flows can be refused for up to 60 s while released blocks wait out the reuse delay. Watch block_alloc_failures and refused_min_age. |
| Untagged WAN | The check for gateway addresses costs up to about 50 ns per untagged upload packet that passes through. |
| Syslog over UDP | Can lose records without the box seeing it. For legal logs use TCP or RELP with a disk-assisted queue, and check that local4 is forwarded at all. |
bngsessd, bngsessctl; old names kept as links.We can show the 7.05 lab run live, walk your team through the upgrade path, and size a server for your subscriber base, busy-hour traffic and NIC choice.
Figures marked measured come from a BNGSOFT lab system (AMD EPYC 9375F, 32 cores / 64 threads, 128 GB, Intel E810 with 2 × 100G ports) running the published OrionOS 7.05 image, with 128,000 emulated PPPoE subscribers and 640 + 640 traffic streams from a BNG Blaster traffic generator (2 × 10G, about 1.2 Mpps ceiling), and from BNGSOFT demo gateways on the same image, in November 2026. Traffic numbers are limited by the generator, not by the BNG. Figures marked by design describe how the software works. The engine microbenchmark measures the XDP program alone. Your results depend on your hardware, traffic mix and configuration.
Product page: BNGSOFT platform · Talk to us