#!/usr/bin/bash
#
NATNET=172.16.0.0/16
NUMOFNS=254
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}

}
