Skip to contentSkip to conversation

tools: Fix network-bridge to work with Gentoo

PATCH In review Jon Mason 6 participants 7 messages Sep 29, 2005 – Oct 5, 2005

lore
Share & tools
lore

Jon Mason

author
#0 lore raw

PATCH 1/1 tools: Fix network-bridge to work with Gentoo

This patch fixes domU networking in Gentoo. The change to ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge from being setup correctly. The patch below checks if ifup is avaiable, and if not starts the Gentoo networking scripts.

# HG changeset patch
# User root@pentium4
# Node ID 07ba15ba986268ff869d7d2253eab8eed3edbe8b # Parent f529cd119470032c2bc70b21432e733f9605727b Fix network-bridge to work with Gentoo

tools/examples/network-bridge +13 -3
diff -r f529cd119470 -r 07ba15ba9862 tools/examples/network-bridge
@@ -177,7 +177,12 @@
 
     if ifconfig veth0 2>/dev/null | grep -q veth0 ; then
 	mac=`ifconfig ${netdev} | grep HWadd | sed -e 's/.*\(..:..:..:..:..:..\).*/\1/'`
-	if ! ifdown ${netdev} ; then
+	if which ifdown 2> /dev/null ; then
+		ifdown ${netdev} 2> RC=$?
+	else
+        	/etc/init.d/net.${netdev} stop 2> RC=$? 
+	fi
+	if ! $RC ; then
 		# if ifup didn't work, see if we have an ip= on cmd line
 		if egrep 'ip=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:' /proc/cmdline ; 
 		then
@@ -197,7 +202,12 @@
 	ip link set ${bridge} up
 	ip link set vif0.0 up
 	ip link set p${netdev} up
-	if ! ifup ${netdev} ; then
+	if which ifup 2> /dev/null ; then
+		ifup ${netdev} 2> RC=$?
+	else
+        	/etc/init.d/net.${netdev} start 2> RC=$? 
+	fi
+	if ! $RC  ; then
 		if [ ${kip} ] ; then
 			# use the addresses we grocked from /proc/cmdline	
 			ifconfig ${netdev} ${kip} 
@@ -238,7 +248,7 @@
         ip link set peth0 name eth0
         ifconfig ${bridge} down
         brctl delbr ${bridge}
-        ifup eth0
+        ifup eth0 2>/dev/null || /etc/init.d/net.eth0 start
 
     else
         transfer_routes ${bridge} ${netdev}
#1 lore raw

JM> This patch fixes domU networking in Gentoo. The change to JM> ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge JM> from being setup correctly. The patch below checks if ifup is JM> avaiable, and if not starts the Gentoo networking scripts.

This brings up the idea about how we can be as distro-friendly as possible when it comes to network configuration.

How about if we replace the distro-specific bits of the network-bridge script with calls out to a dedicated one, after we determine which distro we're on? That way, we can cleanly add support for a new distro, without adding a bunch of if-then-elsif's to the main script.

Also, it would allow the distros to easily maintain and plug in their own scripts to integrate with their network configuration utilities. That way, they wouldn't have to maintain a patch to the monolithic xen script. They could just drop their module into, say, /etc/xen/scripts/distros/redhat.sh, or something similar.

I think that if we were to make a standard function interface (like LSB) that the scripts implement, then we could just source them and use their functions to carry out the wishes of the more complex logic in the master network-bridge script.

Thoughts?

Signature · 4 lines
Dan Smith
IBM Linux Technology Center
Open Hypervisor Team
email: [email protected]
#2 lore raw
Quoted 19 lines · Dan Smith

JM> This patch fixes domU networking in Gentoo. The change to JM> ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge JM> from being setup correctly. The patch below checks if ifup is JM> avaiable, and if not starts the Gentoo networking scripts.

This brings up the idea about how we can be as distro-friendly as possible when it comes to network configuration.

How about if we replace the distro-specific bits of the network-bridge script with calls out to a dedicated one, after we determine which distro we're on? That way, we can cleanly add support for a new distro, without adding a bunch of if-then-elsif's to the main script.

Also, it would allow the distros to easily maintain and plug in their own scripts to integrate with their network configuration utilities. That way, they wouldn't have to maintain a patch to the monolithic xen script. They could just drop their module into, say, /etc/xen/scripts/distros/redhat.sh, or something similar.

Quoted 6 lines

I think that if we were to make a standard function interface (like LSB) that the scripts implement, then we could just source them and use their functions to carry out the wishes of the more complex logic in the master network-bridge script.

Thoughts?

Here's one vote for doing that - need a clean point to insert customized pieces.

thanks,
Nivedita

#3 lore raw
In reply to Jon Mason
Quoted 21 lines · Jon Mason

This patch fixes domU networking in Gentoo. The change to ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge from being setup correctly. The patch below checks if ifup is avaiable, and if not starts the Gentoo networking scripts.

# HG changeset patch
# User root@pentium4
# Node ID 07ba15ba986268ff869d7d2253eab8eed3edbe8b # Parent f529cd119470032c2bc70b21432e733f9605727b Fix network-bridge to work with Gentoo

