# Bottleneck Parent: 10-node focused Bluetooth bottleneck test # # Explicit topology with two Bluetooth (L2CAP) links that create # bottleneck parent candidates. Tests that nodes avoid choosing # Bluetooth parents when fiber alternatives exist at the same or # slightly greater depth. # # Topology: # # n01 (root) # / | \ \ # f f f f # / | \ \ # n02 n03 n04 n05 # | / | \ | # BT f f BT # | / | \ | # n06 n07 n08 n09 # | # f # | # n10 # # Edges and link types: # Fiber: n01-n02, n01-n03, n01-n04, n01-n05, # n03-n06, n03-n07, n04-n08, n08-n10 # Bluetooth: n02-n06, n05-n09 # # Cross-links: n03-n08 (fiber) — gives n08 a fiber alternative to n04 # # Test subjects: # - n06 has Bluetooth (n02) and fiber (n03) at depth 1 — should pick n03 # - n09 has only Bluetooth (n05) — no alternative, stuck with BT parent scenario: name: "bottleneck-parent" seed: 42 duration_secs: 60 topology: algorithm: explicit num_nodes: 10 params: adjacency: - [n01, n02] - [n01, n03] - [n01, n04] - [n01, n05] - [n02, n06] - [n03, n06] - [n03, n07] - [n03, n08] - [n04, n08] - [n05, n09] - [n08, n10] subnet: "172.20.0.0/24" ip_start: 10 netem: enabled: true default_policy: delay_ms: [1, 5] jitter_ms: [0, 1] loss_pct: [0, 0.5] link_policies: # Bluetooth (L2CAP) links - edges: ["n02-n06", "n05-n09"] policy: delay_ms: [15, 40] jitter_ms: [5, 15] loss_pct: [2, 8] mutation: interval_secs: {min: 30, max: 60} fraction: 0.2 policies: normal: delay_ms: [1, 5] loss_pct: [0, 0.5] link_flaps: enabled: false traffic: enabled: true max_concurrent: 2 interval_secs: {min: 15, max: 30} duration_secs: {min: 5, max: 10} parallel_streams: 2 logging: rust_log: "info" output_dir: "./sim-results"