Merge master branch into xs5.7.
authorBen Pfaff <blp@nicira.com>
Wed, 18 Nov 2009 22:26:55 +0000 (14:26 -0800)
committerBen Pfaff <blp@nicira.com>
Wed, 18 Nov 2009 22:26:55 +0000 (14:26 -0800)
Conflicts:
xenserver/README
xenserver/automake.mk
xenserver/etc_xensource_scripts_vif
xenserver/usr_share_vswitch_scripts_dump-vif-details
xenserver/vswitch-xen.spec

1  2 
xenserver/README
xenserver/automake.mk
xenserver/etc_init.d_vswitch
xenserver/etc_xensource_scripts_vif
xenserver/vswitch-xen.spec

diff --combined xenserver/README
@@@ -30,10 -30,6 +30,10 @@@ files are
          vswitch-related shell functions for the administrator's
          convenience.
  
 +    etc_udev_xen-backend.rules
 +
 +        udev rules for invoking the XenServer "vif" and "tap" scripts.
 +
      etc_xapi.d_plugins_vswitch-cfg-update
  
          xapi plugin script to update the cache of configuration items
  
          vswitch-aware replacement for Citrix script of the same name.
  
 -    root_vswitch_scripts_dump-vif-details
 -
 -        Script to retrieve extended information about VIFs that are
 -        needed by the controller.  This is called by the "vif" script,
 -        which is run when virtual interfaces are added and removed.
 -
+     usr_share_vswitch_scripts_refresh-xs-network-uuids
+         Script to refresh bridge.<bridge>.xs-network-uuids keys, which
+         can get out-of-sync following a pool join.  Running this script
+         is an alternative to rebooting the host.
      root_vswitch_scripts_sysconfig.template
  
          Template for vswitch's /etc/sysconfig/vswitch configuration
diff --combined xenserver/automake.mk
@@@ -11,7 -11,6 +11,7 @@@ EXTRA_DIST += 
        xenserver/etc_init.d_vswitch-xapi-update \
        xenserver/etc_logrotate.d_vswitch \
        xenserver/etc_profile.d_vswitch.sh \
 +      xenserver/etc_udev_xen-backend.rules \
        xenserver/etc_xapi.d_plugins_vswitch-cfg-update \
        xenserver/etc_xensource_scripts_vif \
        xenserver/opt_xensource_libexec_interface-reconfigure \
@@@ -19,5 -18,6 +19,6 @@@
        xenserver/usr_sbin_brctl \
        xenserver/usr_sbin_xen-bugtool \
        xenserver/usr_share_vswitch_scripts_sysconfig.template \
 -      xenserver/usr_share_vswitch_scripts_dump-vif-details \
 +      xenserver/usr_share_vswitch_scripts_vif-on-internal-bridge \
+       xenserver/usr_share_vswitch_scripts_refresh-xs-network-uuids \
        xenserver/vswitch-xen.spec
@@@ -24,8 -24,8 +24,8 @@@
  test -e /etc/sysconfig/vswitch && . /etc/sysconfig/vswitch
  
  # General config variables in /etc/sysconfig/vswitch
 -: ${ENABLE_BRCOMPAT:=y}
 -: ${ENABLE_FAKE_PROC_NET:=y}
 +: ${ENABLE_BRCOMPAT:=n}
 +: ${ENABLE_FAKE_PROC_NET:=n}
  : ${FORCE_COREFILES:=y}
  
  # Config variables specific to ovs-vswitchd
@@@ -89,7 -89,7 +89,7 @@@ function insert_modules_if_required 
          action "Inserting llc module" modprobe llc
          action "Inserting openvswitch module" modprobe openvswitch_mod
      fi
 -    if [ -n "$BRCOMPATD_PIDFILE" ] && ! lsmod | grep -q "brcompat_mod"; then
 +    if [ "$ENABLE_BRCOMPAT" = "y" ] && [ -n "$BRCOMPATD_PIDFILE" ] && ! lsmod | grep -q "brcompat_mod"; then
          action "Inserting brcompat module" modprobe brcompat_mod
      fi
  }
