What one appliance has and the other does not¶
Written 2026-10-18, from the drivers, the pages and the measurements. The two appliances on the bench are not the same silicon and were not brought up in the same order, so neither has everything the other has - and the status board on the README, which lists what each one has, made that easy to miss: each card listed its own strengths. This page lists the same things for both, so every gap shows.
| mark | means |
|---|---|
| ✅ | built and run on that appliance, with the page that shows it |
| 🟡 | built but not measured there, or only part of it |
| ⬜ | not built for that family yet |
| ➖ | the hardware has nothing of the kind |
The completion figures the families' own pages weigh are 96% for the XGS 3300
(octeon-tx-reference.md) and 91% 92% 93% for the XGS 136
(armada.md).
The table¶
| XGS 3300 · OCTEON TX | XGS 136 · ARMADA | ||
|---|---|---|---|
| Ports | every front port an interface | ✅ 12 of 12, and the module's four | ✅ 14 of 14 |
| assigned at the first boot, by the chassis names | ✅ | ✅ | |
| jumbo frames | ✅ MTU 72 to 9,000 per port, the switch at 10,240 | ✅ MTU 9,000, measured at 989 Mbit/s | |
| transceiver diagnostics | ✅ the Transceivers page | ||
| the medium a cage reports, read from its module | ✅ since 2026-10-19 | ✅ since 2026-10-19 | |
| expansion module | ✅ 4x10G, ports A1 to A4 | ➖ the bay is the host's: modem or Wi-Fi | |
| port identify light | ✅ | ✅ | |
| Data path | receive | ✅ an interrupt per ring | 🟡 polled every millisecond |
| transmit | ✅ seven rings beside the first | ✅ four queues, measured | |
| without a copy per frame | ⬜ a copy each way | ⬜ a copy each way | |
| Flow offload | connections made automatically | ✅ on | ✅ |
| a table the board's size | ✅ 2,000,000 | ✅ 1,500,000 | |
| flow writes posted without a wait | ✅ the high-priority ring | ✅ |
|
| IPv4, with its translation | ✅ | ✅ |
|
| IPv6 | ✅ 9.24 and 9.27 Gbit/s, measured | ✅ |
|
| a connection handed back, revived in place | ✅ 6,100 revived, none refused | ✅ |
|
| a connection returned to the host by hand, a never-offloaded list | ✅ tested live, 2026-10-18 | ✅ |
|
| a connection pf ends, taken out of hardware | ✅ CONN_RECLAIM_FP, not measured with a killed state |
✅ MFLOW_INVALIDATEs the coprocessor refused - a killed state went on at 942 Mbit/sCONN_RECLAIM_FP since 2026-10-18: the stream stops within the second (measured) |
|
| a block list cuts the connections already open | ✅ within two seconds, or the minute's cron (measured) | ✅ the same (measured) | |
| a connection cut by its TLS fingerprint (JA4) | ✅ the listed one stopped, the one beside it ran on (measured) | ✅ the same, both in hardware, measured 2026-10-19; |
|
| each connection's packets and bytes, counted by the coprocessor | ✅ read since 2026-10-19: with pf's count, what crossed the wire to 14 packets in 2.74 million; given to pf's state and rule on request, to the packet (measured) | ✅ |
|
| each port's traffic in hardware, counted by the coprocessor | ✅ |
✅ |
|
| unusual traffic reported: a scan, a sweep, a host beyond its own mean | ✅ (measured) | ✅ measured 2026-10-19: the scan, the sweep and a stream in hardware all reported, the stream's volume from pf's count of what was in hardware (the row above); |
|
| an address dropped by the coprocessor (its DoS table) | ❌ not in the v22 firmware: the three DoS commands answered "not dispatched" (measured); one connection can be dropped (a microflow with action 0) | ⬜ not tried | |
| every flow voided by a ruleset reload | ✅ | ✅ | |
| a thousand connections at once | ✅ |
✅ |
|
| an integrity soak: hours of TLS, every byte checked | ✅ 2,391 GiB, 0 bytes changed (measured) | ✅ 795 GiB in two hours, 0 bytes changed (measured) | |
| IPsec offload | AES-GCM, both ways | ✅ | ✅ |
| AES-CBC with an HMAC | ✅ | ✅ | |
| NAT traversal | ✅ | ✅ | |
| replay windows to 4,096 | ✅ | ✅ | |
| fragmentation before the envelope | ✅ | ✅ | |
| IPv6, outside and inside | ✅ | ⬜ | |
| extended sequence numbers | 🟡 outbound only, as the engine allows | ⬜ | |
| tunnel connections in the flow table | ✅ outbound | ⬜ | |
| The appliance | temperatures in OPNsense | ✅ | ✅ |
| fans | 🟡 read; the board gives the host no register to set them | 🟡 read over the management link | |
| front panel | ✅ LCD and keys | ➖ none | |
| hardware watchdog | ✅ armed | ✅ armed | |
| PoE | ➖ none | 🟡 read, not controlled | |
| fail-to-wire relay | 🟡 read, deliberately not driven | ➖ none | |
| Keeping it running | boot hooks and the kernel followed through an update | ✅ | ✅ |
| updated from the Updates page | ✅ | ✅ | |
| problem reports | ✅ | ✅ |
|
| an image from the builder, booted | ✅ | ⬜ |
What closes the gaps, in order¶
On the XGS 136, by what each gap costs an owner:
The interface entries opened by the driver when the flow maker is on - found on 2026-10-18: with every entry shut, as the driver leaves them, the fast path names no connection and "automatic acceleration" has nothing to make.A connection made between a LAN bridge member and a routed port stopped carrying traffic (#483), which has to be understood first.Done the same day: every next hop had named an empty cage, fixed; and the flow maker now opens the entries itself (the finding).IPv6 measured through the box, thenIPv6 inside and outside a tunnel -the flows are built; the bench path through the 136 is set up and waits on the PC's sideIPv6 through the box is measured since 2026-10-18, in hardware both ways.Flow writes posted on the high-priority ring the board already asks for, as on the XGS 3300 - the ring is declared and carries nothing yet.Done 2026-10-18, and with it a takeout that takes a connection out and a connection handed back that goes on through the host - neither did before (the finding).A connection handed back, revived in place, andTunnel connections in the flow table - the XGS 3300's code, ported the way the rest of the flow table was. A connection handed back is revived in place since 2026-10-18;attaching a direction that comes back under a new identity to the live connection, as the XGS 3300 does, is what is left of itattaching a direction alone was tried and measured worse than making the connection again (the page); one second in thirty of a download through the host is what is left.- Receive by interrupt instead of a poll - the doorbells exist; the coprocessor has not been seen to raise one for a received frame.
The transceivers, with a module in a cage.Both cages hold copper modules since 2026-10-19, read and reported; diagnostics wait for a module that has them.
On the XGS 3300: a thousand connections, published; a thousand connections measured and published on 2026-10-19; then the copy per frame, which both families
share.
The discussion of this page is held in the project's GitHub Discussions. Showing it here loads giscus from giscus.app and GitHub, and writing in it needs a GitHub account - what that means.