From: Ian Campbell Date: Mon, 5 Oct 2009 15:32:53 +0000 (+0100) Subject: xenserver: use ovs-vsctl for VIF VLANs instead of separate state files X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55bc65533fe868666f6ea8539f2a1b30da964abf;p=openvswitch xenserver: use ovs-vsctl for VIF VLANs instead of separate state files ovs-vsctl did not exist when this code was originally written, but it provides exactly what is needed to get rid of those separate state files. The vif hotplug script diff is against the xs5.7 branch but I think is applicable to master and/or citrix with just context changes. I was thinking of using ovs-vsctl exclusively for configuration modifications from the vif hotplug script but that would need a mechanism to pass the additional vif details to ovs-vsctl add-port as well as perhaps making the bridge optional to del-port. The other option would be to use the --no-reload option and split the config mods into two parts, but I don't like that idea much. --- diff --git a/xenserver/etc_xensource_scripts_vif b/xenserver/etc_xensource_scripts_vif index 04aa2bb0..dc9cb7b7 100755 --- a/xenserver/etc_xensource_scripts_vif +++ b/xenserver/etc_xensource_scripts_vif @@ -12,6 +12,7 @@ # Keep other-config/ keys in sync with device.ml:vif_udev_keys cfg_mod="/usr/bin/ovs-cfg-mod" +vsctl="/usr/bin/ovs-vsctl" dump_vif_details="/usr/share/vswitch/scripts/dump-vif-details" service="/sbin/service" @@ -70,13 +71,11 @@ add_to_bridge() fi logger -t scripts-vif "Adding ${vif} to ${bridge} with address ${address}" - vid= - if [ -e "/var/lib/openvswitch/br-$bridge" ]; then - . "/var/lib/openvswitch/br-$bridge" - if [ -n "$VLAN_SLAVE" -a -n "$VLAN_VID" ]; then - bridge=$VLAN_SLAVE - vid="--add=vlan.$vif.tag=$VLAN_VID" - fi + local VLAN_ID=$($vsctl br-to-vlan $bridge) + local vid= + if [ "$VLAN_ID" -ne 0 ] ; then + bridge=$($vsctl br-to-parent $bridge) + vid="--add=vlan.${dev}.tag=${VLAN_ID}" fi ${IP} link set "${vif}" down || logger -t scripts-vif "Failed to ip link set ${vif} down" diff --git a/xenserver/opt_xensource_libexec_interface-reconfigure b/xenserver/opt_xensource_libexec_interface-reconfigure index 7b0c9eff..e9f56ddf 100755 --- a/xenserver/opt_xensource_libexec_interface-reconfigure +++ b/xenserver/opt_xensource_libexec_interface-reconfigure @@ -1473,17 +1473,6 @@ def action_up(pif): cfgmod_argv += ['--add=vlan.%s.tag=%s' % (ipdev, pifrec['VLAN'])] cfgmod_argv += ['--add=iface.%s.internal=true' % (ipdev)] cfgmod_argv += ['--add=iface.%s.fake-bridge=true' % (ipdev)] - if not os.path.exists(vswitch_state_dir): - os.mkdir(vswitch_state_dir) - br = ConfigurationFile("br-%s" % ipdev, vswitch_state_dir) - br.write("VLAN_SLAVE=%s\n" % bridge) - br.write("VLAN_VID=%s\n" % pifrec['VLAN']) - br.close() - f.attach_child(br) - else: - br = ConfigurationFile("br-%s" % ipdev, vswitch_state_dir) - br.unlink() - f.attach_child(br) # Apply updated configuration. try: