[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Rename the commands inside the hotplug scripts to match those used by hotplug



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID e2e7f47e6f79721d97fd7a1f84c5299661aa9ad9
# Parent  9523e6d105119360ce0fd4208d8e6fee19f2bfba
Rename the commands inside the hotplug scripts to match those used by hotplug
and udev.  Pass all commands through from xen-backend.agent or
xen-backend.rules rather than second-guessing the individual scripts.  This
should make it easier to tear down devices cleanly, especially the dangling
vifs we are seeing at the moment.

Cope with a missing type node inside the block script, as we don't want to
resurrect a removed node by writing a hotplug error message.

Log failure of iptables command.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>

diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/block
--- a/tools/examples/block      Fri Nov 11 16:59:20 2005
+++ b/tools/examples/block      Fri Nov 11 17:01:44 2005
@@ -2,6 +2,12 @@
 
 dir=$(dirname "$0")
 . "$dir/block-common.sh"
+
+case "$command" in
+    online | offline)
+        exit 0
+        ;;
+esac
 
 expand_dev() {
   local dev
@@ -16,10 +22,10 @@
   echo -n $dev
 }
 
-t=$(xenstore_read "$XENBUS_PATH"/type || true)
+t=$(xenstore_read_default "$XENBUS_PATH"/type "MISSING")
 
 case "$command" in 
-  bind)
+  add)
     p=$(xenstore_read "$XENBUS_PATH"/params)
     case $t in 
       phy)
@@ -38,32 +44,25 @@
        done
        exit 1
        ;;
-
-      *)
-        [ -x /etc/xen/scripts/block-"$t" ] && \
-           /etc/xen/scripts/block-"$t" bind $p
-       ;;
     esac
     ;;
 
-  unbind)
-    node=$(xenstore_read "$XENBUS_PATH"/node)
+  remove)
     case $t in 
       phy)
        exit 0
        ;;
 
       file)
+        node=$(xenstore_read "$XENBUS_PATH"/node)
        losetup -d $node
        exit 0
        ;;
-
-      *)
-        [ -x /etc/xen/scripts/block-"$t" ] && \
-           /etc/xen/scripts/block-"$t" unbind $node
-       ;;
-
     esac
     ;;
 
 esac
+
+# If we've reached here, $t is neither phy nor file, so fire a helper script.
+[ -x /etc/xen/scripts/block-"$t" ] && \
+  /etc/xen/scripts/block-"$t" "$command" $node
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/block-common.sh
--- a/tools/examples/block-common.sh    Fri Nov 11 16:59:20 2005
+++ b/tools/examples/block-common.sh    Fri Nov 11 17:01:44 2005
@@ -19,9 +19,12 @@
 dir=$(dirname "$0")
 . "$dir/xen-hotplug-common.sh"
 
-command="$1"
+findCommand "$@"
 
-if [ "$command" != "bind" ] && [ "$command" != "unbind" ]
+if [ "$command" != "online" ]  &&
+   [ "$command" != "offline" ] &&
+   [ "$command" != "add" ]     &&
+   [ "$command" != "remove" ]
 then
   log err "Invalid command: $command"
   exit 1
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/vif-bridge
--- a/tools/examples/vif-bridge Fri Nov 11 16:59:20 2005
+++ b/tools/examples/vif-bridge Fri Nov 11 17:01:44 2005
@@ -9,7 +9,7 @@
 # places, then this script is the default.
 #
 # Usage:
-# vif-bridge (up|down)
+# vif-bridge (add|remove|online|offline)
 #
 # Environment vars:
 # vif         vif interface name (required).
@@ -47,7 +47,7 @@
 fi
 
 case "$command" in
-    up)
+    online)
         if brctl show "$bridge" | grep "$vif" >&/dev/null
         then
           log debug "$vif already attached to $bridge"
@@ -58,9 +58,9 @@
           fatal "brctl addif $bridge $vif failed"
 
         ifconfig "$vif" up || fatal "ifconfig $vif up failed"
-        success
         ;;
-    down)
+
+    remove)
         # vifs are auto-removed from bridge.
         ifconfig "$vif" down || fatal "ifconfig $vif down failed"
         ;;
@@ -69,3 +69,4 @@
 handle_iptable
 
 log debug "Successful vif-bridge operation for $vif, bridge $bridge."
+success
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/vif-common.sh
--- a/tools/examples/vif-common.sh      Fri Nov 11 16:59:20 2005
+++ b/tools/examples/vif-common.sh      Fri Nov 11 17:01:44 2005
@@ -22,11 +22,20 @@
 
 findCommand "$@"
 
