diff options
author | Roy Marples <roy@marples.name> | 2008-03-26 14:18:01 +0000 |
---|---|---|
committer | Roy Marples <roy@marples.name> | 2008-03-26 14:18:01 +0000 |
commit | ccf238f852fd0463e68d33b91f0dd55000c325e3 (patch) | |
tree | e104640ae7b25be54520c22712b34385b1c030c4 /net/ccwgroup.sh | |
parent | 55858eca2ec678fce14b21df33d08f5aaac94bcf (diff) | |
download | openrc-ccf238f852fd0463e68d33b91f0dd55000c325e3.tar.gz openrc-ccf238f852fd0463e68d33b91f0dd55000c325e3.tar.bz2 openrc-ccf238f852fd0463e68d33b91f0dd55000c325e3.tar.xz |
Merge net.OS into net
Diffstat (limited to 'net/ccwgroup.sh')
-rw-r--r-- | net/ccwgroup.sh | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/net/ccwgroup.sh b/net/ccwgroup.sh new file mode 100644 index 0000000..d40e713 --- /dev/null +++ b/net/ccwgroup.sh @@ -0,0 +1,67 @@ +# Copyright 2007-2008 Roy Marples <roy@marples.name> +# All rights reserved. Released under the 2-clause BSD license. + +_config_vars="$_config_vars ccwgroup" + +ccwgroup_depend() +{ + before interface +} + +ccwgroup_pre_start() +{ + local ccwgroup="$(_get_array "ccwgroup_${IFVAR}")" + [ -z "${ccwgroup}" ] && return 0 + + if [ ! -d /sys/bus/ccwgroup ]; then + modprobe qeth + 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 + else + echo "${ccw}" >/sys/bus/ccwgroup/drivers/qeth/group + fi + eval layer2=\$qeth_layer2_${IFVAR} + echo "${layer2:-0}" > /sys/devices/qeth/"${first}"/layer2 + echo "1" >/sys/devices/qeth/"${first}"/online + eend $? +} + +ccwgroup_pre_stop() +{ + # Erase any existing ccwgroup to be safe + service_set_value ccwgroup_device "" + + [ ! -L /sys/class/net/"${FACE}"/driver ] && return 0 + local driver="$(readlink /sys/class/net/"${IFACE}"/driver)" + case "${diver}" in + */bus/ccwgroup/*);; + *) return 0;; + esac + + local device="$(readlink /sys/class/net/"${IFACE}"/device)" + device=${device##*/} + service_set_value ccwgroup_device "${device}" +} + +ccwgroup_post_stop() +{ + local device="$(service_get_value ccwgroup_device)" + [ -z "${device}" ] && return 0 + + einfo "Disabling ccwgroup on ${iface}" + echo "0" >/sys/devices/qeth/"${device}"/online + echo "1" >/sys/devices/qeth/"${device}"/ungroup + eend $? +} |