diff --git a/doc/net.example.Linux.in b/doc/net.example.Linux.in index 28a2fb98..701e1b16 100644 --- a/doc/net.example.Linux.in +++ b/doc/net.example.Linux.in @@ -569,7 +569,8 @@ #----------------------------------------------------------------------------- # Bonding -# For link bonding/trunking emerge net-misc/ifenslave +# For link bonding/trunking on 2.4 kernels, or kernels without sysfs +# emerge net-misc/ifenslave # To bond interfaces together #slaves_bond0="eth0 eth1 eth2" diff --git a/net/bonding.sh b/net/bonding.sh index 69de32aa..99a85170 100644 --- a/net/bonding.sh +++ b/net/bonding.sh @@ -4,7 +4,6 @@ bonding_depend() { before interface macchanger - program /sbin/ifenslave } _config_vars="$_config_vars slaves" @@ -53,7 +52,7 @@ bonding_pre_start() # Must force the slaves to a particular state before adding them for IFACE in ${slaves}; do _delete_addresses - _up + _down done ) @@ -62,7 +61,13 @@ bonding_pre_start() # finally add in slaves eoutdent - /sbin/ifenslave "${IFACE}" ${slaves} >/dev/null + if [ -d /sys/class/net ]; then + for s in ${slaves}; do + echo "+${s}" >/sys/class/net/"${IFACE}"/bonding/slaves + done + else + /sbin/ifenslave "${IFACE}" ${slaves} >/dev/null + fi eend $? return 0 #important @@ -84,7 +89,13 @@ bonding_stop() eindent einfo "${slaves}" eoutdent - /sbin/ifenslave -d "${IFACE}" ${slaves} + if [ -d /sys/class/net ]; then + for s in ${slaves}; do + echo -"${s}" > /sys/class/net/"${IFACE}"/bonding/slaves + done + else + /sbin/ifenslave -d "${IFACE}" ${slaves} + fi # reset all slaves (