diff -r f529cd119470 -r 07ba15ba9862 tools/examples/network-bridge

tools/examples/network-bridge +0 -0
@@ -177,7 +177,12 @@
 
     if ifconfig veth0 2>/dev/null | grep -q veth0 ; then
 	mac=`ifconfig ${netdev} | grep HWadd | sed -e

's/.*\(..:..:..:..:..:..\).*/\1/'` - if ! ifdown ${netdev} ; then

tools/examples/network-bridge line 181

Quoted 3 lines
tools/examples/network-bridge +2 -0
+	if which ifdown 2> /dev/null ; then
 
+		ifdown ${netdev} 2> RC=$?

I don't think you want the "2>" in there. You're missing a semicolon in front of "RC=..."

tools/examples/network-bridge line 183

Quoted 2 lines
tools/examples/network-bridge +2 -0
+	else
+        	/etc/init.d/net.${netdev} stop 2> RC=$?

Same problem here.

tools/examples/network-bridge line 206

Quoted 12 lines
tools/examples/network-bridge +4 -1
+	fi
+	if ! $RC ; then
 		# if ifup didn't work, see if we have an ip= on cmd line
 		if egrep 'ip=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:' /proc/cmdline ;
 		then
@@ -197,7 +202,12 @@
 	ip link set ${bridge} up
 	ip link set vif0.0 up
 	ip link set p${netdev} up
-	if ! ifup ${netdev} ; then
+	if which ifup 2> /dev/null ; then
+		ifup ${netdev} 2> RC=$?

Same problem here.

tools/examples/network-bridge line 208

Quoted 2 lines
tools/examples/network-bridge +2 -0
+	else
+        	/etc/init.d/net.${netdev} start 2> RC=$?

Same problem here.

tools/examples/network-bridge line 251

Quoted 11 lines
tools/examples/network-bridge +3 -1
+	fi
+	if ! $RC  ; then
 		if [ ${kip} ] ; then
 			# use the addresses we grocked from /proc/cmdline
 			ifconfig ${netdev} ${kip}
@@ -238,7 +248,7 @@
         ip link set peth0 name eth0
         ifconfig ${bridge} down
         brctl delbr ${bridge}
-        ifup eth0
+        ifup eth0 2>/dev/null || /etc/init.d/net.eth0 start

I think you want to check whether 'ifup' exists, not whether the command fails.

Regards,
Robb

Signature · 4 lines
Robb Romans                     (512) 838-0419
Linux Commando                  T/L   678-0419
ARS NA5TT
.-- - ..-. ..--..
author
#4 lore raw

PATCH 1/1 tools: Fix network-bridge to work with Gentoo (version 2)

In reply to Jon Mason

This patch fixes domU networking in Gentoo. The change to ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge from being setup correctly. The patch below checks if ifup is avaiable, and if not starts the Gentoo networking scripts.

