File bridge-vlan.patch of Package xen.481

Index: xen-4.2.0-testing/tools/hotplug/Linux/network-bridge
===================================================================
--- xen-4.2.0-testing.orig/tools/hotplug/Linux/network-bridge
+++ xen-4.2.0-testing/tools/hotplug/Linux/network-bridge
@@ -195,6 +195,28 @@ antispoofing () {
     iptables -A FORWARD -m physdev --physdev-in ${pdev} -j ACCEPT
 }
 
+find_active_vlans() {
+    local netdev=$1
+    local vlan
+    local vlans
+    vlans=""
+    for vifcfg in /etc/sysconfig/network/ifcfg-vlan* ; do
+        vlan=${vifcfg/*\/ifcfg-}
+        if [ "$vlan" = "vlan*" ]; then
+            continue
+        fi
+        . $vifcfg
+        etherdevice="$ETHERDEVICE"
+        if [ -x /sbin/getcfg-interface ]; then
+                etherdevice=$(/sbin/getcfg-interface "$ETHERDEVICE")
+        fi
+        if [ "$ETHERDEVICE" = "$netdev" ] || [ "$etherdevice" = "$netdev" ] ; then
+                link_exists "$vlan" && vlans="$vlans $vlan"
+        fi
+    done
+    echo "$vlans"
+}
+
 # Usage: show_status dev bridge
 # Print ifconfig and routes.
 show_status () {
@@ -229,6 +251,9 @@ op_start () {
 
     claim_lock "network-bridge"
 
+    vlans=$(find_active_vlans "${netdev}")
+    for vlan in $vlans ; do ifdown $vlan ; done
+
     create_bridge ${tdev}
 
     preiftransfer ${netdev}
@@ -256,6 +281,8 @@ op_start () {
     add_to_bridge2 ${bridge} ${pdev}
     do_ifup ${bridge}
 
+    for vlan in $vlans ; do ifup $vlan ; done
+
     if [ ${antispoof} = 'yes' ] ; then
 	antispoofing
     fi
@@ -277,6 +304,9 @@ op_stop () {
 
     claim_lock "network-bridge"
 
+    vlans=$(find_active_vlans "${netdev}")
+    for vlan in $vlans ; do ifdown $vlan ; done
+
     transfer_addrs ${bridge} ${pdev}
     if ! ifdown ${bridge}; then
 	get_ip_info ${bridge}
@@ -293,6 +323,8 @@ op_stop () {
     ip link set ${pdev} name ${netdev}
     do_ifup ${netdev}
 
+    for vlan in $vlans ; do ifup $vlan ; done
+
     release_lock "network-bridge"
 }
 
openSUSE Build Service is sponsored by