#!/bin/bash
# Begin services/wpa

# Origianlly based upon lfs-bootscripts-1.12 $NETWORK_DEVICES/if{down,up}
# Written by Armin K. <krejzi at email dot com>

# Call with: IFCONFIG=<filename> /lib/services/wpa <IFACE> <up | down>

#$LastChangedBy: bdubbs $
#$Date: 2016-09-02 23:10:02 -0500 (Fri, 02 Sep 2016) $

. /lib/lsb/init-functions
. $IFCONFIG

CFGFILE=/etc/sysconfig/wpa_supplicant-${IFCONFIG##*.}.conf
PIDFILE=/run/wpa_supplicant/$1.pid
CONTROL_IFACE=/run/wpa_supplicant/$1

case "$2" in
   up)

      if [ -e ${PIDFILE} ]; then
         ps $(cat ${PIDFILE}) | grep wpa_supplicant >/dev/null
         if [ "$?" = "0" ]; then
            log_warning_msg "\n wpa_supplicant already running on $1."
            exit 0
         else
            rm ${PIDFILE}
         fi
      fi

      if [ ! -e ${CFGFILE} ]; then
        log_info_msg "\n wpa_supplicant configuration file ${CFGFILE} not present"
        log_failure_msg2
        exit 1
      fi

      # Only specify -C on command line if it is not in CFGFILE
      if ! grep -q ctrl_interface ${CFGFILE}; then 
         WPA_ARGS="-C/run/wpa_supplicant ${WPA_ARGS}"
      fi

      log_info_msg "\n Starting wpa_supplicant on the $1 interface..."

      mkdir -p /run/wpa_supplicant

      /sbin/wpa_supplicant -q -B -Dnl80211,wext -P${PIDFILE} \
          -c${CFGFILE} -i$1 ${WPA_ARGS}

      if [ "$?" != "0" ]; then
        log_failure_msg2
        exit 1
      fi

      log_success_msg2

      if [ -n "${WPA_SERVICE}" ]; then
         if [ ! -e /lib/services/${WPA_SERVICE} -a \
              ! -x /lib/services/${WPA_SERVICE} ]; then
            log_info_msg "\n Cannot start ${WPA_SERVICE} on $1"
            log_failure_msg2
            exit 1
         fi

         IFCONFIG=${IFCONFIG} /lib/services/${WPA_SERVICE} $1 up
      fi
   ;;

   down)
      if [ -n "${WPA_SERVICE}" ]; then
         if [ ! -e /lib/services/${WPA_SERVICE} -a ! -x /lib/services/${WPA_SERVICE} ]; then
            log_warning_msg "\n Cannot stop ${WPA_SERVICE} on $1"
         else
            IFCONFIG=${IFCONFIG} /lib/services/${WPA_SERVICE} $1 down
         fi
      fi

      log_info_msg "\n Stopping wpa_supplicant on the $1 interface..."

      if [ -e ${PIDFILE} ]; then
         kill -9 $(cat ${PIDFILE})
         rm -f ${PIDFILE} ${CONTROL_IFACE}
         evaluate_retval
      else
         log_warning_msg "\n wpa_supplicant already stopped on $1"
         exit 0
      fi
   ;;

   *)
      echo "Usage: $0 [interface] {up|down}"
      exit 1
   ;;
esac

# End services/wpa
