diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2012-10-11 03:54:32 +0000 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2012-10-11 03:56:37 +0000 |
commit | a9f1ac2dfdc3ab7421ea33ae977f7e078750e542 (patch) | |
tree | ec7318b72c4c7261b4852577e529abb2dc66204d | |
parent | 27984c0d2d920db177ec43de10991c50e143915a (diff) |
net/bonding: Sanity-check sysfs usage
If sysfs is not available, you might still be able to create bond
interfaces, but only in very specific configurations, and you must have
the ifenslave binary instead to call ioctls.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
-rw-r--r-- | net/bonding.sh | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/net/bonding.sh b/net/bonding.sh index 67b0d9ba..7ea75085 100644 --- a/net/bonding.sh +++ b/net/bonding.sh @@ -5,6 +5,11 @@ bonding_depend() { before interface macchanger program /sbin/ifconfig /bin/ifconfig + # If you do not have sysfs, you MUST have this binary instead for ioctl + # Also you will loose some functionality that cannot be done via sysfs: + if [ ! -d /sys/class/net ]; then + program /sbin/ifenslave + fi } _config_vars="$_config_vars slaves" @@ -38,6 +43,10 @@ bonding_pre_start() fi fi + if [ ! -d /sys/class/net ]; then + ewarn "sysfs is not available! You will be unable to create new bonds, or change dynamic parameters!" + fi + # We can create the interface name we like now, but this # requires sysfs if ! _exists && [ -d /sys/class/net ]; then @@ -55,7 +64,7 @@ bonding_pre_start() # Configure the bond mode, then we can reloop to ensure we configure # All other options - for x in /sys/class/net/"${IFACE}"/bonding/mode; do + [ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/mode; do [ -f "${x}" ] || continue n=${x##*/} eval s=\$${n}_${IFVAR} @@ -66,7 +75,7 @@ bonding_pre_start() fi done # Nice and dynamic for remaining options:) - for x in /sys/class/net/"${IFACE}"/bonding/*; do + [ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/*; do [ -f "${x}" ] || continue n=${x##*/} eval s=\$${n}_${IFVAR} @@ -154,7 +163,7 @@ bonding_pre_start() fi done else - /sbin/ifenslave "${IFACE}" ${slaves} >/dev/null + ifenslave "${IFACE}" ${slaves} >/dev/null fi eend $? @@ -187,7 +196,7 @@ bonding_stop() echo -"${s}" > /sys/class/net/"${IFACE}"/bonding/slaves done else - /sbin/ifenslave -d "${IFACE}" ${slaves} + ifenslave -d "${IFACE}" ${slaves} fi # reset all slaves |