#!/bin/false mach=$(basename $(dirname "$0")) netns=netns nethorror_root="`pwd`" # and hope? warn() { echo >&2 "Warning:" "$@" } die() { echo >&2 "DIE:" "$@" exit 42 } ensure_started() { test -e state/$mach/$netns || machines/$mach/start.sh } setup_for_router4() { sysctl net.ipv4.conf.all.forwarding=1 } setup_for_router6() { sysctl net.ipv6.conf.all.forwarding=1 } setup_for_router() { setup_for_router4 setup_for_router6 } attach() { machines/$mach/attach.sh "$@" } setup_statedir() { dir="state/$mach" mkdir "$dir" for ns in $namespaces; do nsfile="${ns#*=}" touch "$nsfile" done } bridge_name() { echo "br_$1" } make_bridge() { br="$(bridge_name "$mach")" ip link add name "$br" type bridge ip link set dev "$br" up } veth_to_bridge() { ifname="$1" br_raw="$2" if test "$#" -gt 2; then ve_br_orig="$3" else ve_br_orig="ve_${mach}_${br_raw}" fi br="$(bridge_name "$br_raw")" ve_br="${ve_br_orig::15}" test "$ve_br" != "$ve_br_orig" && warn "interface name $ve_br_orig shortened to $ve_br" ip link show dev "$ve_br" >/dev/null 2>&1 && die "interface $ve_br already exists!" ip link add name "$ifname" type veth peer "$ve_br" ip link set dev "$ve_br" master "$br" ip link set dev "$ve_br" up ip link set dev "$ifname" netns ./state/$mach/netns # FIXME: hardcoded }