Files
fips/testing/chaos/scenarios/cost-mixed-7node.yaml
T
Johnathan Corgan cd9289e0f3 Update test harness docs and add transport_mix support
Chaos harness enhancements:
- transport_mix config: weighted random transport assignment for random
  topologies (erdos_renyi, random_geometric) with UDP/Ethernet/TCP
- Replace LoRa with Bluetooth L2CAP in cost-based/mixed-tech scenarios
  using realistic netem values (15-40ms delay, 5-15ms jitter, 2-8% loss)
- New churn-20-mixed scenario: 20-node Erdos-Renyi with 60% UDP,
  20% Ethernet, 20% TCP, full netem/link-flap/churn/bandwidth config
- Expanded chaos README with full scenario catalog in four categories

Static harness:
- Updated README with topology table and scenario count
2026-02-27 00:52:17 +00:00

79 lines
1.6 KiB
YAML

# Cost-Based Parent Selection: Mixed Technology 7-Node Test
#
# Topology (explicit, multiple link types):
#
# n01 (root)
# / | \
# fiber | fiber BT
# / | \
# n02 n03 n04
# | | \ |
# fiber fiber \ fiber
# | | wifi |
# n05 n06 n07
#
# Cross-links: n03-n05 (fiber), n04-n06 (wifi)
#
# Test subjects:
# - n06 has edges to n03 (fiber) and n04 (wifi) — should prefer n03
# - n04's link to root is Bluetooth (L2CAP), so n04 has higher-cost parent link
# - n07 connects only to n04 (no choice, stuck with Bluetooth upstream)
#
# Validation: tree snapshot shows n06's parent is n03 (not n04).
scenario:
name: "cost-mixed-7node"
seed: 42
duration_secs: 180
topology:
algorithm: explicit
num_nodes: 7
params:
adjacency:
- [n01, n02]
- [n01, n03]
- [n01, n04]
- [n02, n05]
- [n03, n06]
- [n04, n07]
- [n03, n05]
- [n04, n06]
subnet: "172.20.0.0/24"
ip_start: 10
netem:
enabled: true
default_policy:
# Fiber-like
delay_ms: [1, 5]
jitter_ms: [0, 1]
loss_pct: [0, 0.5]
link_policies:
# Bluetooth (L2CAP) link from n01 to n04
- edges: ["n01-n04"]
policy:
delay_ms: [15, 40]
jitter_ms: [5, 15]
loss_pct: [2, 8]
# WiFi link from n04 to n06
- edges: ["n04-n06"]
policy:
delay_ms: [5, 20]
jitter_ms: [2, 5]
loss_pct: [1, 3]
link_flaps:
enabled: false
traffic:
enabled: true
max_concurrent: 3
interval_secs: {min: 10, max: 25}
duration_secs: {min: 5, max: 15}
parallel_streams: 4
logging:
rust_log: "info"
output_dir: "./sim-results"