diff --git a/bin/multiweave b/bin/multiweave index 560b6dd8..40654b4c 100755 --- a/bin/multiweave +++ b/bin/multiweave @@ -14,7 +14,8 @@ set -e START=${FIRST_WEAVE:-1} COUNT=${NUM_WEAVES:-28} FINISH=$((START+COUNT-1)) -PORT=6783 + +SUBNET=192.168.7 weavedir=$(dirname $0)/.. @@ -26,32 +27,42 @@ random_mac() { od -txC -An -N6 /dev/urandom | ( read a b c d e f && printf "%02x:$b:$c:$d:$e:$f" $((0x$a & ~1 | 2)) ) } +weave() { + i=$1 + shift + WEAVE_CONTAINER_NAME=weave$i WEAVE_HTTP_ADDR=$SUBNET.$i:6784 $weavedir/weave "$@" +} + case "$1" in launch) shift 1 echo $(date -R) launching + ip link show multiweave >/dev/null 2>&1 || sudo ip link add name multiweave type bridge for i in $(seq $START $FINISH); do - WEAVE_CONTAINER_NAME=weave$i WEAVE_PORT=$((5000+i)) $weavedir/weave launch-router --iface '' --name $(random_mac) --nickname weave$i --port $PORT --no-dns "$@" + IP=$SUBNET.$i + sudo ip addr add $IP/24 dev multiweave + weave $i launch-router --datapath '' --iface '' --no-dns --host $IP \ + --name $(random_mac) --nickname weave$i "$@" done - if [ $START -ne 1 ] ; then - status=$(docker inspect --format='{{.State.Running}} {{.NetworkSettings.IPAddress}}' weave$((START-1))) - PREV="${status#true }" - fi echo $(date -R) connecting + [ $START -gt 1 ] || START=2 for i in $(seq $START $FINISH); do - if [ -n "$PREV" ] ; then - echo connecting weave$i to $PREV - WEAVE_CONTAINER_NAME=weave$i $weavedir/weave connect $PREV - fi - status=$(docker inspect --format='{{.State.Running}} {{.NetworkSettings.IPAddress}}' weave$i) - PREV="${status#true }" + TO=$SUBNET.$((i-1)) + echo connecting weave$i to $TO + weave $i connect $TO done echo $(date -R) done ;; stop) - for i in $(seq $START $FINISH); do + for i in $(seq $FINISH -1 $START); do + IP=$SUBNET.$i echo Stopping weave$i - WEAVE_CONTAINER_NAME=weave$i $weavedir/weave stop-router + weave $i stop-router + sudo ip addr del $IP/24 dev multiweave || true done + [ -z "$(ip -4 -o addr show multiweave)" ] && sudo ip link del multiweave + ;; + *) + weave "$@" ;; esac