From: Zhigang Wang <zhigang.x.wang@oracle.com>
To: xen-devel <xen-devel@lists.xensource.com>, berrange@redhat.com
Subject: [PATCH]Change default network schema in network-bridge
Date: Tue, 23 Jun 2009 13:07:24 +0800 [thread overview]
Message-ID: <4A40630C.4010708@oracle.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 930 bytes --]
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@oracle.com>
thanks,
zhigang
[-- Attachment #2: xen-change-network-bridge-schema.patch --]
[-- Type: text/x-patch, Size: 8104 bytes --]
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
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next reply other threads:[~2009-06-23 5:07 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-23 5:07 Zhigang Wang [this message]
2009-06-23 9:01 ` [PATCH]Change default network schema in network-bridge Daniel P. Berrange
2009-06-23 9:53 ` Zhigang Wang
2009-06-24 14:38 ` Ian Jackson
2009-06-26 15:33 ` Daniel P. Berrange
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A40630C.4010708@oracle.com \
--to=zhigang.x.wang@oracle.com \
--cc=berrange@redhat.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.