aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-05-16 01:21:20 -0400
committerMike Frysinger <vapier@gentoo.org>2011-05-16 01:22:32 -0400
commit2493a1f32e7ae95f0f3d3c63cb4af7abdc34959b (patch)
treecedc31aa84fb6398845e4ab86f6f716cab4fca84
parent40341fcd7e66b8a72e0407bb509d149305aa529a (diff)
net: ccwgroup: forward port changes from baselayout-1
Quite a bit of work happened in baselayout-1 on the ccwgroup module, but seems it didn't make it into openrc. So forward port all the existing code so we can work with more than just qeth and layer2 options. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--net/ccwgroup.sh83
1 files changed, 56 insertions, 27 deletions
diff --git a/net/ccwgroup.sh b/net/ccwgroup.sh
index 6fcba1dd..248b159d 100644
--- a/net/ccwgroup.sh
+++ b/net/ccwgroup.sh
@@ -8,60 +8,89 @@ ccwgroup_depend()
before interface
}
-ccwgroup_pre_start()
+ccwgroup_load_modules()
{
- local ccwgroup="$(_get_array "ccwgroup_${IFVAR}")"
- [ -z "${ccwgroup}" ] && return 0
-
- if [ ! -d /sys/bus/ccwgroup ]; then
- modprobe qeth
- if [ ! -d /sys/bus/ccwgroup ]; then
+ # make sure we have ccwgroup support or this is a crap shoot
+ if [ ! -d /sys/bus/ccwgroup ] ; then
+ modprobe -q ccwgroup
+ if [ ! -d /sys/bus/ccwgroup ] ; then
eerror "ccwgroup support missing in kernel"
return 1
fi
fi
- einfo "Enabling ccwgroup on ${IFACE}"
- local x= ccw= first= layer2=
- for x in ${ccwgroup}; do
- [ -z "${first}" ] && first=${x}
- ccw="${ccw}${ccw:+,}${x}"
- done
- if [ -e /sys/devices/qeth/"${first}" ]; then
- echo "0" >/sys/devices/qeth/"${first}"/online
+ # verify the specific interface is supported
+ if [ ! -d /sys/bus/ccwgroup/drivers/$1 ] ; then
+ modprobe $1 >& /dev/null
+ if [ ! -d /sys/bus/ccwgroup/drivers/$1 ] ; then
+ eerror "$1 support missing in kernel"
+ return 1
+ fi
+ fi
+
+ return 0
+}
+
+ccwgroup_pre_start()
+{
+ local ccwgroup="$(_get_array "ccwgroup_${IFVAR}")"
+ [ -z "${ccwgroup}" ] && return 0
+
+ local ccw_type
+ eval ccw_type=\${ccwgroup_type_${IFVAR}:-qeth}
+
+ ccwgroup_load_modules ${ccw_type} || return 1
+
+ einfo "Enabling ccwgroup/${ccw_type} on ${IFACE}"
+
+ set -- ${ccwgroup}
+ local first=$1; shift
+ if [ -e /sys/devices/${ccw_type}/${first}/online ]; then
+ echo "0" >/sys/devices/${ccw_type}/${first}/online
else
- echo "${ccw}" >/sys/bus/ccwgroup/drivers/qeth/group
+ echo "${first}$(printf ',%s' "$@")" >/sys/bus/ccwgroup/drivers/${ccw_type}/group
fi
- eval layer2=\$qeth_layer2_${IFVAR}
- echo "${layer2:-0}" > /sys/devices/qeth/"${first}"/layer2
- echo "1" >/sys/devices/qeth/"${first}"/online
+
+ local var val
+ for var in $(_get_array "ccwgroup_opts_${IFVAR}") online=1 ; do
+ val=${var#*=}
+ var=${var%%=*}
+ echo "${val}" > /sys/devices/${ccw_type}/${first}/${var}
+ done
eend $?
}
ccwgroup_pre_stop()
{
+ local path="/sys/class/net/${IFACE}"
+
# Erase any existing ccwgroup to be safe
service_set_value ccwgroup_device ""
+ service_set_value ccwgroup_type ""
- [ ! -L /sys/class/net/"${FACE}"/driver ] && return 0
- local driver="$(readlink /sys/class/net/"${IFACE}"/driver)"
- case "${diver}" in
- */bus/ccwgroup/*);;
+ [ ! -L "${path}"/device/driver ] && return 0
+ case "$(readlink "${path}"/device/driver)" in
+ */bus/ccwgroup/*) ;;
*) return 0;;
esac
- local device="$(readlink /sys/class/net/"${IFACE}"/device)"
+ local device
+ device="$(readlink "${path}"/device)"
device=${device##*/}
service_set_value ccwgroup_device "${device}"
+ device="$(readlink "${path}"/device/driver)"
+ device=${device##*/}
+ service_set_value ccwgroup_type "${device}"
}
ccwgroup_post_stop()
{
local device="$(service_get_value ccwgroup_device)"
[ -z "${device}" ] && return 0
+ local ccw_type="$(service_get_value ccwgroup_type)"
- einfo "Disabling ccwgroup on ${iface}"
- echo "0" >/sys/devices/qeth/"${device}"/online
- echo "1" >/sys/devices/qeth/"${device}"/ungroup
+ einfo "Disabling ccwgroup/${ccw_type} on ${IFACE}"
+ echo "0" >/sys/devices/${ccw_type}/"${device}"/online
+ echo "1" >/sys/devices/${ccw_type}/"${device}"/ungroup
eend $?
}