WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [PATCH]Change default network schema in network-bridge

To: "Daniel P. Berrange" <berrange@xxxxxxxxxx>, keir.fraser@xxxxxxxxxx
Subject: [Xen-devel] Re: [PATCH]Change default network schema in network-bridge
From: Zhigang Wang <zhigang.x.wang@xxxxxxxxxx>
Date: Tue, 23 Jun 2009 17:53:46 +0800
Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Tue, 23 Jun 2009 02:54:28 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <20090623090158.GA6881@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4A40630C.4010708@xxxxxxxxxx> <20090623090158.GA6881@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.22 (X11/20090605)
Daniel P. Berrange wrote:
> On Tue, Jun 23, 2009 at 01:07:24PM +0800, Zhigang Wang wrote:
>> hi,
>>
>> the default network-bridge renames network interfaces and often confuse 
>> people.
>>
>> this patch changes the network-bridge schema to:
>>
>> # start:
>> # Creates the bridge
>> # Copies the IP and MAC addresses from netdev to bridge
>> # Enslaves netdev to bridge
>> #
>> # stop:
>> # Removes netdev from the bridge
>> # Transfers addresses, routes from bridge to netdev
>> # Deletes bridge
>>
>> No rename will be performed.  Eg.
>>
>> # brctl show
>> bridge name     bridge id               STP enabled     interfaces
>> xenbr0          8000.000e0cd85dfe       no              eth0
>>
>> IP/route will be transfered to xenbr0 at start.
>>
>> I also add a extra script network-bridges to perform on all ethernet cards.
>> and network-dummy if user doesn't want to xend to manage dom0 networking.
>>
>> This patch obsolete my last patch, titled: [PATCH]Fix network-bridge ifup 
>> problem.
>>
>> CC to Daniel for comments.
> 
> 
> 
> I agree with your thought that it makes more sense to just leave the 
> original device name alone, and not rename anything. The reason it
> currently does renaming is that this was closer to the previous version
> of network-bridge using netloop, and so made upgrades slightly easier
> for existing Xen users. 
> 
> I don't really have a strong opinion on whether network-bridge should  now 
> be changed again to not do renaming of eth0. These days my recommendation
> is for people to set '(network-script /bin/true)' and then just use their 
> OS distributions network scripts to add a bridge device.  The end result 
> is the same, but this has the advantage that the  network is setup correctly
> right from start, rather than having to modify it on the fly when apps may 
> already have started using the network. We've got docs for Fedora/RHEL/
> Debian/Ubuntu here
> 
> http://wiki.libvirt.org/page/Networking#Bridged_networking_.28aka_.22shared_physical_device.22.29
> 
> Regards,
> Daniel

Thanks Dan,

It seems at least the network-dummy script is not needed. 

Keir, if you have interest to change the default network scripts, this is the 
new patch.

If not, I'll just upload the scripts to 
http://wiki.xensource.com/xenwiki/XenNetworking

thanks,

zhigang
diff -Nurp xen-unstable.orig/tools/hotplug/Linux/Makefile 
xen-unstable/tools/hotplug/Linux/Makefile
--- xen-unstable.orig/tools/hotplug/Linux/Makefile      2009-06-23 
11:34:24.000000000 +0800
+++ xen-unstable/tools/hotplug/Linux/Makefile   2009-06-23 17:46:39.000000000 
+0800
@@ -7,7 +7,7 @@ XENDOMAINS_INITD = init.d/xendomains
 XENDOMAINS_SYSCONFIG = init.d/sysconfig.xendomains
 
 # Xen script dir and scripts to go there.
-XEN_SCRIPTS = network-bridge vif-bridge
+XEN_SCRIPTS = network-bridge network-bridges vif-bridge
 XEN_SCRIPTS += network-route vif-route
 XEN_SCRIPTS += network-nat vif-nat
 XEN_SCRIPTS += block
diff -Nurp xen-unstable.orig/tools/hotplug/Linux/network-bridge 
xen-unstable/tools/hotplug/Linux/network-bridge
--- xen-unstable.orig/tools/hotplug/Linux/network-bridge        2009-06-23 
11:34:25.000000000 +0800
+++ xen-unstable/tools/hotplug/Linux/network-bridge     2009-06-23 
11:48:26.000000000 +0800
@@ -5,7 +5,7 @@
 # The script name to use is defined in /etc/xen/xend-config.sxp
 # in the network-script field.
 #
