# Semana 4: IP, forwarding y NAT. Se usa dentro del contenedor del curso.
#
#   make          compila cidr, lpm e ipv4_header
#   make test     compila, levanta las dos topologías una tras otra y corre las
#                 pruebas (test_*.py); siempre destruye lo que levantó. Lo que
#                 depende del laboratorio usa lab/ y se salta hasta que lo completen
#   make up-fwd   levanta la topología de tres routers (fwd/fwd.clab.yml)
#   make up-nat   levanta la red con NAT (nat/nat.clab.yml)
#   make down     destruye las dos topologías y sus redes de Docker
#   make clean    lo anterior, y borra los binarios

CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -O2 -g
PROGRAMS = cidr lpm ipv4_header

.PHONY: all test up-fwd up-nat down clean

all: $(PROGRAMS)

%: %.c
	$(CC) $(CFLAGS) -o $@ $<

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

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

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

down:
	@cd fwd && containerlab destroy -t fwd.clab.yml --cleanup >/dev/null 2>&1 || true
	@cd nat && containerlab destroy -t nat.clab.yml --cleanup >/dev/null 2>&1 || true
	@docker network rm redes-w04-fwd >/dev/null 2>&1 || true
	@docker network rm redes-w04-nat >/dev/null 2>&1 || true

clean: down
	rm -f $(PROGRAMS)
	rm -rf __pycache__ fwd/clab-w04-fwd nat/clab-w04-nat
