diff options
Diffstat (limited to 'net-scripts/net/ccwgroup.sh')
-rw-r--r-- | net-scripts/net/ccwgroup.sh | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/net-scripts/net/ccwgroup.sh b/net-scripts/net/ccwgroup.sh new file mode 100644 index 0000000..3eca965 --- /dev/null +++ b/net-scripts/net/ccwgroup.sh @@ -0,0 +1,55 @@ +# Copyright (c) 2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# Contributed by Roy Marples (uberlord@gentoo.org) + +ccwgroup_depend() { + before interface +} +ccwgroup_expose() { + variables ccwgroup +} + +ccwgroup_pre_start() { + local iface="$1" ifvar="$(bash_variable "$1")" + local ccw="ccwgroup_${ifvar}[@]" + local -a ccwgroup=( "${!ccw}" ) + + [[ -z ${!ccw} ]] && return 0 + if [[ ! -d /sys/bus/ccwgroup ]] ; then + eerror "ccwgroup support missing in kernel" + return 1 + fi + + einfo "Enabling ccwgroup on ${iface}" + echo "${!ccw// /,}" > /sys/bus/ccwgroup/drivers/qeth/group + echo "1" > /sys/devices/qeth/"${ccwgroup[0]}"/online + eend $? +} + +ccwgroup_pre_stop() { + local iface="$1" + + # Erase any existing ccwgroup to be safe + save_options ccwgroup_device "" + + [[ ! -L /sys/class/net/"${iface}"/driver ]] && return 0 + local driver="$(readlink /sys/class/net/"${iface}"/driver)" + [[ ${driver} != *"/bus/ccwgroup/"* ]] && return 0 + + local device="$(readlink /sys/class/net/"${iface}"/device)" + device="${device##*/}" + save_options ccwgroup_device "${device}" +} + +ccwgroup_post_stop() { + local iface="$1" device="$(get_options 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 $? +} + +# vim: set ts=4 : |