aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/qemu-ifup43
1 files changed, 43 insertions, 0 deletions
diff --git a/scripts/qemu-ifup b/scripts/qemu-ifup
new file mode 100755
index 0000000..20c10de
--- /dev/null
+++ b/scripts/qemu-ifup
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Script to bring a network (tap) device for qemu up.
+# The idea is to add the tap device to the same bridge
+# as we have default routing to.
+
+
+# in order to be able to find brctl
+PATH=$PATH:/sbin:/usr/sbin
+ip=$(which ip)
+
+if [ -n "$ip" ]; then
+ ip link set "$1" up
+else
+ brctl=$(which brctl)
+ if [ ! "$ip" -o ! "$brctl" ]; then
+ echo "W: $0: not doing any bridge processing: neither ip nor brctl utility not found" >&2
+ exit 0
+ fi
+ ifconfig "$1" 0.0.0.0 up
+fi
+
+switch=$(ip route ls | \
+ awk '/^default / {
+ for(i=0;i<NF;i++) { if ($i == "dev") { print $(i+1); next; } }
+ }'
+ )
+
+# only add the interface to default-route bridge if we
+# have such interface (with default route) and if that
+# interface is actually a bridge.
+# It is possible to have several default routes too
+for br in $switch; do
+ if [ -d /sys/class/net/$br/bridge/. ]; then
+ if [ -n "$ip" ]; then
+ ip link set "$1" master "$br"
+ else
+ brctl addif $br "$1"
+ fi
+ exit # exit with status of the previous command
+ fi
+done
+
+echo "W: $0: no bridge for guest interface found" >&2