mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-14 04:15:06 +08:00
64 lines
1.5 KiB
Bash
Executable File
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
|