diff --git a/bigmush.sh b/bigmush.sh new file mode 100644 index 0000000..864d0a4 --- /dev/null +++ b/bigmush.sh @@ -0,0 +1,79 @@ +#!/usr/bin/bash +# +NATNET=172.16.0.0/16 +NUMOFNS=5 +alias IPN='sudo ip net' +alias IPL='sudo ip link' +alias IPA='sudo ip addr add' + +peers='tcp://188.40.132.242:9651 tcp://65.21.231.58:9651' + +function IPNA() { + local name=$1 + shift + sudo ip -n ${name} addr add $@ +} +function IPNL() { + local name=$1 + shift + sudo ip -n ${name} link $@ +} +function IPNR() { + local name=$1 + shift + local defrtr=${1/\/24/} + shift + sudo ip -n ${name} route add default via ${defrtr} +} +function createns() { + local iname=$1 + local in_ip=$2 + local out_ip=$3 + local name=n-${iname} + IPN add $name + IPL add in_${iname} type veth peer name out_${iname} + IPL set in_${iname} netns ${name} + IPNL ${name} set lo up + IPNL ${name} set in_${iname} up + IPL set out_${iname} up + IPNA ${name} ${in_ip} dev in_${iname} + IPA ${out_ip} dev out_${iname} + IPNR ${name} ${out_ip} + # start mycelium, relying on local discovery + nohup sudo ip netns exec ${name} ./mycelium --key-file ${name}.bin --disable-peer-discovery --api-addr ${in_ip/\/24/}:8989 --peers ${peers} > ${iname}.out & +} +function dropns() { + local iname=$1 + local name=n-${iname} + IPL del out_${iname} + IPN del ${name} +} + +function doit() { + nohup sudo ./mycelium --key-file host.bin --api-addr 127.0.0.1:8989 --peers ${peers}>host.out & + for i in $(seq 1 $NUMOFNS); do + createns ${i} 172.16.${i}.2/24 172.16.${i}.1/24 + done +} +function dropit() { + sudo pkill -9 mycelium + for i in $(seq 1 $NUMOFNS); do + dropns ${i} + done +} + +function cleanit() { + dropit + sudo rm ./*.bin + sudo rm ./*.out +} + +function showit() { + sudo killall -USR1 mycelium +} + +function getmycelium(){ + wget https://github.com/threefoldtech/mycelium/releases/latest/download/mycelium-x86_64-unknown-linux-musl.tar.gz \ + -O- | gunzip -c | tar xvf - -C ${PWD} + +}