tools: Fix network-bridge to work with Gentoo
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
@@ -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}
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]
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
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.
Signed-off-by Jon Mason <[email protected]># HG changeset patch
# User root@pentium4
# Node ID07ba15ba986268ff869d7d2253eab8eed3edbe8b# Parentf529cd119470032c2bc70b21432e733f9605727bFix network-bridge to work with Gentoodiff -r
f529cd119470-r07ba15ba9862tools/examples/network-bridgetools/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 .-- - ..-. ..--..
PATCH 1/1 tools: Fix network-bridge to work with Gentoo (version 2)
In reply to Jon MasonThis 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
@@ -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}
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).
Signed-off-by Jon Mason <[email protected]># HG changeset patch
# User root@pentium4
# Node ID6de75791e5a54b8eb093c6630efb68f896c16fa3# Parent00037ba13f0bb8efe4b2c3efe40200eac21c68ddFix network-bridge to work with Gentoo
diff -r
00037ba13f0b-r6de75791e5a5tools/examples/network-bridgetools/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_addrssrc 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
Re: [PATCH] tools: Fix network-bridge to work with Gentoo (version 2)
In reply to Jon MasonQuoted 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