summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2012-10-11 03:54:32 +0000
committerRobin H. Johnson <robbat2@gentoo.org>2012-10-11 03:56:37 +0000
commita9f1ac2dfdc3ab7421ea33ae977f7e078750e542 (patch)
treeec7318b72c4c7261b4852577e529abb2dc66204d
parent27984c0d2d920db177ec43de10991c50e143915a (diff)
downloadopenrc-a9f1ac2dfdc3ab7421ea33ae977f7e078750e542.tar.gz
openrc-a9f1ac2dfdc3ab7421ea33ae977f7e078750e542.tar.bz2
openrc-a9f1ac2dfdc3ab7421ea33ae977f7e078750e542.tar.xz
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.sh17
1 files changed, 13 insertions, 4 deletions
diff --git a/net/bonding.sh b/net/bonding.sh
index 67b0d9b..7ea7508 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