Compatibility matrix¶
Netdryrun reads each network OS through a driver. A driver is only as good as the device output it was built and tested on, so this page lists, for every driver, the exact image it is verified on, the date its test data was last captured from a live lab, and what each check does on it. It is generated from the tests (tests/test_driver_matrix.py) and from the images the shipped examples pin; if a cell is not on this page, it is not tested.
Verified images¶
| Platform | Image verified on | Source of the image | Test data last captured live | Status |
|---|---|---|---|---|
| FRR | quay.io/frrouting/frr:10.4.1 |
Public image (quay.io). | 2026-10-28 | released |
| Nokia SR Linux | ghcr.io/nokia/srlinux:26.7.2 |
Public image (ghcr.io). | 2026-10-27 | released |
| SONiC | docker-sonic-vs:master.1258173-c10162df4 |
From the SONiC project's CI build server; contains FRR 10.7.1. Pinned by build id. | 2026-10-28 | released |
| Arista EOS (bring your own cEOS image) | ceos:4.36.3M |
Bring your own image (free from arista.com, cannot be redistributed). | 2026-10-28 | released |
Every shipped example pins its image, so a new NOS release shows up as a deliberate change with re-captured test data, never as a silent change under the tests. scripts/capture_fixtures.sh captures the test data again from the pinned images, and scripts/fixture_shape.py reports any change in shape. A different image or version may work; it is not verified until it appears here.
Check types¶
Each cell counts the tests on that driver's own captured output: a must-fail test is a violation that has to end the check as failed, a control is the same output without the violation, which has to pass (so a must-fail test cannot pass only because a capture no longer parses).
| Check type | FRR | SR Linux | SONiC | Arista EOS |
|---|---|---|---|---|
bgp_session |
verified (2 must-fail, 1 control) | verified (2 must-fail, 1 control) | verified (2 must-fail, 1 control) | verified (2 must-fail, 1 control) |
bgp_prefixes |
verified (8 must-fail, 1 control) | verified (5 must-fail, 1 control) | verified (8 must-fail, 1 control) | verified (5 must-fail, 1 control) |
route |
verified (4 must-fail, 1 control) | verified (3 must-fail, 1 control) | verified (4 must-fail, 1 control) | verified (3 must-fail, 1 control) |
bgp_route |
verified (5 must-fail, 1 control) | verified (4 must-fail, 1 control) | verified (4 must-fail, 1 control) | verified (4 must-fail, 1 control) |
ping |
verified (2 must-fail, 1 control) | verified (2 must-fail, 1 control) | verified (2 must-fail, 1 control) | verified (2 must-fail, 1 control) |
BGP prefix counts by address family¶
| Address family | FRR | SR Linux | SONiC | Arista EOS |
|---|---|---|---|---|
ipv4-unicast |
verified (4 must-fail) | verified (4 must-fail) | verified (4 must-fail) | verified (4 must-fail) |
ipv6-unicast |
verified (2 must-fail) | verified (1 must-fail) | verified (2 must-fail) | verified (1 must-fail) |
evpn |
verified (2 must-fail) | refused: no per-family prefix counter: a count would read 0, which passes max and exact: 0 |
verified (2 must-fail) | refused: no per-family prefix counter: a count would read 0, which passes max and exact: 0 |
A check on a refused address family stops the run before the lab is deployed, with a message that names the driver. It is never run and never read as zero.
bgp_route keys¶
| Key | FRR | SR Linux | SONiC | Arista EOS |
|---|---|---|---|---|
present |
verified (1 must-fail) | verified (1 must-fail) | verified (1 must-fail) | verified (2 must-fail) |
as_path |
verified (1 must-fail) | verified (1 must-fail) | verified (1 must-fail) | verified (1 must-fail) |
as_path_regex |
no must-fail test | no must-fail test | no must-fail test | no must-fail test |
local_pref |
verified (1 must-fail) | verified (1 must-fail) | verified (1 must-fail) | no must-fail test |
med |
no must-fail test | no must-fail test | no must-fail test | no must-fail test |
next_hop |
no must-fail test | no must-fail test | no must-fail test | no must-fail test |
communities |
verified (1 must-fail) | no must-fail test | verified (1 must-fail) | no must-fail test |
without_communities |
verified (1 must-fail) | verified (1 must-fail) | no must-fail test | verified (1 must-fail) |
Known limits¶
- SR Linux:
bgp_prefixescounts the neighbor'sreceived-routes, which on SR Linux 26.7.2 includes routes that fail BGP loop detection and are not usable. On a live capture ofexamples/srl-frron 2026-10-28 the counter read 3 where one prefix was usable andrejected-routesread 0. Aminorexactprefix check on SR Linux can pass on a count that includes unusable routes. The test data above predates that capture; it has not yet been re-captured.
How a platform gets on this page¶
A driver is added when it is built from captured live output, has a must-fail test and a control for every check type, has a capture script (scripts/capture_fixtures.sh) and passes the same release gate as the others. A driver that is not yet proven in use is marked beta here until outside users confirm it.