diff options
author | Anthony Perard <anthony.perard@citrix.com> | 2010-08-09 16:46:02 +0100 |
---|---|---|
committer | Anthony Perard <anthony.perard@citrix.com> | 2010-08-09 16:46:02 +0100 |
commit | 025e84f126fcc3acdc75f7706a6e8ceac71b8d86 (patch) | |
tree | 38ede4020d17f98f8307ee2c9b0bf17b55b1cc83 /tools/hotplug | |
parent | 2d50ecfbf6aca65552d6864c80c00116f81230af (diff) | |
download | xen-025e84f126fcc3acdc75f7706a6e8ceac71b8d86.tar.gz xen-025e84f126fcc3acdc75f7706a6e8ceac71b8d86.tar.bz2 xen-025e84f126fcc3acdc75f7706a6e8ceac71b8d86.zip |
tools/hotplug, Use udev rules instead of qemu script to setup the bridge.
From: Anthony PERARD <anthony.perard@citrix.com>
This patch adds a second argument to vif-bridge script. It can be "vif"
or "tap". "vif" give the default behavior and "tap" just add the
interface to the found bridge when the action is "add".
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
tools/hotplug/Linux/vif-bridge | 20 ++++++---
tools/hotplug/Linux/vif-common.sh | 70 ++++++++++++++++++++++++---------
tools/hotplug/Linux/xen-backend.rules | 5 +-
tools/libxl/libxl.c | 6 +-
4 files changed, 70 insertions(+), 31 deletions(-)
Diffstat (limited to 'tools/hotplug')
-rw-r--r-- | tools/hotplug/Linux/vif-bridge | 20 | ||||
-rw-r--r-- | tools/hotplug/Linux/vif-common.sh | 70 | ||||
-rw-r--r-- | tools/hotplug/Linux/xen-backend.rules | 5 |
3 files changed, 67 insertions, 28 deletions
diff --git a/tools/hotplug/Linux/vif-bridge b/tools/hotplug/Linux/vif-bridge index d35144e1e9..82ba676202 100644 --- a/tools/hotplug/Linux/vif-bridge +++ b/tools/hotplug/Linux/vif-bridge @@ -81,20 +81,26 @@ fi case "$command" in online) - setup_bridge_port "$vif" - add_to_bridge "$bridge" "$vif" + setup_bridge_port "$dev" + add_to_bridge "$bridge" "$dev" ;; offline) - do_without_error brctl delif "$bridge" "$vif" - do_without_error ifconfig "$vif" down + do_without_error brctl delif "$bridge" "$dev" + do_without_error ifconfig "$dev" down + ;; + + add) + add_to_bridge "$bridge" "$dev" ;; esac -handle_iptable +if [ "$type_if" = vif ]; then + handle_iptable +fi -log debug "Successful vif-bridge $command for $vif, bridge $bridge." -if [ "$command" == "online" ] +log debug "Successful vif-bridge $command for $dev, bridge $bridge." +if [ "$type_if" = vif -a "$command" = "online" ] then success fi diff --git a/tools/hotplug/Linux/vif-common.sh b/tools/hotplug/Linux/vif-common.sh index 44dd342acf..780cc718ab 100644 --- a/tools/hotplug/Linux/vif-common.sh +++ b/tools/hotplug/Linux/vif-common.sh @@ -31,12 +31,6 @@ then exit 1 fi -case "$command" in - add | remove) - exit 0 - ;; -esac - # Parameters may be read from the environment, the command line arguments, and # the store, with overriding in that order. The environment is given by the @@ -45,24 +39,62 @@ esac evalVariables "$@" -ip=${ip:-} -ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip") +# Older versions of Xen do not pass in the type as an argument, +# so the default value is vif. +: ${type_if:=vif} + +case "$type_if" in + vif) + dev=$vif + ;; + tap) + dev=$INTERFACE + ;; + *) + log err "unknown interface type $type_if" + exit 1 + ;; +esac -# Check presence of compulsory args. -XENBUS_PATH="${XENBUS_PATH:?}" -vif="${vif:?}" +case "$command" in + online | offline) + test "$type_if" != vif && exit 0 + ;; + add | remove) + test "$type_if" != tap && exit 0 + ;; +esac -vifname=$(xenstore_read_default "$XENBUS_PATH/vifname" "") -if [ "$vifname" ] -then - if [ "$command" == "online" ] && ! ip link show "$vifname" >&/dev/null - then - do_or_die ip link set "$vif" name "$vifname" - fi - vif="$vifname" +if [ "$type_if" = vif ]; then + # Check presence of compulsory args. + XENBUS_PATH="${XENBUS_PATH:?}" + vif="${vif:?}" + + vifname=$(xenstore_read_default "$XENBUS_PATH/vifname" "") + if [ "$vifname" ] + then + if [ "$command" == "online" ] && ! ip link show "$vifname" >&/dev/null + then + do_or_die ip link set "$vif" name "$vifname" + fi + vif="$vifname" + fi +elif [ "$type_if" = tap ]; then + # Check presence of compulsory args. + : ${INTERFACE:?} + + # Get xenbus_path from device name. + # The name is built like that: "tap${domid}.${devid}". + dev_=${dev#tap} + domid=${dev_%.*} + devid=${dev_#*.} + + XENBUS_PATH="/local/domain/0/backend/vif/$domid/$devid" fi +ip=${ip:-} +ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip") frob_iptable() { diff --git a/tools/hotplug/Linux/xen-backend.rules b/tools/hotplug/Linux/xen-backend.rules index 2d844a15bd..ccbe508f48 100644 --- a/tools/hotplug/Linux/xen-backend.rules +++ b/tools/hotplug/Linux/xen-backend.rules @@ -2,10 +2,11 @@ SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap $env{ACT SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}" SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}" SUBSYSTEM=="xen-backend", KERNEL=="vif2-*", RUN+="/etc/xen/scripts/vif2 $env{ACTION}" -SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="online", RUN+="/etc/xen/scripts/vif-setup online" -SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="offline", RUN+="/etc/xen/scripts/vif-setup offline" +SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="online", RUN+="/etc/xen/scripts/vif-setup online type_if=vif" +SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="offline", RUN+="/etc/xen/scripts/vif-setup offline type_if=vif" SUBSYSTEM=="xen-backend", KERNEL=="vscsi*", RUN+="/etc/xen/scripts/vscsi $env{ACTION}" SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/etc/xen/scripts/xen-hotplug-cleanup" KERNEL=="evtchn", NAME="xen/%k" KERNEL=="blktap[0-9]*", NAME="xen/%k" KERNEL=="pci_iomul", NAME="xen/%k" +SUBSYSTEM=="net", KERNEL=="tap*", ACTION=="add", RUN+="/etc/xen/scripts/vif-setup $env{ACTION} type_if=tap" |