Files
op-packages/qemu-vms/root/etc/qemu-ifup
T

64 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
# /etc/qemu-ifup
# $1 - tap iface name
# $2 - bridge name (optional)
. /lib/functions.sh
if [ -n "$2" ]; then
# if custom user bridge
if ! ip link show "$2" >/dev/null 2>&1; then
ip link add "$2" type bridge
ip link set "$2" up
logger -t qemu-ifup "Bridge $2 created"
fi
ip link set "$1" master "$2"
exit 0
fi
network_bridges=""
collect_network_bridge() {
local cfg="$1"
local type
config_get type "$cfg" type
[ "$type" = "bridge" ] || return 0
local name
config_get name "$cfg" name
[ -n "$name" ] && network_bridges="$network_bridges $name"
}
config_load network
config_foreach collect_network_bridge device
qemu_bridges=""
collect_qemu_bridge() {
local cfg="$1"
local bridge
config_get bridge "$cfg" bridge
[ -n "$bridge" ] && qemu_bridges="$qemu_bridges $bridge"
}
config_load qemu-vms
config_foreach collect_qemu_bridge network
defined_bridges="$network_bridges $qemu_bridges"
existing_bridges=$(ls -d /sys/devices/virtual/net/*/brif/ 2>/dev/null | awk -F '/' '{print $(NF-2)}')
echo "$existing_bridges" | awk -v def="$defined_bridges" '
BEGIN {
split(def, arr, " ");
for (i in arr) declared[arr[i]] = 1;
}
!($0 in declared) { print }
' | while read bridge; do
if [ -z "$(ls -A "/sys/devices/virtual/net/$bridge/brif" 2>/dev/null)" ]; then
ip link set "$bridge" down 2>/dev/null
ip link delete "$bridge" 2>/dev/null
logger -t qemu-ifup "Removed orphan bridge $bridge"
fi
done