#!/bin/sh
# Pone o quita una instancia de un servicio anycast en un router de los seis AS.
# Varios AS originan el mismo prefijo, 100.64.200.0/24, con la misma dirección de
# servicio, 100.64.200.1. El servicio responde en el puerto 5300 con su nombre.
#
# Uso:  ./anycast.sh r2 64602 on     desde el contenedor del curso
#       ./anycast.sh r2 64602 off
set -e
node="clab-w06-ases-$1"
asn="$2"
case "$3" in
on)
  docker exec "$node" ip addr add 100.64.200.1/32 dev lo
  docker exec -d "$node" sh -c 'nc -lk -p 5300 -e /bin/hostname'
  docker exec "$node" vtysh -c 'configure terminal' \
    -c 'ip route 100.64.200.0/24 Null0' \
    -c "router bgp $asn" -c 'address-family ipv4 unicast' -c 'network 100.64.200.0/24'
  ;;
off)
  docker exec "$node" vtysh -c 'configure terminal' \
    -c "router bgp $asn" -c 'address-family ipv4 unicast' -c 'no network 100.64.200.0/24' \
    -c 'exit' -c 'exit' -c 'no ip route 100.64.200.0/24 Null0'
  docker exec "$node" pkill -f 'nc -lk -p 5300' || true
  docker exec "$node" ip addr del 100.64.200.1/32 dev lo
  ;;
*)
  echo "uso: $0 <router> <as> on|off" >&2
  exit 1
  ;;
esac