@@@ -105,16 -105,13 +105,13 @@@ function remove_modules 
  
  function reload_vswitchd {
      if [ -f "$VSWITCHD_PIDFILE" ]; then
-         "$appctl" \
-             --target=ovs-vswitchd.$(cat "$VSWITCHD_PIDFILE").ctl \
-             --execute=vswitchd/reload
+         "$appctl" --target=/var/run/ovs-vswitchd.`cat $VSWITCHD_PIDFILE`.ctl vswitchd/reload
      fi
  }
  
  function reload_brcompatd {
      if [ -f "$BRCOMPATD_PIDFILE" ]; then
-         "$appctl" \
-             --target=ovs-brcompatd.$(cat "$BRCOMPATD_PIDFILE").ctl --reopen
+         "$appctl" --target=/var/run/ovs-brcompatd.`cat $BRCOMPATD_PIDFILE`.ctl vlog/reopen
      fi
  }
  
@@@ -197,7 -194,7 +194,7 @@@ function start_brcompatd 
          valgrind_opt="valgrind --log-file=$BRCOMPATD_VALGRIND_LOG $BRCOMPATD_VALGRIND_OPT"
          daemonize="n"
      fi
-     appctl_cmd="$appctl -t /var/run/ovs-vswitchd.\`cat $VSWITCHD_PIDFILE\`.ctl -e '%s'"
+     appctl_cmd="$appctl --target=/var/run/ovs-vswitchd.\`cat $VSWITCHD_PIDFILE\`.ctl %s"
      if [ "$daemonize" != "y" ]; then
          # Start in background and force a "success" message
          action "Starting ovs-brcompatd ($strace_opt$valgrind_opt)" true
@@@ -271,13 -268,12 +268,14 @@@ function start 
              '--del-match=port.*' \
              '--del-match=bonding.*' \
              '--del-match=iface.*' \
-             '--del-match=vlan.*'
+             '--del-match=vlan.*.trunks=*' \
+             '--del-match=vlan.*.tag=*'
      fi
  
      start_vswitchd
 -    start_brcompatd
 +    if [ "${ENABLE_BRCOMPAT}" = "y" ] ; then
 +        start_brcompatd
 +    fi
      reload_vswitchd  # ensures ovs-vswitchd has fully read config file.
      touch /var/lock/subsys/vswitch
  }
@@@ -319,12 -315,7 +317,12 @@@ case "$1" i
          ;;
      status)
          status -p ovs-vswitchd.pid ovs-vswitchd
 -        status -p ovs-brcompatd.pid ovs-brcompatd
 +        rc=$?
 +        if [ $rc -eq 0 ] && [ "$ENABLE_BRCOMPAT" = "y" ] ; then
 +            status -p ovs-brcompatd.pid ovs-brcompatd
 +            rc=$?
 +        fi
 +        exit $rc
          ;;
      version)
          /usr/sbin/ovs-vswitchd -V
@@@ -1,7 -1,17 +1,17 @@@
  #!/bin/sh
  
- # Copyright (C) 2008,2009 Citrix Systems, Inc. All rights reserved.
+ # Copyright (C) 2008,2009 Citrix Systems, Inc.
  # Copyright (C) 2009 Nicira Networks, Inc.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU Lesser General Public License as published
+ # by the Free Software Foundation; version 2.1 only. with the special
+ # exception on linking described in file LICENSE.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU Lesser General Public License for more details.
  
  # CA-23900: Warning: when VIFs are added to windows guests with PV drivers the backend vif device is registered,
  # unregistered and then registered again. This causes the udev event to fire twice and this script runs twice.
