# Mixed Technology: 10-node heterogeneous network
#
# Explicit topology with Bluetooth (L2CAP), WiFi, and fiber links.
# Tests that cost-based parent selection produces a tree favoring
# low-cost paths when multiple link technologies coexist.
#
# Topology:
#
#       n01 (root)
#      / |  \
#     f  f   f
#    /   |    \
#  n02  n03   n04
#  |  \  | \   |  \
#  f   BT f  f  BT  f
#  |    \ |  |   \   |
#  n05  n06 n07  n08 n09
#         \       /
#         wifi---wifi
#          n10
#
# Edges and link types:
#   Fiber:     n01-n02, n01-n03, n01-n04, n02-n05, n03-n07, n04-n09
#   Bluetooth: n02-n06, n04-n08
#   WiFi:      n03-n06, n08-n10
#   Fiber:     n03-n08, n06-n10
#
# Test subjects:
#   - n06 has fiber (n03) and Bluetooth (n02) parents — should pick n03
#   - n08 has fiber (n03) and Bluetooth (n04) parents — should pick n03
#
# Netem mutation shifts fiber-only links between normal and degraded.

scenario:
  name: "mixed-technology"
  seed: 42
  duration_secs: 90

topology:
  algorithm: explicit
  num_nodes: 10
  params:
    adjacency:
      - [n01, n02]
      - [n01, n03]
      - [n01, n04]
      - [n02, n05]
      - [n02, n06]
      - [n03, n06]
      - [n03, n07]
      - [n03, n08]
      - [n04, n08]
      - [n04, n09]
      - [n06, n10]
      - [n08, n10]
  subnet: "172.20.0.0/24"
  ip_start: 10

netem:
  enabled: true
  default_policy:
    # Fiber-like defaults
    delay_ms: [1, 5]
    jitter_ms: [0, 1]
    loss_pct: [0, 0.5]
  link_policies:
    # Bluetooth (L2CAP) links
    - edges: ["n02-n06", "n04-n08"]
      policy:
        delay_ms: [15, 40]
        jitter_ms: [5, 15]
        loss_pct: [2, 8]
    # WiFi links (moderate latency, low loss)
    - edges: ["n03-n06", "n08-n10"]
      policy:
        delay_ms: [5, 20]
        jitter_ms: [2, 5]
        loss_pct: [1, 3]
  mutation:
    interval_secs: {min: 30, max: 60}
    fraction: 0.2
    policies:
      normal:
        delay_ms: [1, 10]
        loss_pct: [0, 1]
      degraded:
        delay_ms: [50, 100]
        jitter_ms: [10, 30]
        loss_pct: [3, 8]

link_flaps:
  enabled: false

traffic:
  enabled: true
  max_concurrent: 3
  interval_secs: {min: 10, max: 30}
  duration_secs: {min: 5, max: 15}
  parallel_streams: 4

logging:
  rust_log: "info"
  output_dir: "./sim-results"
