#!/bin/sh # Drives traffic from a Site-B client to the anycast address and shows which # A-node (a1/a2/a3) answered each request, demonstrating ECMP distribution. # Usage: scripts/traffic-test.sh [client] [request-count] set -e cd "$(dirname "$0")/.." CLIENT="${1:-c1}" COUNT="${2:-20}" DST="10.200.200.1" echo "==== $CLIENT: ping $DST ====" docker compose exec -T "$CLIENT" ping -c 4 "$DST" echo echo "==== $CLIENT: traceroute $DST ====" docker compose exec -T "$CLIENT" traceroute -n -m 5 "$DST" 2>&1 || true echo echo "==== $CLIENT: $COUNT requests to http://$DST, varying source port (ECMP hash input) ====" RESULTS=$(docker compose exec -T "$CLIENT" sh -c ' for i in $(seq 1 '"$COUNT"'); do port=$((30000 + i)) node=$(curl -s --local-port "$port" --max-time 3 "http://'"$DST"'/" || echo "no-answer") echo "req $i (src-port $port) -> $node" done ') echo "$RESULTS" echo echo "Distribution:" echo "$RESULTS" | awk '{print $NF}' | sort | uniq -c