# Semana 6: BGP y políticas entre redes. Se usa dentro del contenedor del curso.
#
#   make             comprueba que estén las herramientas (aquí no se compila nada)
#   make test        levanta las topologías una tras otra y corre las pruebas
#                    (test_*.py); siempre destruye lo que levantó. Las pruebas del
#                    laboratorio usan lab/ y se saltan hasta que lo completen
#   make up-ases     levanta los seis AS, sin políticas (ases/ases.clab.yml)
#   make up-ibgp     levanta el AS con iBGP y OSPF (ibgp/ibgp.clab.yml)
#   make up-poli     levanta el ejemplo de políticas (poli/poli.clab.yml)
#   make policies    carga lab/r1.conf ... lab/r6.conf en los seis AS
#   make prefer      carga lab/prefer.conf en r1
#   make down        destruye las tres topologías y sus redes de Docker
#   make clean       lo anterior, y borra lo generado

POLICY_DIR ?= lab

.PHONY: all test up-ases up-ibgp up-poli policies prefer down clean

all:
	@command -v containerlab >/dev/null || { echo "Falta containerlab: usen el contenedor del curso"; exit 1; }
	@command -v python3 >/dev/null || { echo "Falta python3: usen el contenedor del curso"; exit 1; }
	@echo "Listo. Sigan con make test o make up-ases."

test: all
	@status=0; PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -p 'test_*.py' -v || status=$$?; \
	  $(MAKE) --no-print-directory down; exit $$status

up-ases:
	cd ases && containerlab deploy -t ases.clab.yml --reconfigure

up-ibgp:
	cd ibgp && containerlab deploy -t ibgp.clab.yml --reconfigure

up-poli:
	cd poli && containerlab deploy -t poli.clab.yml --reconfigure

# vtysh -f lee un archivo que esté dentro del nodo: por eso primero se copia.
policies:
	@for n in 1 2 3 4 5 6; do \
	  docker cp $(POLICY_DIR)/r$$n.conf clab-w06-ases-r$$n:/tmp/policy.conf && \
	  docker exec clab-w06-ases-r$$n vtysh -f /tmp/policy.conf >/dev/null 2>&1 && echo "r$$n cargado" || exit 1; \
	done

prefer:
	docker cp $(POLICY_DIR)/prefer.conf clab-w06-ases-r1:/tmp/prefer.conf
	docker exec clab-w06-ases-r1 vtysh -f /tmp/prefer.conf >/dev/null 2>&1

down:
	@cd ases && containerlab destroy -t ases.clab.yml --cleanup >/dev/null 2>&1 || true
	@cd ibgp && containerlab destroy -t ibgp.clab.yml --cleanup >/dev/null 2>&1 || true
	@cd poli && containerlab destroy -t poli.clab.yml --cleanup >/dev/null 2>&1 || true
	@docker network rm redes-w06-ases >/dev/null 2>&1 || true
	@docker network rm redes-w06-ibgp >/dev/null 2>&1 || true
	@docker network rm redes-w06-poli >/dev/null 2>&1 || true

clean: down
	rm -rf __pycache__ ases/clab-w06-ases ibgp/clab-w06-ibgp poli/clab-w06-poli
	rm -rf *.pcap .capture-*
