# Una CDN mínima: dos regiones unidas por un enlace largo, con una réplica en cada una.
#
#      c1 ---- r1 ==== 60 ms de RTT ==== r2 ---- c2
#              | \                       |
#             s1  ns                     s2
#
#   r1 AS 65301, r2 AS 65302, s1 y s2 AS 65310 (la CDN), ns es el DNS autoritativo.
#
# s1 y s2 anuncian el mismo prefijo, 10.213.50.0/24: es anycast. Además cada una tiene su dirección
# de unicast (10.213.21.10 y 10.213.22.10), que es la que devuelve el DNS.
name: w13-cdn
mgmt:
  network: redes-w13-cdn
  ipv4-subnet: 172.90.13.64/26
  ipv6-subnet: 3fff:172:90:13:2::/80
topology:
  defaults:
    kind: linux
    image: redes-router
  nodes:
    r1:
      binds: [r1/frr.conf:/etc/frr/frr.conf:ro]
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - tc qdisc add dev eth1 root netem delay 30ms
    r2:
      binds: [r2/frr.conf:/etc/frr/frr.conf:ro]
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - tc qdisc add dev eth1 root netem delay 30ms
    s1:
      binds: [s1/frr.conf:/etc/frr/frr.conf:ro]
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.213.50.1/24 dev lo
        - mkdir -p /www
        - sh -c "echo réplica s1 > /www/quien.txt"
        - sh -c "head -c 20000000 /dev/zero > /www/grande.bin"
    s2:
      binds: [s2/frr.conf:/etc/frr/frr.conf:ro]
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.213.50.1/24 dev lo
        - mkdir -p /www
        - sh -c "echo réplica s2 > /www/quien.txt"
        - sh -c "head -c 20000000 /dev/zero > /www/grande.bin"
    c1:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.213.11.10/24 dev eth1
        - ip route add default via 10.213.11.1
    c2:
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.213.12.10/24 dev eth1
        - ip route add default via 10.213.12.1
    ns:
      binds: [../geo_dns.py:/geo_dns.py:ro]
      exec:
        - ip route del default
        - sysctl -w net.ipv6.conf.all.disable_ipv6=1
        - ip addr add 10.213.30.10/24 dev eth1
        - ip route add default via 10.213.30.1
  links:
    - endpoints: ["r1:eth1", "r2:eth1"]
      mtu: 1500
    - endpoints: ["r1:eth2", "c1:eth1"]
      mtu: 1500
    - endpoints: ["r1:eth3", "s1:eth1"]
      mtu: 1500
    - endpoints: ["r1:eth4", "ns:eth1"]
      mtu: 1500
    - endpoints: ["r2:eth2", "c2:eth1"]
      mtu: 1500
    - endpoints: ["r2:eth3", "s2:eth1"]
      mtu: 1500
