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

[Xen-devel] [patch] xen bridged network setup fixes


  • To: Xen devel list <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: Gerd Hoffmann <kraxel@xxxxxxx>
  • Date: Fri, 12 May 2006 12:24:18 +0200
  • Delivery-date: Fri, 12 May 2006 03:24:44 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

  Hi,

The attached patch fixes the setup of the bridge ports and the bridge
itself.  Changes:

  * move some functions to xen-network-common.sh, so both vif-bridge
    and network-bridge can use them.
  * add a new function to configure bridge ports and use it.
  * make sure arp requests, ipv6 autoconfiguration and ipv6 router
    solicitations are disabled for the bridge ports and also for the
    bridge itself.

cheers,

  Gerd

-- 
Gerd Hoffmann <kraxel@xxxxxxx>
Erst mal heiraten, ein, zwei Kinder, und wenn alles läuft
geh' ich nach drei Jahren mit der Familie an die Börse.
http://www.suse.de/~kraxel/julika-dora.jpeg
--- /etc/xen/scripts/vif-bridge.ipv6    2006-05-11 17:23:16.000000000 +0200
+++ /etc/xen/scripts/vif-bridge 2006-05-12 09:12:12.000000000 +0200
@@ -48,16 +48,8 @@
 
 case "$command" in
     online)
-        if brctl show | grep -q "$vif"
-        then
-          log debug "$vif already attached to a bridge"
-          exit 0
-        fi
-
-        brctl addif "$bridge" "$vif" ||
-          fatal "brctl addif $bridge $vif failed"
-
-        ifconfig "$vif" up || fatal "ifconfig $vif up failed"
+       setup_bridge_port "$vif"
+       add_to_bridge "$bridge" "$vif"
         ;;
 
     offline)
--- /etc/xen/scripts/network-bridge.ipv6        2006-05-11 17:23:30.000000000 
+0200
+++ /etc/xen/scripts/network-bridge     2006-05-12 10:27:04.000000000 +0200
@@ -137,29 +137,6 @@
 }
 
 
-# Usage: create_bridge bridge
-create_bridge () {
-    local bridge=$1
-
-    # Don't create the bridge if it already exists.
-    if [ ! -e "/sys/class/net/${bridge}/bridge" ]; then
-       brctl addbr ${bridge}
-       brctl stp ${bridge} off
-       brctl setfd ${bridge} 0
-    fi
-    ip link set ${bridge} up
-}
-
-# Usage: add_to_bridge bridge dev
-add_to_bridge () {
-    local bridge=$1
-    local dev=$2
-    # Don't add $dev to $bridge if it's already on a bridge.
-    if [ ! -e "/sys/class/net/${bridge}/brif/${dev}" ]; then
-       brctl addif ${bridge} ${dev}
-    fi
-}
-
 # Set the default forwarding policy for $dev to drop.
 # Allow forwarding to the bridge.
 antispoofing () {
@@ -220,15 +197,14 @@
        ifdown ${netdev}
        ip link set ${netdev} name ${pdev}
        ip link set ${vdev} name ${netdev}
-       ip link set ${pdev} down arp off
-       ip link set ${pdev} addr fe:ff:ff:ff:ff:ff
-       ip addr flush ${pdev}
+
+       setup_bridge_port ${pdev}
+       setup_bridge_port ${vif0}
        ip link set ${netdev} addr ${mac} arp on
-       add_to_bridge ${bridge} ${vif0}
        ip link set ${bridge} up
-       ip link set ${vif0} up
-       ip link set ${pdev} up
+       add_to_bridge ${bridge} ${vif0}
        add_to_bridge2 ${bridge} ${pdev}
+
         ip link set ${netdev} up
        ifup ${hwddev}
     else
@@ -286,6 +262,7 @@
     local maxtries=10
 
     echo -n "Waiting for ${dev} to negotiate link."
+    ip link set ${dev} up
     for i in `seq ${maxtries}` ; do
        if ifconfig ${dev} | grep -q RUNNING ; then
            break
--- /etc/xen/scripts/xen-network-common.sh.ipv6 2006-05-12 08:58:19.000000000 
+0200
+++ /etc/xen/scripts/xen-network-common.sh      2006-05-12 10:41:47.000000000 
+0200
@@ -67,3 +67,57 @@
 {
   first_file -x /etc/init.d/{dhcp3-server,dhcp,dhcpd}
 }
+
+# configure interfaces which act as pure bridge ports:
+#  - make quiet: no arp, no ipv6 autoconf
+#  - set mac address to fe:ff:ff:ff:ff:ff
+setup_bridge_port() {
+    local dev="$1"
+
+    # take interface down ...
+    ip link set ${dev} up      # creates ipv6 conf dir
+    ip link set ${dev} down
+
+    # ... and configure
+    if test -f /proc/sys/net/ipv6/conf/${dev}/autoconf; then
+       echo 0 > /proc/sys/net/ipv6/conf/${dev}/autoconf
+       echo 0 > /proc/sys/net/ipv6/conf/${dev}/router_solicitations
+    fi
+    ip link set ${dev} arp off
+    ip link set ${dev} addr fe:ff:ff:ff:ff:ff
+    ip addr flush ${dev}
+}
+
+# Usage: create_bridge bridge
+create_bridge () {
+    local bridge=$1
+
+    # Don't create the bridge if it already exists.
+    if [ ! -e "/sys/class/net/${bridge}/bridge" ]; then
+       brctl addbr ${bridge}
+       brctl stp ${bridge} off
+       brctl setfd ${bridge} 0
+        ip link set ${bridge} arp off
+       ip link set ${bridge} up        # creates ipv6 conf dir
+       if test -f /proc/sys/net/ipv6/conf/${bridge}/autoconf; then
+           echo 0 > /proc/sys/net/ipv6/conf/${bridge}/autoconf
+           echo 0 > /proc/sys/net/ipv6/conf/${bridge}/router_solicitations
+       fi
+    else
+       ip link set ${bridge} up
+    fi
+}
+
+# Usage: add_to_bridge bridge dev
+add_to_bridge () {
+    local bridge=$1
+    local dev=$2
+
+    # Don't add $dev to $bridge if it's already on a bridge.
+    if [ -e "/sys/class/net/${bridge}/brif/${dev}" ]; then
+       return
+    fi
+    brctl addif ${bridge} ${dev}
+    ip link set ${dev} up
+}
+
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.