|
|
|
#!/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
|
|
|
|
}
|