@@@ -15,15 -25,24 +25,15 @@@ 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"
 -
 -TYPE=`echo ${XENBUS_PATH} | cut -f 2 -d '/'`
 -DOMID=`echo ${XENBUS_PATH} | cut -f 3 -d '/'`
 -DEVID=`echo ${XENBUS_PATH} | cut -f 4 -d '/'`
 -
 -XAPI=/xapi/${DOMID}/hotplug/${TYPE}/${DEVID}
 -HOTPLUG=/xapi/${DOMID}/hotplug/${TYPE}/${DEVID}
 -PRIVATE=/xapi/${DOMID}/private/${TYPE}/${DEVID}
 -BRCTL=/usr/sbin/brctl
 -IP=/sbin/ip
 -
 +IP="/sbin/ip"
 +vif_on_internal_bridge="/usr/share/vswitch/scripts/vif-on-internal-bridge"
  
  handle_promiscuous()
  {
 -    local arg=$(xenstore-read "${PRIVATE}/other-config/promiscuous")
 +    local arg=$(xenstore-read "${PRIVATE}/other-config/promiscuous" 2>/dev/null)
      if [ $? -eq 0 -a -n "${arg}" ] ; then
          case "${arg}" in 
 -            true|on) logger -t script-vif "${vif}: Promiscuous ports are not supported via vSwitch." ;;
 +            true|on) logger -t script-vif "${dev}: Promiscuous ports are not supported via vSwitch." ;;
              *) ;;
          esac
      fi
  handle_ethtool()
  {
      local opt=$1
 -    local arg=$(xenstore-read "${PRIVATE}/other-config/ethtool-${opt}")
 +    local arg=$(xenstore-read "${PRIVATE}/other-config/ethtool-${opt}" 2>/dev/null)
      if [ $? -eq 0 -a -n "${arg}" ] ; then
          case "${arg}" in
 -            true|on)   /sbin/ethtool -K "${vif}" "${opt}" on ;;
 -            false|off) /sbin/ethtool -K "${vif}" "${opt}" off ;;
 -            *) logger -t scripts-vif "Unknown ethtool argument ${opt}=${arg} on ${vif}/${VIFUUID}" ;;
 +            true|on)   /sbin/ethtool -K "${dev}" "${opt}" on ;;
 +            false|off) /sbin/ethtool -K "${dev}" "${opt}" off ;;
 +            *) logger -t scripts-vif "Unknown ethtool argument ${opt}=${arg} on ${dev}/${VIFUUID}" ;;
          esac
      fi
  }
  
  handle_mtu()
  {
 -    local mtu=$(xenstore-read "${PRIVATE}/MTU")
 +    local mtu=$(xenstore-read "${PRIVATE}/MTU" 2>/dev/null)
      if [ $? -eq 0 -a -n "${mtu}" ]; then
 -      echo "${mtu}" > /sys/class/net/${vif}/mtu
 +      echo "${mtu}" > /sys/class/net/${dev}/mtu
      fi
  }
  
 +handle_vif_details()
 +{
 +    local vif_details=
 +    local net_uuid=$(xenstore-read "${PRIVATE}/network-uuid" 2>/dev/null)
 +    if [ -n "${net_uuid}" ] ; then
 +      vif_details="$vif_details --add=port.${dev}.net-uuid=${net_uuid}"
 +    fi
 +
 +    local address=$(xenstore-read "/local/domain/$DOMID/device/vif/$DEVID/mac" 2>/dev/null)
 +    if [ -n "${address}" ] ; then
 +      vif_details="$vif_details --add=port.${dev}.vif-mac=${address}"
 +    fi
 +
 +    local vif_uuid=$(xenstore-read "${PRIVATE}/vif-uuid" 2>/dev/null)
 +    if [ -n "${vif_uuid}" ] ; then
 +      vif_details="$vif_details --add=port.${dev}.vif-uuid=${vif_uuid}"
 +    fi
 +
 +    local vm=$(xenstore-read "/local/domain/$DOMID/vm" 2>/dev/null)
 +    if [ $? -eq 0 -a -n "${vm}" ] ; then
 +      local vm_uuid=$(xenstore-read "$vm/uuid" 2>/dev/null)
 +    fi
 +    if [ -n "${vm_uuid}" ] ; then
 +      vif_details="$vif_details --add=port.${dev}.vm-uuid=${vm_uuid}"
 +    fi
 +
 +    # vNetManager needs to know the network UUID(s) associated with
 +    # each datapath.  Normally interface-reconfigure adds them, but
 +    # interface-reconfigure never gets called for internal networks
 +    # (xapi does 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 internal=$(${vif_on_internal_bridge} ${DOMID} ${DEVID})
 +    if [ "$internal" = "true" ]; then
 +        local bridge=$(xenstore-read "${PRIVATE}/bridge" 2>/dev/null)
 +        local net_uuid=$(xenstore-read "${PRIVATE}/network-uuid" 2>/dev/null)
 +        local key="bridge.${bridge}.xs-network-uuids"
 +
 +        vif_details="$vif_details --del-match=${key}=*"
 +        vif_details="$vif_details --add=${key}=${net_uuid}"
 +    fi
 +
 +    echo ${vif_details}
 +}
 +
  add_to_bridge()
  {
      local address=$(xenstore-read "${PRIVATE}/bridge-MAC")
      if [ $? -ne 0 -o -z "${address}" ]; then
        logger -t scripts-vif "Failed to read ${PRIVATE}/bridge-MAC from xenstore"
 +      exit 1
      fi
      local bridge=$(xenstore-read "${PRIVATE}/bridge")
      if [ $? -ne 0 -o -z "${bridge}" ]; then
        logger -t scripts-vif "Failed to read ${PRIVATE}/bridge from xenstore"
 +      exit 1
      fi
 -    logger -t scripts-vif "Adding ${vif} to ${bridge} with address ${address}"
 +    logger -t scripts-vif "Adding ${dev} to ${bridge} with address ${address}"
  
      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}"
