test(e2e): live coverage for the switch cascade kernel datapath

Two switches cascaded through the link-owned veth pair, two c7200
routers per switch, real ICMP crossing both bridges: the pair is born
UP with exactly one end per switch bridge, a dot1q trunk cascade
carries two VLANs at once, the symmetric access/trunk mode flip on the
cascade ends isolates and revives a VLAN in place (asymmetric flips are
semantically broken — the access side egresses untagged into the far
trunk's native PVID), a delay filter lands as netem on both ends (one
per direction, RTT ~= 2x delay), suspend admin-downs both ends, and a
link delete/re-create retires the whole pair and mints a new one under
the new link id — zero host residue after the project goes.
This commit is contained in:
YueGuobin committed 2026-10-06 00:21:10 +08:00
1 parent cb7f74c77b
commit ad39b22ab4
4 files changed
+304

No files matched your search

@@ -148,6 +148,17 @@ plus scripted reproduction rounds over the REST API):
relay TAPs likewise stay enslaved across VLAN changes, with a real ping
proving isolation and recovery.
The cascade has its own in-repo e2e
(`tests/e2e/test_ethernet_switch_cascade.py`): two switches joined by the
link-owned veth pair, two c7200 routers per switch, real ICMP crossing both
bridges — the pair is born UP with exactly one end per bridge, a dot1q
trunk cascade carries two VLANs at once, the symmetric access/trunk mode
flip on the cascade ends isolates and revives a VLAN in place, a `delay`
filter lands as netem on both ends (one per direction, RTT ≈ 2×delay),
suspend admin-downs both ends, and a link delete/re-create retires the whole
pair and mints a new one under the new link id — with zero host residue
after the project goes.
The host-side checks throughout are the kernel's own view: bridge
membership under `/sys/class/net/<bridge>/brif/`, the `master` link
attribute, `bridge vlan show`, and live pings where the peer allows it.