You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
1.5 KiB
Plaintext
89 lines
1.5 KiB
Plaintext
#!/bin/false
|
|
|
|
mach="${0#*machines/}"
|
|
mach="${mach%%/*}"
|
|
net="${0#*networks/}"
|
|
net="${net%%/*}"
|
|
|
|
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 "$net")"
|
|
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
|
|
}
|
|
|
|
wireguard() {
|
|
ifname="$1"
|
|
config="$2"
|
|
shift 2
|
|
ip link add name "$ifname" type wireguard
|
|
wg setconf "$ifname" "$config"
|
|
for ip; do
|
|
ip addr add "$ip" dev "$ifname"
|
|
done
|
|
ip link set "$ifname" up
|
|
}
|