-if [ "$command" != "up" ] && [ "$command" != "down" ]
+if [ "$command" != "online" ]  &&
+   [ "$command" != "offline" ] &&
+   [ "$command" != "add" ]     &&
+   [ "$command" != "remove" ]
 then
   log err "Invalid command: $command"
   exit 1
 fi
+
+case "$command" in
+    add | offline)
+        exit 0
+        ;;
+esac
 
 
 # Parameters may be read from the environment, the command line arguments, and
@@ -46,7 +55,7 @@
 
 function frob_iptable()
 {
-  if [ "$command" == "up" ]
+  if [ "$command" == "online" ]
   then
     local c="-A"
   else
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/vif-nat
--- a/tools/examples/vif-nat    Fri Nov 11 16:59:20 2005
+++ b/tools/examples/vif-nat    Fri Nov 11 17:01:44 2005
@@ -9,7 +9,7 @@
 # places, then vif-bridge is the default.
 #
 # Usage:
-# vif-nat (up|down)
+# vif-nat (add|remove|online|offline)
 #
 # Environment vars:
 # vif         vif interface name (required).
@@ -40,12 +40,12 @@
 main_ip=$(ip addr show eth0 | sed -e '/inet /!d;s/^.*inet \([^\s*]\)\s.*$/\1/')
 
 case "$command" in
-    up)
+    online)
         ifconfig ${vif} ${vif_ip} netmask ${netmask} up
         echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
         ipcmd='a'
         ;;
-    down)
+    remove)
         ifconfig ${vif} down
         ipcmd='d'
         ;;
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/vif-route
--- a/tools/examples/vif-route  Fri Nov 11 16:59:20 2005
+++ b/tools/examples/vif-route  Fri Nov 11 17:01:44 2005
@@ -9,7 +9,7 @@
 # places, then vif-bridge is the default.
 #
 # Usage:
-# vif-route (up|down)
+# vif-route (add|remove|online|offline)
 #
 # Environment vars:
 # vif         vif interface name (required).
@@ -26,12 +26,12 @@
 main_ip=$(ip addr show eth0 | sed -e '/inet /!d;s/^.*inet \([^\s*]\)\s.*$/\1/')
 
 case "$command" in
-    up)
+    online)
         ifconfig ${vif} ${main_ip} netmask 255.255.255.255 up
         echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
         ipcmd='a'
         ;;
-    down)
+    remove)
         ifdown ${vif}
         ipcmd='d'
         ;;
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/xen-backend.agent
--- a/tools/examples/xen-backend.agent  Fri Nov 11 16:59:20 2005
+++ b/tools/examples/xen-backend.agent  Fri Nov 11 17:01:44 2005
@@ -2,35 +2,25 @@
 
 PATH=/etc/xen/scripts:$PATH
 
+case "$XENBUS_TYPE" in
+  vbd)
+    /etc/xen/scripts/block "$ACTION"
+    ;;
+  vif)
+    [ -n "$script" ] && $script "$ACTION"
+    ;;
+esac
+
 case "$ACTION" in
   add)
-    case "$XENBUS_TYPE" in
-      vbd)
-       /etc/xen/scripts/block bind
-        ;;
-    esac
     ;;
   remove)
-    case "$XENBUS_TYPE" in
-      vbd)
-       /etc/xen/scripts/block unbind
-        ;;
-      vif)
-        [ -n "$script" ] && $script down
-        ;;
-    esac
     # remove device backend store entries
-    xenstore-rm -t "$XENBUS_PATH"
-    xenstore-rm -t "error/$XENBUS_PATH"
+    xenstore-rm -t "$XENBUS_PATH"       || true
+    xenstore-rm -t "error/$XENBUS_PATH" || true
     ;;
   online)
-    case "$XENBUS_TYPE" in
-      vif)
-        [ -n "$script" ] && $script up
-        ;;
-    esac
     ;;
   offline)
     ;;
 esac
-
diff -r 9523e6d10511 -r e2e7f47e6f79 tools/examples/xen-backend.rules
--- a/tools/examples/xen-backend.rules  Fri Nov 11 16:59:20 2005
+++ b/tools/examples/xen-backend.rules  Fri Nov 11 17:01:44 2005
@@ -1,4 +1,5 @@
-SUBSYSTEM=="xen-backend", KERNEL=="vbd*", ACTION=="add", 
RUN+="/etc/xen/scripts/block bind"
-SUBSYSTEM=="xen-backend", KERNEL=="vbd*", ACTION=="remove", 
RUN+="/etc/xen/scripts/block unbind"
-SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} 
up"
+SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block 
$env{ACTION}"
+SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} 
online"
+SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="offline", 
RUN+="$env{script} offline"
 SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/usr/bin/xenstore-rm -t 
$env{XENBUS_PATH}"
+SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/usr/bin/xenstore-rm -t 
error/$env{XENBUS_PATH}"

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.