# Un Internet de bolsillo para DNS y HTTP. Todos cuelgan de r; cada servidor está a unos
# milisegundos, para que se note cuántas idas y vueltas cuesta cada cosa.
#
#     cliente   resolver   raiz    tld     auth     web     cache    killa
#     10.212.1  10.212.2   .3      .4      .5       .6      .7       .8        (.10 cada host)
#         \        |        |       |       |        |       |        /
#          \_______|________|_______r_______|________|_______|_______/
#
# RTT desde r: raiz, tld, auth y killa 20 ms; web 50 ms; cliente, resolver y cache casi nada.
name: w12-red
mgmt:
  network: redes-w12-red
  ipv4-subnet: 172.90.12.0/26
  ipv6-subnet: 3fff:172:90:12::/80
topology:
  defaults:
    kind: linux
    image: redes-router
    binds: [..:/w12:ro]
  nodes:
    r:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - sysctl -w net.ipv4.ip_forward=1
        - ip addr add 10.212.1.1/24 dev eth1
        - ip addr add 10.212.2.1/24 dev eth2
        - ip addr add 10.212.3.1/24 dev eth3
        - ip addr add 10.212.4.1/24 dev eth4
        - ip addr add 10.212.5.1/24 dev eth5
        - ip addr add 10.212.6.1/24 dev eth6
        - ip addr add 10.212.7.1/24 dev eth7
        - ip addr add 10.212.8.1/24 dev eth8
        - tc qdisc add dev eth3 root netem delay 10ms
        - tc qdisc add dev eth4 root netem delay 10ms
        - tc qdisc add dev eth5 root netem delay 10ms
        - tc qdisc add dev eth6 root netem delay 25ms
        - tc qdisc add dev eth8 root netem delay 10ms
    cliente:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.1.10/24 dev eth1
        - ip route add default via 10.212.1.1
    resolver:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.2.10/24 dev eth1
        - ip route add default via 10.212.2.1
    raiz:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.3.10/24 dev eth1
        - ip route add default via 10.212.3.1
        - tc qdisc add dev eth1 root netem delay 10ms
    tld:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.4.10/24 dev eth1
        - ip route add default via 10.212.4.1
        - tc qdisc add dev eth1 root netem delay 10ms
    auth:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.5.10/24 dev eth1
        - ip route add default via 10.212.5.1
        - tc qdisc add dev eth1 root netem delay 10ms
    web:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.6.10/24 dev eth1
        - ip route add default via 10.212.6.1
        - tc qdisc add dev eth1 root netem delay 25ms
    cache:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.7.10/24 dev eth1
        - ip route add default via 10.212.7.1
    killa:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.212.8.10/24 dev eth1
        - ip route add default via 10.212.8.1
        - tc qdisc add dev eth1 root netem delay 10ms
  # Containerlab usa MTU 9500 por defecto; aquí queremos el valor de Ethernet.
  links:
    - {endpoints: ["cliente:eth1", "r:eth1"], mtu: 1500}
    - {endpoints: ["resolver:eth1", "r:eth2"], mtu: 1500}
    - {endpoints: ["raiz:eth1", "r:eth3"], mtu: 1500}
    - {endpoints: ["tld:eth1", "r:eth4"], mtu: 1500}
    - {endpoints: ["auth:eth1", "r:eth5"], mtu: 1500}
    - {endpoints: ["web:eth1", "r:eth6"], mtu: 1500}
    - {endpoints: ["cache:eth1", "r:eth7"], mtu: 1500}
    - {endpoints: ["killa:eth1", "r:eth8"], mtu: 1500}
