diff options
Diffstat (limited to 'recipes/wpa-supplicant/wpa-supplicant-0.6.7/action_wpa.sh')
-rwxr-xr-x | recipes/wpa-supplicant/wpa-supplicant-0.6.7/action_wpa.sh | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/recipes/wpa-supplicant/wpa-supplicant-0.6.7/action_wpa.sh b/recipes/wpa-supplicant/wpa-supplicant-0.6.7/action_wpa.sh new file mode 100755 index 0000000000..205ca65542 --- /dev/null +++ b/recipes/wpa-supplicant/wpa-supplicant-0.6.7/action_wpa.sh @@ -0,0 +1,76 @@ +#!/bin/sh + +# Action script to enable/disable wpa-roam interfaces in reaction to +# pm-action or ifplugd events. +# +# Copyright: Copyright (c) 2008, Kel Modderman <kel@otaku42.de> +# License: GPL-2 +# + +PATH=/sbin:/usr/sbin:/bin:/usr/bin + +if [ ! -x /sbin/wpa_action ]; then + exit 0 +fi + +SELF=action_wpa +COMMAND= +IFPLUGD_IFACE= + +# pm-action(8) - <action> <suspend method> +# +# On suspend|hibernate, disconnect any wpa-roam managed interfaces, +# reconnect it on resume. + +case "${1}" in + suspend|hibernate) + COMMAND=disconnect + ;; + resume|thaw) + COMMAND=reconnect + ;; +esac + +if [ -z "$COMMAND" ]; then + # ifplugd(8) - <iface> <action> + # + # If an ifplugd managed interface is brought up, disconnect any + # wpa-roam managed interfaces so that only one "roaming" interface + # remains active on the system. + + IFPLUGD_IFACE="${1}" + + case "${2}" in + up) + COMMAND=disconnect + ;; + down) + COMMAND=reconnect + ;; + *) + echo "${SELF}: unknown $0 arguments: ${@}" >&2 + exit 1 + ;; + esac +fi + +if [ -z "$COMMAND" ]; then + echo "${SELF}: unknown arguments: ${@}" >&2 + exit 1 +fi + +for CTRL in /var/run/wpa_supplicant/*; do + [ -S "${CTRL}" ] || continue + + IFACE="${CTRL#/var/run/wpa_supplicant/}" + + wpa_action "${IFACE}" check || continue + + if [ "${IFPLUGD_IFACE}" ] && [ "${IFPLUGD_IFACE}" = "${IFACE}" ]; then + # if ifplugd is managing this interface (not likely but..) + # do nothing + continue + fi + + wpa_cli -i "${IFACE}" "${COMMAND}" +done |