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.
Signed-off-by: Zhigang Wang <zhigang.x.wang@xxxxxxxxxx>
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 11:48:09.000000000
+0800
@@ -8,6 +8,7 @@ XENDOMAINS_SYSCONFIG = init.d/sysconfig.
# Xen script dir and scripts to go there.
XEN_SCRIPTS = network-bridge vif-bridge
+XEN_SCRIPTS += network-bridges network-dummy
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 "$@"
diff -Nurp xen-unstable.orig/tools/hotplug/Linux/network-dummy
xen-unstable/tools/hotplug/Linux/network-dummy
--- xen-unstable.orig/tools/hotplug/Linux/network-dummy 1970-01-01
08:00:00.000000000 +0800
+++ xen-unstable/tools/hotplug/Linux/network-dummy 2009-06-23
12:06:50.000000000 +0800
@@ -0,0 +1,7 @@
+#!/bin/bash
+#
+# Use this script as default network-script if you don't want xend to
+# change dom0 networking.
+#
+
+/bin/true
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|