[ovs-dev] [PATCH 2/3] xenserver: Fix vNetManager internal network compatibility with XS 5.5.0.

Ben Pfaff blp at nicira.com
Fri Feb 26 16:14:45 PST 2010


The previous commit depends on XAPI to add "xs-network-uuids" external IDs
for internal networks.  Only recent XAPI builds do this and in particular
the version in XenServer 5.5.0 does not.  This commit restores support
for these older XenServer versions.

CC: Ian Campbell <ian.campbell at citrix.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 xenserver/etc_xensource_scripts_vif |   27 ++++++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/xenserver/etc_xensource_scripts_vif b/xenserver/etc_xensource_scripts_vif
index d042875..c780fed 100755
--- a/xenserver/etc_xensource_scripts_vif
+++ b/xenserver/etc_xensource_scripts_vif
@@ -103,6 +103,31 @@ handle_vswitch_vif_details()
     fi
 }
 
+xs550_set_internal_network_uuid()
+{
+    . /etc/xensource-inventory
+    if test "$PRODUCT_VERSION" = "5.5.0" || test "${BUILD_NUMBER%p}" -le 26131
+    then
+        # vNetManager needs to know the network UUID(s) associated with each
+        # datapath.  Normally interface-reconfigure adds them, but XAPI does
+        # not use interface-reconfigure for internal networks. Instead, XAPI
+        # calls the addbr ioctl internally, so we have to do it here instead
+        # for internal networks.  This is only acceptable because xapi is lazy
+        # about creating internal networks: it only creates one just before it
+        # adds the first vif to it.  There may still be a brief delay between
+        # the initial ovs-vswitchd connection to vNetManager and setting this
+        # configuration variable, but vNetManager can tolerate that.
+        local bridge=$1
+        local net_uuid=$(xenstore-read "${PRIVATE}/network-uuid" 2>/dev/null)
+        if [ -n "${net_uuid}" ] ; then
+            logger -t scripts-vif "${bridge} xs-network-uuids ${net_uuid}"
+            echo "-- br-set-external-id \"$bridge\" xs-network-uuids \"${net_uuid}\""
+        fi
+    else
+        # XAPI after 5.5.0 sets the network external ids itself, via ovs-vsctl.
+    fi
+}
+
 add_to_bridge()
 {
     local address=$(xenstore-read "${PRIVATE}/bridge-MAC")
@@ -133,7 +158,7 @@ add_to_bridge()
 		local vif_details=$(handle_vswitch_vif_details)
 	    fi
 
-	    $vsctl -- --if-exists del-port $dev -- add-port $bridge $dev $vif_details
+	    $vsctl -- --if-exists del-port $dev -- add-port $bridge $dev $vif_details $(xs550_set_internal_network_uuid)
 	    ;;
     esac
 	    
-- 
1.6.6.1





More information about the dev mailing list