network: support multiple bonding interfaces

Currently dracut only support 1 bond, namyly bond0 by default. However multiple
bonds configuration may be needed. For example in kdump, in 1st kernel, more
than one bonds may be configured, and bondX other than bond0 is used as output
interface to remote host which will store dump core. This patch can solve this
problem, to write real bond information to initramfs, 2nd kdump kernel will
use it to create the relevant bondX interface.

Tested-by: Baoquan He <bhe@redhat.com>
Signed-off-by: Baoquan He <bhe@redhat.com>
master
Harald Hoyer 2013-04-08 17:47:49 +08:00
parent a55f910cf6
commit d136ca4eeb
5 changed files with 24 additions and 21 deletions

View File

@ -21,14 +21,18 @@ use_bridge='false'
use_vlan='false'

# enslave this interface to bond?
if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
for i in /tmp/bond.*.info; do
[ -e "$i" ] || continue
unset bondslaves
unset bondname
. "$i"
for slave in $bondslaves ; do
if [ "$netif" = "$slave" ] ; then
netif=$bondname
break 2
fi
done
fi
done

if [ -e /tmp/team.info ]; then
. /tmp/team.info
@ -138,11 +142,12 @@ if [ "$netif" = "lo" ] ; then
fi

# start bond if needed
if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
if [ -e /tmp/bond.${netif}.info ]; then
. /tmp/bond.${netif}.info

if [ "$netif" = "$bondname" ] && [ ! -e /tmp/net.$bondname.up ] ; then # We are master bond device
modprobe bonding
echo "+$netif" > /sys/class/net/bonding_masters
ip link set $netif down

# Stolen from ifup-eth

View File

@ -28,11 +28,14 @@ fi
fi

# bond: attempt only the defined interface (override bridge defines)
if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
for i in /tmp/bond.*.info; do
[ -e "$i" ] || continue
unset bondslaves
unset bondname
. "$i"
# It is enough to fire up only one
IFACES="$IFACES ${bondslaves%% *}"
fi
done

if [ -e /tmp/team.info ]; then
. /tmp/team.info

View File

@ -54,8 +54,8 @@ if getarg bond >/dev/null; then
fi
# Make it suitable for initscripts export
bondoptions=$(str_replace "$bondoptions" ";" ",")
echo "bondname=$bondname" > /tmp/bond.info
echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.info
echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.info
echo "bondname=$bondname" > /tmp/bond.${bondname}.info
echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.${bondname}.info
echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.${bondname}.info
return
fi

View File

@ -37,12 +37,6 @@ parsebridge() {
unset bridgename ethnames

iface=eth0
if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
if [ -n "$bondname" ] ; then
iface=$bondname
fi
fi

# Parse bridge for bridgename and ethnames
if bridge="$(getarg bridge)"; then

View File

@ -9,10 +9,6 @@ udevadm settle --timeout=30

read IFACES < /tmp/net.ifaces

if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
fi

if [ -e /tmp/bridge.info ]; then
. /tmp/bridge.info
fi
@ -89,6 +85,11 @@ for netif in $IFACES ; do
# bridge?
unset bridge
unset bond
unset bondslaves
unset bondname
unset bondoptions
[ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info

uuid=$(cat /proc/sys/kernel/random/uuid)
if [ "$netif" = "$bridgename" ]; then
bridge=yes