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

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



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

 


Rackspace

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