From: Harald Hoyer <harald@xxxxxxxxxx> 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@xxxxxxxxxx> Signed-off-by: Baoquan He <bhe@xxxxxxxxxx> --- modules.d/40network/ifup.sh | 15 ++++++++++----- modules.d/40network/net-genrules.sh | 9 ++++++--- modules.d/40network/parse-bond.sh | 6 +++--- modules.d/40network/parse-bridge.sh | 6 ------ modules.d/45ifcfg/write-ifcfg.sh | 9 +++++---- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh index 582278f..dccd174 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 @@ -134,11 +138,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 f4652b9..05fa5f3 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 983eb3a..25c51b8 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 1f027bb..8c305c0 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 f7a476c..16da5e4 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 -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe initramfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html