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

[Xen-devel] make network-bridge work in more environments


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: B Thomas <bjthomas3@xxxxxxxxx>
  • Date: Thu, 29 Dec 2005 10:58:04 -0500
  • Delivery-date: Thu, 29 Dec 2005 16:02:23 +0000
  • Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type; b=hEy5+TuMqanBbXsFQIh9lagf+/bFekeR3tP+apa2npNrRHNJDTezslchLQ8CJyLyFTFGUQVWO1my+AdnEgu0g95fjrHraL+MHX0SFIRjWAt/A8yvJIgdPonScW8voqggvNXVED0oLT2iq+a9C/fD1JpiQne07rpVxdcjMkxtGWE=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

# 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 -Nru examples.orig/network-bridge examples/network-bridge
--- examples.orig/network-bridge    2005-12-15 10:48: 47.000000000 -0500
+++ examples/network-bridge    2005-12-15 10:51:20.000000000 -0500
@@ -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 -Nru examples.orig/xen-network-common.sh examples/xen-network-common.sh
--- examples.orig/xen-network-common.sh    2005-12-15 10:48:47.000000000 -0500
+++ examples/xen-network-common.sh    2005-12-15 10:52:38.000000000 -0500
@@ -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-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®.