+       vid="--add=vlan.${vif}.tag=${VLAN_ID}"
      fi
  
 -    ${IP} link set "${vif}" down                        || logger -t scripts-vif "Failed to ip link set ${vif} down"
 -    ${IP} link set "${vif}" arp off                     || logger -t scripts-vif "Failed to ip link set ${vif} arp off"
 -    ${IP} link set "${vif}" multicast off               || logger -t scripts-vif "Failed to ip link set ${vif} multicast off"
 -    ${IP} link set "${vif}" address "${address}"        || logger -t scripts-vif "Failed to ip link set ${vif} address ${address}"
 -    ${IP} addr flush "${vif}"                           || logger -t scripts-vif "Failed to ip addr flush ${vif}"
 -
 -    local vif_details=$($dump_vif_details $DOMID $DEVID)
 -    if [ $? -ne 0 -o -z "${vif_details}" ]; then
 -          logger -t scripts-vif "Failed to retrieve vif details for vswitch"
 +    if [ "$type" = "vif" ] ; then
 +      local vif_details=$(handle_vif_details)
      fi
  
 +    ${IP} link set "${dev}" down                        || logger -t scripts-vif "Failed to ip link set ${dev} down"
 +    ${IP} link set "${dev}" arp off                     || logger -t scripts-vif "Failed to ip link set ${dev} arp off"
 +    ${IP} link set "${dev}" multicast off               || logger -t scripts-vif "Failed to ip link set ${dev} multicast off"
 +    ${IP} link set "${dev}" address "${address}"        || logger -t scripts-vif "Failed to ip link set ${dev} address ${address}"
 +    ${IP} addr flush "${dev}"                           || logger -t scripts-vif "Failed to ip addr flush ${dev}"
 +
      $cfg_mod -F /etc/ovs-vswitchd.conf \
 -        --del-match="bridge.*.port=$vif" \
 -        --del-match="vlan.$vif.trunks=*" \
 -        --del-match="vlan.$vif.tag=*" \
 -        --del-match="port.$vif.[!0-9]*" \
 -        --add="bridge.$bridge.port=$vif" \
 +        --del-match="bridge.*.port=${dev}" \
