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

[Xen-changelog] [xen-unstable] hotplug: vif: fail if a duplicate vifname is used.


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-unstable <patchbot@xxxxxxx>
  • Date: Mon, 23 Jul 2012 19:55:15 +0000
  • Delivery-date: Mon, 23 Jul 2012 19:55:25 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1343045386 -3600
# Node ID c2575d6b9650a39e34971f75eceee6dc9d456ba9
# Parent  7b8b143e4a86a49ca2c82c450b84ad6d4f023c34
hotplug: vif: fail if a duplicate vifname is used.

This is based on a patch from Hans van Kranenburg in
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=658305. Quoting that bug
report:

    When configurating a duplicate custom vifname for interfaces in the Xen
    dom0 that are added to a bridge (which is obviously a configuration error),
    the hotplug scripts fail silently to rename the new vifX.0 to
    the custom vifname, if it's already existing.

    The result of this, is that the domU will start normally, but no network
    traffic between domU and the dom0 bridge is possible, because the vifX.0
    never gets added to the bridge.

    Worse... when doing xm shutdown on the newly created domU, while
    investigating the issue, the interface of another running domU gets shut
    down, and remains hanging around in a DOWN state, because it cannot be
    removed (the other unrelated domU is still running, but succesfully made
    unavailable on the network!).

    When starting the new domU again, the interface of the other domU will
    be added to the bridge again, and while looking at the output of brctl
    show, tcpdump and ping, which make no sense, because everything will
    seem to be right, nagios will notify you of another host being down. :|

Note that libxl doesn't actually check the hotplug status yet, this changes
with Rogers hotplug script changes. xend correctly picks the failure up.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---


diff -r 7b8b143e4a86 -r c2575d6b9650 tools/hotplug/Linux/vif-common.sh
--- a/tools/hotplug/Linux/vif-common.sh Mon Jul 23 13:09:45 2012 +0100
+++ b/tools/hotplug/Linux/vif-common.sh Mon Jul 23 13:09:46 2012 +0100
@@ -65,6 +65,20 @@ case "$command" in
         ;;
 esac
 
+rename_vif() {
+    local dev=$1
+    local vifname=$2
+
+    # if a custom vifname was chosen and a link with that desired name
+    # already exists, then stop, before messing up whatever is using
+    # that interface (e.g. another running domU) because it's likely a
+    # configuration error
+    if ip link show "$vifname" >&/dev/null
+    then
+        fatal "Cannot rename interface $dev. An interface with name $vifname 
already exists."
+    fi
+    do_or_die ip link set "$dev" name "$vifname"
+}
 
 if [ "$type_if" = vif ]; then
     # Check presence of compulsory args.
@@ -74,9 +88,9 @@ if [ "$type_if" = vif ]; then
     vifname=$(xenstore_read_default "$XENBUS_PATH/vifname" "")
     if [ "$vifname" ]
     then
-        if [ "$command" == "online" ] && ! ip link show "$vifname" >&/dev/null
+        if [ "$command" == "online" ]
         then
-            do_or_die ip link set "$dev" name "$vifname"
+            rename_vif "$dev" "$vifname"
         fi
         dev="$vifname"
     fi
@@ -96,9 +110,9 @@ elif [ "$type_if" = tap ]; then
     if [ "$vifname" ]
     then
         vifname="${vifname}-emu"
-        if [ "$command" == "add" ] && ! ip link show "$vifname" >&/dev/null
+        if [ "$command" == "add" ]
         then
-            do_or_die ip link set "$dev" name "$vifname"
+            rename_vif "$dev" "$vifname"
         fi
         dev="$vifname"
     fi

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
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®.