This new version includes shell functions where distro specific options may be handled (per Ian's suggestion).

# HG changeset patch
# User root@pentium4
# Node ID 6de75791e5a54b8eb093c6630efb68f896c16fa3 # Parent 00037ba13f0bb8efe4b2c3efe40200eac21c68dd

Fix network-bridge to work with Gentoo

tools/examples/network-bridge +29 -3
diff -r 00037ba13f0b -r 6de75791e5a5 tools/examples/network-bridge
@@ -54,6 +54,32 @@
 antispoof=${antispoof:-no}
 
 echo "*network $OP bridge=$bridge netdev=$netdev antispoof=$antispoof" >&2
+
+# Usage: eth_down interface
+eth_down() {
+	local rc
+	local eth=$1
+	ifdown=$(which ifdown 2>/dev/null)
+	if [ -n "$ifdown" ]; then
+		$ifdown ${eth}; rc=$?
+	else
+		/etc/init.d/net.${eth} stop; rc=$?
+	fi
+	return $rc
+}
+
+# Usage: eth_up interface
+eth_up() {
+	local rc
+	local eth=$1
+	ifdown=$(which ifup 2>/dev/null)
+	if [ -n "$ifup" ]; then
+		$ifup ${eth}; rc=$?
+	else
+		/etc/init.d/net.${eth} start; rc=$?
+	fi
+	return $rc
+}
 
 # Usage: transfer_addrs src dst
 # Copy all IP addresses (including aliases) from device $src to device $dst.
@@ -177,7 +203,7 @@
 
     if ifconfig veth0 2>/dev/null | grep -q veth0 ; then
 	mac=`ifconfig ${netdev} | grep HWadd | sed -e 's/.*\(..:..:..:..:..:..\).*/\1/'`
-	if ! ifdown ${netdev} ; then
+	if ! eth_down ${netdev} ; then
 		# if ifup didn't work, see if we have an ip= on cmd line
 		if egrep 'ip=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:' /proc/cmdline ; 
 		then
@@ -197,7 +223,7 @@
 	ip link set ${bridge} up
 	ip link set vif0.0 up
 	ip link set p${netdev} up
-	if ! ifup ${netdev} ; then
+	if ! eth_up ${netdev} ; then
 		if [ ${kip} ] ; then
 			# use the addresses we grocked from /proc/cmdline	
 			ifconfig ${netdev} ${kip} 
@@ -238,7 +264,7 @@
         ip link set peth0 name eth0
         ifconfig ${bridge} down
         brctl delbr ${bridge}
-        ifup eth0
+        eth_up eth0
 
     else
         transfer_routes ${bridge} ${netdev}
#5 lore raw

Re: [PATCH] tools: Fix network-bridge to work with Gentoo (version 2)

A slightly less invasive way to do it is to have a Gentoo compatibility script that looks something like this:

# Gentoo doesn't have ifup/ifdown so if we're on Gentoo define some which ifup >& /dev/null
if [ "$?" != 0 -a -e /etc/conf.d/net ]; then

   ifup() {
       /etc/init.d/net.$1 start
   }
   ifdown() {
       /etc/init.d/net.$1 stop

}
fi

This could then be sourced from the network script (or just inlined).

Quoted 88 lines · Jon Mason

This patch fixes domU networking in Gentoo. The change to ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge from being setup correctly. The patch below checks if ifup is avaiable, and if not starts the Gentoo networking scripts.

This new version includes shell functions where distro specific options may be handled (per Ian's suggestion).

# HG changeset patch
# User root@pentium4
# Node ID 6de75791e5a54b8eb093c6630efb68f896c16fa3 # Parent 00037ba13f0bb8efe4b2c3efe40200eac21c68dd

Fix network-bridge to work with Gentoo

diff -r 00037ba13f0b -r 6de75791e5a5 tools/examples/network-bridge

tools/examples/network-bridge +0 -0
@@ -54,6 +54,32 @@
 antispoof=${antispoof:-no}
 

echo "*network $OP bridge=$bridge netdev=$netdev antispoof=$antispoof" >&2

tools/examples/network-bridge +26 -0
+
+# Usage: eth_down interface
+eth_down() {
+	local rc
+	local eth=$1
+	ifdown=$(which ifdown 2>/dev/null)
+	if [ -n "$ifdown" ]; then
+		$ifdown ${eth}; rc=$?
+	else
+		/etc/init.d/net.${eth} stop; rc=$?
+	fi
+	return $rc
+}
+
+# Usage: eth_up interface
+eth_up() {
+	local rc
+	local eth=$1
+	ifdown=$(which ifup 2>/dev/null)
+	if [ -n "$ifup" ]; then
+		$ifup ${eth}; rc=$?
+	else
+		/etc/init.d/net.${eth} start; rc=$?
+	fi
+	return $rc
+}

# Usage: transfer_addrs src dst
# Copy all IP addresses (including aliases) from device $src to device $dst.

tools/examples/network-bridge +3 -3
@@ -177,7 +203,7 @@
 
    if ifconfig veth0 2>/dev/null | grep -q veth0 ; then
 	mac=`ifconfig ${netdev} | grep HWadd | sed -e 's/.*\(..:..:..:..:..:..\).*/\1/'`
-	if ! ifdown ${netdev} ; then
+	if ! eth_down ${netdev} ; then
 		# if ifup didn't work, see if we have an ip= on cmd line
 		if egrep 'ip=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:' /proc/cmdline ; 
 		then
@@ -197,7 +223,7 @@
 	ip link set ${bridge} up
 	ip link set vif0.0 up
 	ip link set p${netdev} up
-	if ! ifup ${netdev} ; then
+	if ! eth_up ${netdev} ; then
 		if [ ${kip} ] ; then
 			# use the addresses we grocked from /proc/cmdline	
 			ifconfig ${netdev} ${kip} 
@@ -238,7 +264,7 @@
        ip link set peth0 name eth0
        ifconfig ${bridge} down
        brctl delbr ${bridge}
-        ifup eth0
+        eth_up eth0
 
    else
        transfer_routes ${bridge} ${netdev}

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

#6 lore raw

Re: [PATCH] tools: Fix network-bridge to work with Gentoo (version 2)

In reply to Jon Mason
Quoted 7 lines · Jon Mason

This patch fixes domU networking in Gentoo. The change to ifup/ifdown (which isn't availabe in Gentoo) prevents the bridge from being setup correctly. The patch below checks if ifup is avaiable, and if not starts the Gentoo networking scripts.

This new version includes shell functions where distro specific options may be handled (per Ian's suggestion).

Doing this all in the same script feels like it's going to spiral out of control into spaghetti-land kind of quickly and also not allow for some of the real variation that's going to be desired for different distributions.

Why try to do a one-size-fits-all instead of having scripts which really can be made to best fit the distro? With a more traditional build process, it would be easy enough to have distro specific scripts dropped into subdirs of the examples directory and use them as overrides/replacements. The thing that makes that tricky for Xen is the way make dist works.

Thinking aloud -- maybe just setting a variable so we know we're in the 'make dist' case and using that to install all the distro specific stuff into DESTDIR and then letting install.sh also pick out the right distro would work. Then for the more normal install case, just the proper things for the distro would get installed. Does this seem reasonable? I'll try to cook up something today

Jeremy