-         --del-match="vlan.${dev}.[!0-9]*" \
++        --del-match="vlan.${dev}.trunks=*" \
++        --del-match="vlan.${dev}.tags=*" \
 +        --del-match="port.${dev}.[!0-9]*" \
 +        --add="bridge.$bridge.port=${dev}" \
          $vid $vif_details -c 
      $service vswitch reload
  
 -    ${IP} link set "${vif}" up                          || logger -t scripts-vif "Failed to ip link set ${vif} up"
 +    ${IP} link set "${dev}" up                          || logger -t scripts-vif "Failed to ip link set ${dev} up"
  }
  
 -echo Called as "$@" "$TYPE" "$DOMID" "$DEVID" | logger -t scripts-vif
 -case "$1" in
 -online)
 -      handle_ethtool rx
 -      handle_ethtool tx
 -      handle_ethtool sg
 -      handle_ethtool tso
 -      handle_ethtool ufo
 -      handle_ethtool gso
 +type=$2
  
 -      handle_mtu
 -      add_to_bridge
 -      handle_promiscuous
 +case ${type} in
 +    vif)
 +      DOMID=`echo ${XENBUS_PATH} | cut -f 3 -d '/'`
 +      DEVID=`echo ${XENBUS_PATH} | cut -f 4 -d '/'`
 +      dev=vif${DOMID}.${DEVID}
 +      ;;
 +    tap)
 +      dev=$INTERFACE
 +      DOMID=`echo ${dev#tap} | cut -f 1 -d '.'`
 +      DEVID=`echo ${dev#tap} | cut -f 2 -d '.'`
 +      ;;
 +    *)  
 +      logger -t scripts-vif "unknown interface type ${type}"
 +      exit 1
 +      ;;
 +esac
  
 -      xenstore-write "${HOTPLUG}/vif" "${vif}"
 -      xenstore-write "${HOTPLUG}/hotplug" "online"
 +XAPI=/xapi/${DOMID}/hotplug/vif/${DEVID}
 +HOTPLUG=/xapi/${DOMID}/hotplug/vif/${DEVID}
 +PRIVATE=/xapi/${DOMID}/private/vif/${DEVID}
  
 -      # xs-xen.pq.hq:91e986b8e49f netback-wait-for-hotplug
 -      xenstore-write "/local/domain/0/backend/vif/${DOMID}/${DEVID}/hotplug-status" "connected"
 +echo Called as "$@" "$DOMID" "$DEVID" | logger -t scripts-vif
 +case "$1" in
 +online)
 +      if [ "${type}" = "vif" ] ; then
 +          handle_ethtool rx
 +          handle_ethtool tx
 +          handle_ethtool sg
 +          handle_ethtool tso
 +          handle_ethtool ufo
 +          handle_ethtool gso
 +
 +          handle_mtu
 +          add_to_bridge
 +          handle_promiscuous
 +
 +          xenstore-write "${HOTPLUG}/vif" "${dev}"
 +          xenstore-write "${HOTPLUG}/hotplug" "online"
 +
 +          # xs-xen.pq.hq:91e986b8e49f netback-wait-for-hotplug
 +          xenstore-write "/local/domain/0/backend/vif/${DOMID}/${DEVID}/hotplug-status" "connected"
 +      fi
 +      ;;
  
 +add)
 +      if [ "${type}" = "tap" ] ; then
 +          add_to_bridge
 +      fi
        ;;
 +
  remove)
 -      xenstore-rm "${HOTPLUG}/hotplug"
 -      vif=vif${DOMID}.${DEVID}
 -      logger -t scripts-vif "${vif} has been removed"
 +      if [ "${type}" = "vif" ] ;then
 +          xenstore-rm "${HOTPLUG}/hotplug"
 +      fi
 +      logger -t scripts-vif "${dev} has been removed"
        $cfg_mod -vANY:console:emer -F /etc/ovs-vswitchd.conf \
 -          --del-match="bridge.*.port=${vif}" \
 -          --del-match="vlan.${vif}.trunks=*" \
 -          --del-match="vlan.${vif}.tag=*" \
 -          --del-match="port.${vif}.[!0-9]*" -c
 +          --del-match="bridge.*.port=${dev}" \
-           --del-match="vlan.${dev}.[!0-9]*" \
++          --del-match="vlan.${dev}.trunks=*" \
++          --del-match="vlan.${dev}.tag=*" \
 +          --del-match="port.${dev}.[!0-9]*" -c
        $service vswitch reload
        ;;
  esac
@@@ -71,16 -71,16 +71,18 @@@ install -m 755 xenserver/opt_xensource_
               $RPM_BUILD_ROOT/usr/share/vswitch/scripts/interface-reconfigure
  install -m 755 xenserver/etc_xensource_scripts_vif \
               $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif
 -install -m 755 xenserver/usr_share_vswitch_scripts_dump-vif-details \
 -               $RPM_BUILD_ROOT/usr/share/vswitch/scripts/dump-vif-details
 +install -m 755 xenserver/usr_share_vswitch_scripts_vif-on-internal-bridge \
 +             $RPM_BUILD_ROOT/usr/share/vswitch/scripts/vif-on-internal-bridge