-# This script creates a bridge (default ${netdev}), adds a device
+# This script creates a bridge (default xenbr0), adds a device
 # (defaults to the device on the default gateway route) to it, copies
 # the IP addresses from the device to the bridge and adjusts the routes
 # accordingly.
@@ -21,27 +21,19 @@
 #
 # Vars:
 #
-# bridge     The bridge to use (default ${netdev}).
-# netdev     The interface to add to the bridge (default gateway device).
+# bridge     The bridge to use (default xenbr0).
+# netdev     The interface to add to the bridge (default gateway device or 
eth0).
 # antispoof  Whether to use iptables to prevent spoofing (default no).
 #
-# Internal Vars:
-# pdev="p${netdev}"
-# tdev=tmpbridge
-#
 # start:
-# Creates the bridge as tdev
-# Copies the IP and MAC addresses from pdev to bridge
-# Renames netdev to be pdev 
-# Renames tdev to bridge
-# Enslaves pdev to bridge
+# Creates the bridge
+# Copies the IP and MAC addresses from netdev to bridge
+# Enslaves netdev to bridge
 #
 # stop:
-# Removes pdev from the bridge
-# Transfers addresses, routes from bridge to pdev
-# Renames bridge to tdev
-# Renames pdev to netdev 
-# Deletes tdev
+# Removes netdev from the bridge
+# Transfers addresses, routes from bridge to netdev
+# Deletes bridge
 #
 # status:
 # Print addresses, interfaces, routes
@@ -56,6 +48,9 @@ dir=$(dirname "$0")
 findCommand "$@"
 evalVariables "$@"
 
+bridge=${bridge:-xenbr0}
+antispoof=${antispoof:-no}
+
 is_network_root () {
     local rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}' 
/etc/mtab)
     local rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' 
/etc/mtab)
@@ -83,23 +78,6 @@ find_alt_device () {
     echo "$ifs"
 }
 
