From: Harald Hoyer Date: Mon, 8 Apr 2013 09:47:49 +0000 (+0800) Subject: network: support multiple bonding interfaces X-Git-Tag: 028~84 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d136ca4eeb3d7be2beef210dcf51a18210900844;p=thirdparty%2Fdracut.git 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 Signed-off-by: Baoquan He --- diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh index 815ab64f4..593f3879d 100755 --- a/modules.d/40network/ifup.sh +++ b/modules.d/40network/ifup.sh @@ -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 diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh index f4652b904..05fa5f3bf 100755 --- a/modules.d/40network/net-genrules.sh +++ b/modules.d/40network/net-genrules.sh @@ -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 diff --git a/modules.d/40network/parse-bond.sh b/modules.d/40network/parse-bond.sh index 983eb3aeb..25c51b89c 100755 --- a/modules.d/40network/parse-bond.sh +++ b/modules.d/40network/parse-bond.sh @@ -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 diff --git a/modules.d/40network/parse-bridge.sh b/modules.d/40network/parse-bridge.sh index 1f027bb0d..8c305c0f7 100755 --- a/modules.d/40network/parse-bridge.sh +++ b/modules.d/40network/parse-bridge.sh @@ -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 diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh index f7a476cd3..16da5e485 100755 --- a/modules.d/45ifcfg/write-ifcfg.sh +++ b/modules.d/45ifcfg/write-ifcfg.sh @@ -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