+ install -m 755 xenserver/usr_share_vswitch_scripts_refresh-xs-network-uuids \
+                $RPM_BUILD_ROOT/usr/share/vswitch/scripts/refresh-xs-network-uuids
  install -m 755 xenserver/usr_sbin_xen-bugtool \
               $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-bugtool
  install -m 755 xenserver/usr_sbin_brctl \
               $RPM_BUILD_ROOT/usr/share/vswitch/scripts/brctl
  install -m 755 xenserver/usr_share_vswitch_scripts_sysconfig.template \
           $RPM_BUILD_ROOT/usr/share/vswitch/scripts/sysconfig.template
 +install -m 644 xenserver/etc_udev_xen-backend.rules \
 +        $RPM_BUILD_ROOT/usr/share/vswitch/scripts/xen-backend.rules
  install -m 644 \
          xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
                 $RPM_BUILD_ROOT/usr/share/vswitch/scripts/XSFeatureVSwitch.py
@@@ -123,7 -123,6 +125,7 @@@ ca141d60061dcfdade73e75abc6529b5  /usr/
  b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
  51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
  5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
 +883820a78723ee21340f31099b18f18e  /etc/udev/xen-backend.rules
  EOF
      then
          printf "\nVerified host scripts from XenServer 5.5.0.\n\n"
@@@ -132,7 -131,6 +134,7 @@@ ca141d60061dcfdade73e75abc6529b5  /usr/
  b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
  ce451d3c985fd1db6497a363f0d9dedb  /opt/xensource/libexec/interface-reconfigure
  2b53f500431fcba5276c896e9e4281b9  /usr/sbin/xen-bugtool
 +883820a78723ee21340f31099b18f18e  /etc/udev/xen-backend.rules
  EOF
      then
          printf "\nVerified host scripts from XenServer 5.5.900.\n\n"
@@@ -213,8 -211,7 +215,8 @@@ for f in 
      /opt/xensource/libexec/interface-reconfigure \
      /etc/xensource/scripts/vif \
      /usr/sbin/xen-bugtool \
 -    /usr/sbin/brctl
 +    /usr/sbin/brctl \
 +    /etc/udev/xen-backend.rules
  do
      s=$(basename "$f")
      t=$(readlink "$f")
@@@ -273,8 -270,7 +275,8 @@@ if [ "$1" = "0" ]; then     # $1 = 1 fo
          /opt/xensource/libexec/interface-reconfigure \
          /etc/xensource/scripts/vif \
          /usr/sbin/xen-bugtool \
 -        /usr/sbin/brctl
 +        /usr/sbin/brctl \
 +        /etc/udev/xen-backend.rules
      do
          s=$(basename "$f")
          if [ ! -f "/usr/lib/vswitch/xs-original/$s" ]; then
  /etc/profile.d/vswitch.sh
  /lib/modules/%{xen_version}/kernel/net/vswitch/openvswitch_mod.ko
  /lib/modules/%{xen_version}/kernel/net/vswitch/brcompat_mod.ko
 -/usr/share/vswitch/scripts/dump-vif-details
+ /usr/share/vswitch/scripts/refresh-xs-network-uuids
  /usr/share/vswitch/scripts/interface-reconfigure
  /usr/share/vswitch/scripts/vif
  /usr/share/vswitch/scripts/xen-bugtool
  /usr/share/vswitch/scripts/XSFeatureVSwitch.py
  /usr/share/vswitch/scripts/brctl
  /usr/share/vswitch/scripts/sysconfig.template
 +/usr/share/vswitch/scripts/vif-on-internal-bridge
 +/usr/share/vswitch/scripts/xen-backend.rules
  # Following two files are generated automatically by rpm.  We don't
  # really need them and they won't be used on the XenServer, but there
  # isn't an obvious place to get rid of them since they are generated