#!/bin/bash set -e # You may need to adjust # echo 4096 >/proc/sys/net/ipv4/neigh/default/gc_thresh3 # where the number is greater than NUM_WEAVES*(NUM_WEAVES-1) plus some # fudge. # # Without that, some connections between the weaves may fail to get # established, and networking on the host in general becomes # broken. There will also be some "net_ratelimit: nnn callbacks # suppressed" messages in the syslog. START=${FIRST_WEAVE:-1} COUNT=${NUM_WEAVES:-28} FINISH=$((START+COUNT-1)) PORT=6783 weavedir=$(dirname $0)/.. # Generate a random MAC value - copied from 'weave' script random_mac() { # In the first byte of the MAC, the 'multicast' bit should be # clear and 'locally administered' bit should be set. All other # bits should be random. od -txC -An -N6 /dev/urandom | ( read a b c d e f && printf "%02x:$b:$c:$d:$e:$f" $((0x$a & ~1 | 2)) ) } case "$1" in launch) shift 1 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 "$@" done if [ $START -ne 1 ] ; then status=$(docker inspect --format='{{.State.Running}} {{.NetworkSettings.IPAddress}}' weave$((START-1))) PREV="${status#true }" fi 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 }" done ;; stop) for i in $(seq $START $FINISH); do echo Stopping weave$i WEAVE_CONTAINER_NAME=weave$i $weavedir/weave stop-router done ;; esac