mirror of
https://github.com/jmcorgan/fips.git
synced 2026-10-30 07:37:36 +00:00
No chaos scenario sent a datagram across an Ethernet link: both Ethernet scenarios asserted only that the tree formed, so framing, AEAD over AF_PACKET and delivery through the Ethernet transport were untested. A new delivery assertion pings node pairs at each configured payload size at teardown, after flapped links and stopped nodes are restored, one packet at a time until min_replies replies arrive or deadline_secs passes. The verdict is whether that happened, not a loss ratio, so a busy host slows the probe without failing it. With require_transport and transport_node it also reads that node's peers before and after the probe and fails if the node has no peers or any peer on another transport, so traversal is checked rather than assumed. A probe that never ran fails as a harness failure. ethernet-mesh asserts delivery to and from n04, whose only edges are Ethernet, at payloads 0 and 1200: n04 to n06 and back cross Ethernet then UDP, and n04 to n05 is one Ethernet hop. Break-checks: dropping echo requests on n06's TUN fails n04->n06 with zero replies while baseline passes; adding a UDP edge to n04 fails the traversal check. The payload sizes cannot exercise the receiver's padding trim on veth: an empty echo is a 226-byte frame and a 1200-byte echo 1342 bytes, and the veth does not pad shorter frames (54-byte control frames and 48-byte beacons arrived unpadded; no received data frame carried bytes past its length field). The trim is covered by the unit tests on the receive loop's parse.
68 lines
1.8 KiB
YAML
68 lines
1.8 KiB
YAML
# Ethernet-only: 4-node ring, all Ethernet transport
|
|
#
|
|
# All links use raw Ethernet (AF_PACKET) over veth pairs. Nodes
|
|
# discover each other via beacons (no static peer config). Tests
|
|
# that Ethernet transport and beacon discovery work end-to-end.
|
|
#
|
|
# Topology:
|
|
#
|
|
# n01 ---eth--- n02
|
|
# | |
|
|
# eth eth
|
|
# | |
|
|
# n04 ---eth--- n03
|
|
|
|
scenario:
|
|
name: "ethernet-only"
|
|
seed: 42
|
|
duration_secs: 30
|
|
|
|
topology:
|
|
algorithm: explicit
|
|
num_nodes: 4
|
|
default_transport: ethernet
|
|
params:
|
|
adjacency:
|
|
- [n01, n02]
|
|
- [n02, n03]
|
|
- [n03, n04]
|
|
- [n04, n01]
|
|
|
|
netem:
|
|
enabled: true
|
|
default_policy:
|
|
delay_ms: [1, 5]
|
|
jitter_ms: [0, 1]
|
|
loss_pct: [0, 0.5]
|
|
|
|
link_flaps:
|
|
enabled: false
|
|
|
|
traffic:
|
|
enabled: false
|
|
|
|
# Baseline: the mesh came up, agreed on a root, and took parents. This
|
|
# asserts nothing about what Ethernet transport does; it exists so that
|
|
# a run in which the mesh never formed cannot report success, which
|
|
# until now it could, because this scenario carried no assertions at
|
|
# all.
|
|
#
|
|
# A 4-node mesh forms a spanning tree: one root and three nodes
|
|
# with a parent. All six provably-completed archived runs show exactly
|
|
# that, so these are the shape of a converged mesh rather than a
|
|
# tolerance fitted to observations. This scenario covers the Ethernet
|
|
# control plane only (beacon discovery, peering, the tree): traffic is
|
|
# disabled above and no datagram is probed here. Data-plane delivery
|
|
# over Ethernet (framing, AEAD over AF_PACKET) is asserted in
|
|
# ethernet-mesh's delivery assertion, and the length field that trims
|
|
# minimum-frame padding by unit tests on the receive loop's parse.
|
|
assertions:
|
|
baseline:
|
|
min_nodes_reporting: 4
|
|
max_roots: 1
|
|
min_nodes_parented: 3
|
|
|
|
logging:
|
|
rust_log: "info"
|
|
output_dir: "./sim-results"
|