Maemo debianization.
[wpasupplicant] / debian / ifupdown / ifupdown.sh
diff --git a/debian/ifupdown/ifupdown.sh b/debian/ifupdown/ifupdown.sh
new file mode 100644 (file)
index 0000000..3e38fa0
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+
+#####################################################################
+## Purpose
+# This file is executed by ifupdown in pre-up, post-up, pre-down and
+# post-down phases of network interface configuration. It allows
+# ifup(8), and ifdown(8) to manage wpa_supplicant(8) and wpa_cli(8)
+# processes running in daemon mode.
+#
+# /etc/wpa_supplicant/functions.sh is sourced by this file.
+#
+# This file is provided by the wpasupplicant package.
+
+#####################################################################
+# Copyright (C) 2006 - 2008 Debian/Ubuntu wpasupplicant Maintainers 
+# <pkg-wpa-devel@lists.alioth.debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# On Debian GNU/Linux systems, the text of the GPL license can be
+# found in /usr/share/common-licenses/GPL.
+
+if [ -n "$IF_WPA_MAINT_DEBUG" ]; then
+       set -x
+fi
+
+# quit if we're called for the loopback
+if [ "$IFACE" = lo ]; then
+       exit 0
+fi
+
+# allow wpa_supplicant interface to be specified via wpa-iface
+# useful for starting wpa_supplicant on one interface of a bridge
+if [ -n "$IF_WPA_IFACE" ]; then
+       WPA_IFACE="$IF_WPA_IFACE"
+else
+       WPA_IFACE="$IFACE"
+fi
+
+# source functions
+if [ -f /etc/wpa_supplicant/functions.sh ]; then
+       . /etc/wpa_supplicant/functions.sh
+else
+       exit 0
+fi
+
+# quit if executables are not installed
+if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
+       exit 0
+fi
+
+do_start () {
+       if test_wpa_cli; then
+               # if wpa_action is active for this IFACE, do nothing
+               ifupdown_locked && exit 0
+
+               # if the administrator is calling ifup, say something useful
+               if [ "$PHASE" = "pre-up" ]; then
+                       wpa_msg stderr "wpa_action is managing ifup/ifdown state of $WPA_IFACE"
+                       wpa_msg stderr "execute \`ifdown --force $WPA_IFACE' to stop wpa_action"
+               fi
+               exit 1
+       elif ! set | grep -q "^IF_WPA"; then
+               # no wpa- option defined for IFACE, do nothing
+               exit 0
+       fi
+
+       # ensure stale ifupdown_lock marker is purged
+       ifupdown_unlock
+
+       # preliminary sanity checks for roaming daemon
+       if [ -n "$IF_WPA_ROAM" ]; then
+               if [ "$METHOD" != "manual" ]; then
+                       wpa_msg stderr "wpa-roam can only be used with the \"manual\" inet METHOD"
+                       exit 1
+               fi
+               if [ -n "$IF_WPA_MAPPING_SCRIPT" ]; then
+                       if ! type "$IF_WPA_MAPPING_SCRIPT" >/dev/null; then
+                               wpa_msg stderr "wpa-mapping-script \"$IF_WPA_MAPPING_SCRIPT\" is not valid"
+                               exit 1
+                       fi
+               fi
+               if [ -n "$IF_WPA_MAPPING_SCRIPT_PRIORITY" ] && [ -z "$IF_WPA_MAPPING_SCRIPT" ]; then
+                       wpa_msg stderr "\"wpa-mapping-script-priority 1\" is invalid without a wpa-mapping-script"
+                       exit 1
+               fi
+               IF_WPA_CONF="$IF_WPA_ROAM"
+               WPA_ACTION_SCRIPT="/sbin/wpa_action"
+       fi
+
+       # master function; determines if ifupdown.sh should do something or not
+       if [ -n "$IF_WPA_CONF" ] && [ "$IF_WPA_CONF" != "managed" ]; then
+               if [ ! -s "$IF_WPA_CONF" ]; then
+                       wpa_msg stderr "cannot read contents of $IF_WPA_CONF"
+                       exit 1
+               fi      
+               WPA_SUP_CONF_CTRL_DIR=$(sed -n -e 's/[[:space:]]*#.*//g' -e 's/[[:space:]]\+.*$//g' \
+                       -e 's/^ctrl_interface=\(DIR=\)\?\(.*\)/\2/p' "$IF_WPA_CONF")
+               if [ -n "$WPA_SUP_CONF_CTRL_DIR" ]; then
+                       WPA_CTRL_DIR="$WPA_SUP_CONF_CTRL_DIR"
+                       WPA_SUP_CONF="-c $IF_WPA_CONF"
+               else
+                       # specify the default ctrl_interface since none was defined in
+                       # the given IF_WPA_CONF
+                       WPA_SUP_CONF="-c $IF_WPA_CONF -C $WPA_CTRL_DIR"
+               fi
+       else
+               # specify the default ctrl_interface
+               WPA_SUP_CONF="-C $WPA_CTRL_DIR"
+       fi
+}
+
+do_stop () {
+       if test_wpa_cli; then
+               # if wpa_action is active for this IFACE and calling ifdown,
+               # do nothing
+               ifupdown_locked && exit 0
+       elif test_wpa_supplicant; then
+               # wpa_supplicant process exists for this IFACE, but wpa_cli
+               # process does not. Allow stop mode to kill this process.
+               :
+       else
+               exit 0
+       fi
+}
+
+case "$MODE" in 
+       start)
+               do_start
+               case "$PHASE" in
+                       pre-up)
+                               kill_wpa_supplicant
+                               init_wpa_supplicant     || exit 1
+                               conf_wpa_supplicant     || { kill_wpa_supplicant; exit 1; }
+                               ;;
+                       post-up)
+                               init_wpa_cli            || { kill_wpa_supplicant; exit 1; }
+                               ;;
+               esac
+               ;;
+
+       stop)
+               do_stop
+               case "$PHASE" in
+                       pre-down)
+                               kill_wpa_cli
+                               ;;
+                       post-down)
+                               kill_wpa_supplicant
+                               ;;
+                       *)
+                               wpa_msg stderr "unknown phase: \"$PHASE\""
+                               exit 1
+                               ;;
+               esac
+               ;;
+       
+       *)
+               wpa_msg stderr "unknown mode: \"$MODE\""
+               exit 1
+               ;;
+esac
+
+exit 0