@@ -6,6 +6,8 @@ set -o pipefail
66
77mkdir -p logs
88
9+ NETWORK=" nebula-smoke"
10+
911cleanup () {
1012 echo
1113 echo " *** cleanup"
@@ -16,24 +18,56 @@ cleanup() {
1618 then
1719 docker kill lighthouse1 host2 host3 host4
1820 fi
21+ docker network rm " $NETWORK " > /dev/null 2>&1
1922}
2023
2124trap cleanup EXIT
2225
26+ # Create a dedicated smoke network with an explicit subnet (required for --ip
27+ # below). Probe a short list of candidates so a locally-used range doesn't
28+ # fail the whole test — we only need one to be free.
29+ docker network rm " $NETWORK " > /dev/null 2>&1 || true
30+ for candidate in 172.30.0.0/24 172.31.0.0/24 10.98.0.0/24 10.99.0.0/24 192.168.230.0/24; do
31+ if docker network create --subnet " $candidate " " $NETWORK " > /dev/null 2>&1 ; then
32+ break
33+ fi
34+ done
35+ if ! docker network inspect " $NETWORK " > /dev/null 2>&1 ; then
36+ echo " failed to create $NETWORK : every candidate subnet is in use" >&2
37+ exit 1
38+ fi
39+
40+ # Derive container IPs from the network's assigned subnet. Slots: .2 lighthouse1,
41+ # .3 host2, .4 host3, .5 host4 — matches the placeholders in build.sh.
42+ SUBNET=" $( docker network inspect -f ' {{(index .IPAM.Config 0).Subnet}}' " $NETWORK " ) "
43+ PREFIX=" ${SUBNET%/* } "
44+ PREFIX=" ${PREFIX% .* } "
45+ LIGHTHOUSE_IP=" $PREFIX .2"
46+ HOST2_IP=" $PREFIX .3"
47+ HOST3_IP=" $PREFIX .4"
48+ HOST4_IP=" $PREFIX .5"
49+
50+ # Sed the placeholder TEST-NET-3 IPs in the host configs to the real ones.
51+ # build/lighthouse1.yml has no IPs to rewrite so it's skipped.
52+ for f in build/host2.yml build/host3.yml build/host4.yml; do
53+ sed " s|203\.0\.113\.|$PREFIX .|g" " $f " > " $f .tmp"
54+ mv " $f .tmp" " $f "
55+ done
56+
2357CONTAINER=" nebula:${NAME:- smoke} "
2458
2559docker run --name lighthouse1 --rm " $CONTAINER " -config lighthouse1.yml -test
26- docker run --name host2 --rm " $CONTAINER " -config host2.yml -test
27- docker run --name host3 --rm " $CONTAINER " -config host3.yml -test
28- docker run --name host4 --rm " $CONTAINER " -config host4.yml -test
60+ docker run --name host2 --rm -v " $PWD /build/host2.yml:/nebula/host2.yml:ro " " $CONTAINER " -config host2.yml -test
61+ docker run --name host3 --rm -v " $PWD /build/host3.yml:/nebula/host3.yml:ro " " $CONTAINER " -config host3.yml -test
62+ docker run --name host4 --rm -v " $PWD /build/host4.yml:/nebula/host4.yml:ro " " $CONTAINER " -config host4.yml -test
2963
30- docker run --name lighthouse1 --device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config lighthouse1.yml 2>&1 | tee logs/lighthouse1 | sed -u ' s/^/ [lighthouse1] /' &
64+ docker run --name lighthouse1 --network " $NETWORK " --ip " $LIGHTHOUSE_IP " -- device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config lighthouse1.yml 2>&1 | tee logs/lighthouse1 | sed -u ' s/^/ [lighthouse1] /' &
3165sleep 1
32- docker run --name host2 --device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config host2.yml 2>&1 | tee logs/host2 | sed -u ' s/^/ [host2] /' &
66+ docker run --name host2 --network " $NETWORK " --ip " $HOST2_IP " -v " $PWD /build/host2.yml:/nebula/host2.yml:ro " -- device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config host2.yml 2>&1 | tee logs/host2 | sed -u ' s/^/ [host2] /' &
3367sleep 1
34- docker run --name host3 --device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config host3.yml 2>&1 | tee logs/host3 | sed -u ' s/^/ [host3] /' &
68+ docker run --name host3 --network " $NETWORK " --ip " $HOST3_IP " -v " $PWD /build/host3.yml:/nebula/host3.yml:ro " -- device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config host3.yml 2>&1 | tee logs/host3 | sed -u ' s/^/ [host3] /' &
3569sleep 1
36- docker run --name host4 --device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config host4.yml 2>&1 | tee logs/host4 | sed -u ' s/^/ [host4] /' &
70+ docker run --name host4 --network " $NETWORK " --ip " $HOST4_IP " -v " $PWD /build/host4.yml:/nebula/host4.yml:ro " -- device /dev/net/tun:/dev/net/tun --cap-add NET_ADMIN --rm " $CONTAINER " -config host4.yml 2>&1 | tee logs/host4 | sed -u ' s/^/ [host4] /' &
3771sleep 1
3872
3973# grab tcpdump pcaps for debugging
@@ -131,7 +165,13 @@ docker exec host4 sh -c 'kill 1'
131165docker exec host3 sh -c ' kill 1'
132166docker exec host2 sh -c ' kill 1'
133167docker exec lighthouse1 sh -c ' kill 1'
134- sleep 5
168+
169+ # Wait up to 30s for all backgrounded jobs to exit rather than relying on a
170+ # fixed sleep.
171+ for _ in $( seq 1 30) ; do
172+ [ -z " $( jobs -r) " ] && break
173+ sleep 1
174+ done
135175
136176if [ " $( jobs -r) " ]
137177then
0 commit comments