-netdev=${netdev:-$(ip route list 0.0.0.0/0  | \
-                   sed 's/.*dev \([a-z]\+[0-9]\+\).*$/\1/')}
-if is_network_root ; then
-    altdevs=$(find_alt_device $netdev)
-    for netdev in $altdevs; do break; done
-    if [ -z "$netdev" ]; then
-        [ -x /usr/bin/logger ] && /usr/bin/logger "network-bridge: bridging 
not supported on network root; not starting"
-        exit
-    fi
-fi
-netdev=${netdev:-eth0}
-bridge=${bridge:-${netdev}}
-antispoof=${antispoof:-no}
-
-pdev="p${netdev}"
-tdev=tmpbridge
-
 get_ip_info() {
     addr_pfx=`ip addr show dev $1 | egrep '^ *inet' | sed -e 's/ *inet //' -e 
's/ .*//'`
     gateway=`ip route show dev $1 | fgrep default | sed 's/default via //'`
@@ -111,9 +89,9 @@ do_ifup() {
             # use the info from get_ip_info()
             ip addr flush $1
             ip addr add ${addr_pfx} dev $1
-            ip link set dev $1 up
-            [ -n "$gateway" ] && ip route add default via ${gateway}
         fi
+        ip link set dev $1 up
+        [ -n "$gateway" ] && ip route add default via ${gateway}
     fi
 }
 
@@ -188,17 +166,15 @@ link_exists()
 antispoofing () {
     iptables -P FORWARD DROP
     iptables -F FORWARD
-    iptables -A FORWARD -m physdev --physdev-in ${pdev} -j ACCEPT
+    iptables -A FORWARD -m physdev --physdev-in ${netdev} -j ACCEPT
 }
 
-# Usage: show_status dev bridge
-# Print ifconfig and routes.
-show_status () {
-    local dev=$1
-    local bridge=$2
-    
+op_status () {
+    netdev=${netdev:-$(brctl show | awk /$bridge/'{print $4}')}
     echo '============================================================'
-    ip addr show ${dev}
+    if [ -n "${netdev}" ]; then
+        ip addr show ${netdev}
+    fi
     ip addr show ${bridge}
     echo ' '
     brctl show ${bridge}
@@ -210,19 +186,31 @@ show_status () {
 }
 
 op_start () {
+    netdev=${netdev:-$(ip route list 0.0.0.0/0  | \
+                       sed 's/.*dev \([a-z]\+[0-9]\+\).*$/\1/')}
+    if is_network_root ; then
+        altdevs=$(find_alt_device $netdev)
+        for netdev in $altdevs; do break; done
+        if [ -z "$netdev" ]; then
+            [ -x /usr/bin/logger ] && /usr/bin/logger "network-bridge: 
bridging not supported on network root; not starting"
+            exit
+        fi
+    fi
+    netdev=${netdev:-eth0}
+
     if [ "${bridge}" = "null" ] ; then
        return
     fi
 
-    if link_exists "$pdev"; then
+    if link_exists "$bridge"; then
         # The device is already up.
         return
     fi
 
-    create_bridge ${tdev}
+    create_bridge ${bridge}
 
     preiftransfer ${netdev}
-    transfer_addrs ${netdev} ${tdev}
+    transfer_addrs ${netdev} ${bridge}
     # Remember slaves for bonding interface.
     if [ -e /sys/class/net/${netdev}/bonding/slaves ]; then
        slaves=`cat /sys/class/net/${netdev}/bonding/slaves`
@@ -233,17 +221,15 @@ op_start () {
        ip link set ${netdev} down
        ip addr flush ${netdev}
     fi
-    ip link set ${netdev} name ${pdev}
-    ip link set ${tdev} name ${bridge}
 
-    setup_bridge_port ${pdev}
+    setup_bridge_port ${netdev}
 
     # Restore slaves
     if [ -n "${slaves}" ]; then
-       ip link set ${pdev} up
-       ifenslave ${pdev} ${slaves}
+       ip link set ${netdev} up
+       ifenslave ${netdev} ${slaves}
     fi
-    add_to_bridge2 ${bridge} ${pdev}
+    add_to_bridge2 ${bridge} ${netdev}
     do_ifup ${bridge}
 
     if [ ${antispoof} = 'yes' ] ; then
@@ -259,21 +245,24 @@ op_stop () {
        return
     fi
 
-    transfer_addrs ${bridge} ${pdev}
+    netdev=${netdev:-$(brctl show | awk /$bridge/'{print $4}')}
+    if [ -z "${netdev}" ]; then
+       return
+    fi
+
+    transfer_addrs ${bridge} ${netdev}
     if ! ifdown ${bridge}; then
        get_ip_info ${bridge}
     fi
-    ip link set ${pdev} down
+    ip link set ${netdev} down
     ip addr flush ${bridge}
 
-    brctl delif ${bridge} ${pdev}
+    brctl delif ${bridge} ${netdev}
     ip link set ${bridge} down
 
-    ip link set ${bridge} name ${tdev}
-    ip link set ${pdev} name ${netdev}
     do_ifup ${netdev}
 
-    brctl delbr ${tdev}
+    brctl delbr ${bridge}
 }
 
 # adds $dev to $bridge but waits for $dev to be in running state first
@@ -309,7 +298,7 @@ case "$command" in
        ;;
 
     status)
-       show_status ${netdev} ${bridge}
+       op_status
        ;;
 
     *)
diff -Nurp xen-unstable.orig/tools/hotplug/Linux/network-bridges 
xen-unstable/tools/hotplug/Linux/network-bridges
--- xen-unstable.orig/tools/hotplug/Linux/network-bridges       1970-01-01 
08:00:00.000000000 +0800
+++ xen-unstable/tools/hotplug/Linux/network-bridges    2009-06-23 
12:08:09.000000000 +0800
@@ -0,0 +1,19 @@
+#!/bin/bash
+#
+# Runs network-bridge against each ethernet card.
+#
+
+dir=$(dirname "$0")
+
+run_all_ethernets()
+{
+    for f in /sys/class/net/*; do
+        netdev=$(basename $f)
+        if [[ $netdev =~ "^eth[0-9]+$" ]]; then
+            devnum=${netdev:3}
+            $dir/network-bridge "$@" "netdev=${netdev}" "bridge=xenbr${devnum}"
+        fi
+    done
+}
+
+run_all_ethernets "$@"
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel