# Semana 11: control de congestión. Se usa dentro del contenedor del curso.
#
#   make              compila tcp_info (estático: los nodos de la topología usan otra libc)
#   make test         compila, levanta la topología, corre las pruebas (test_*.py) y siempre
#                     destruye lo que levantó. Las pruebas de lab/metrics.py se saltan hasta
#                     que lo completen. Toma unos minutos: mide de verdad
#   make up           levanta la topología (dumbbell/dumbbell.clab.yml)
#   make down         destruye la topología y su red de Docker
#   make clean        lo anterior, y borra el binario, los CSV y los gráficos

CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -D_DEFAULT_SOURCE -O2 -g

.PHONY: all test up down clean

all: tcp_info

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

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

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

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

clean: down
	rm -f tcp_info *.csv *.png
	rm -rf __pycache__ lab/__pycache__ solution/__pycache__ dumbbell/clab-w11-dumbbell
