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

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