# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID fbee8d9fbabae6a7a966a49f9fc4104e4fd9d97a
# Parent a4ce0ba0f8ffc0a73fb8733ec0301d0d3d55abbb
Made network-bridge script work on ALL systems missing ifup/down.
This is done by defining ifup/down both to 'false' when they're
missing; then instead of attempting to parse the IP params from
the kernel command line, we get them from 'ip' instead. So this
works even with (for example) ip=dhcp on the kernel command line.
Also made a few minor syntax changes (in particular, replaced "=="
with "=", and ">&foo" with ">foo 2>foo") so this works with more
limited shells.
Signed-off-by: Ben Thomas <bjthomas3@xxxxxxxxx>
diff -r a4ce0ba0f8ff -r fbee8d9fbaba tools/examples/network-bridge
--- a/tools/examples/network-bridge Tue Jan 10 14:24:12 2006
+++ b/tools/examples/network-bridge Tue Jan 10 14:33:00 2006
@@ -68,48 +68,19 @@
vdev="veth${vifnum}"
vif0="vif0.${vifnum}"
-legacy_mask_to_prefix() {
- mask=$1
- first=${mask%%.*}
- second=${mask#*.}
- third=${second#*.}
- fourth=${third#*.}
- second=${second%%.*}
- third=${third%%.*}
- declare -i INT FULLMASK BIT
- INT=$((((($first*256)+$second)*256+$third)*256+$fourth))
- FULLMASK=4294967295
- BIT=1
- for bit in `seq 32 -1 0`; do
- if test $FULLMASK -eq $INT; then PREFIX=$bit; return; fi
- FULLMASK=$(($FULLMASK-$BIT))
- BIT=$((BIT*2))
- done
- echo "ERROR converting netmask $mask to prefix"
- exit 1
-}
-
-parse_kernel_ip() {
- if egrep 'ip=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:' /proc/cmdline; then
- kip=`sed -e 's!.*ip=\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\):.*!\1!'
/proc/cmdline`
- kmask=`sed -e 's!.*ip=[^:]*:[^:]*:[^:]*:\([^:]*\):.*!\1!'
/proc/cmdline`
- kgate=`sed -e 's!.*ip=[^:]*:[^:]*:\([^:]*\):.*!\1!' /proc/cmdline`
- fi
-}
-
+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 //'`
+}
+
do_ifup() {
if ! ifup $1 ; then
- if [ ${kip} ] ; then
- # use the addresses we grocked from /proc/cmdline
- if [ -z "${kmask}" ]; then
- PREFIX=32
- else
- legacy_mask_to_prefix ${kmask}
- fi
+ if [ ${addr_pfx} ] ; then
+ # use the info from get_ip_info()
ip addr flush $1
- ip addr add ${kip}/${PREFIX} dev $1
+ ip addr add ${addr_pfx} dev $1
ip link set dev $1 up
- [ ${kgate} ] && ip route add default via ${kgate}
+ [ ${gateway} ] && ip route add default via ${gateway}
fi
fi
}
@@ -171,7 +142,7 @@
#
link_exists()
{
- if ip link show "$1" >&/dev/null
+ if ip link show "$1" >/dev/null 2>/dev/null
then
return 0
else
@@ -231,7 +202,7 @@
}
op_start () {
- if [ "${bridge}" == "null" ] ; then
+ if [ "${bridge}" = "null" ] ; then
return
fi
@@ -259,9 +230,8 @@
preiftransfer ${netdev}
transfer_addrs ${netdev} ${vdev}
if ! ifdown ${netdev}; then
- # If ifdown fails, take the IP details from the kernel command
- # line.
- parse_kernel_ip
+ # If ifdown fails, remember the IP details.
+ get_ip_info ${netdev}
ip link set ${netdev} down
ip addr flush ${netdev}
fi
@@ -283,13 +253,13 @@
transfer_routes ${netdev} ${bridge}
fi
- if [ ${antispoof} == 'yes' ] ; then
+ if [ ${antispoof} = 'yes' ] ; then
antispoofing
fi
}
op_stop () {
- if [ "${bridge}" == "null" ]; then
+ if [ "${bridge}" = "null" ]; then
return
fi
if ! link_exists "$bridge"; then
@@ -301,7 +271,7 @@
mac=`ip link show ${netdev} | grep 'link\/ether' | sed -e 's/.*ether
\(..:..:..:..:..:..\).*/\1/'`
transfer_addrs ${netdev} ${pdev}
if ! ifdown ${netdev}; then
- parse_kernel_ip
+ get_ip_info ${netdev}
fi
ip link set ${netdev} down arp off
ip link set ${netdev} addr fe:ff:ff:ff:ff:ff
diff -r a4ce0ba0f8ff -r fbee8d9fbaba tools/examples/xen-network-common.sh
--- a/tools/examples/xen-network-common.sh Tue Jan 10 14:24:12 2006
+++ b/tools/examples/xen-network-common.sh Tue Jan 10 14:33:00 2006
@@ -42,7 +42,7 @@
{
/sbin/ifup ${HWD_CONFIG_0} $1
}
-elif ! which ifup >&/dev/null
+elif ! which ifup >/dev/null 2>/dev/null
then
if [ -e /etc/conf.d/net ]
then
@@ -59,9 +59,18 @@
/etc/init.d/net.$1 stop
}
else
- logger -p "daemon.crit" -- \
- "You don't have ifup and don't seem to be running Gentoo either!"
- exit 1
+ preiftransfer()
+ {
+ true
+ }
+ ifup()
+ {
+ false
+ }
+ ifdown()
+ {
+ false
+ }
fi
else
preiftransfer()
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|