#! /bin/bash . /usr/lib/network/network . /usr/lib/network/8021x . /usr/lib/network/wireless AUTOWIFI="/usr/sbin/wpa_actiond" ACTION_SCRIPT="/usr/bin/netcfg-wpa_actiond-action" case $1 in help) echo "netcfg-wpa_actiond " echo "netcfg-wpa_actiond stop " exit ;; stop) [[ -z $2 ]] && echo "Please specify an interface to stop" && exit 1 interface=$2 [[ -f "$IFACE_DIR/$interface" ]] && source "$IFACE_DIR/$interface" stop_wpa $2 kill $(cat "/var/run/wpa_actiond_${2}.pid") if [[ -n "$RFKILL" ]]; then set_rf_state "$interface" disabled $RFKILL_NAME || exit $? fi exit ;; *) interface=$1; shift PIDFILE="/var/run/wpa_actiond_${interface}.pid" EXTRA_AUTOWIFI_OPTIONS="$*" ;; esac if [[ -z $interface ]]; then echo "No interface specified" exit 1 fi # Load interface specific config [[ -f "$IFACE_DIR/$interface" ]] && source "$IFACE_DIR/$interface" if [[ -f "$CONN_DIR/interfaces/$interface" ]]; then netcfg -i $interface fi if [[ -n "$RFKILL" ]]; then # Enable radio if necessary enable_rf $interface $RFKILL $RFKILL_NAME || exit $? fi WPA_CONF="$(make_wpa_config_file $interface)" for profile in $(list_profiles); do echo $profile ( load_profile $profile [[ $CONNECTION != "wireless" ]] && exit 1 [[ $INTERFACE != $interface ]] && exit 1 # Exclude wpa-config, the wpa_conf is 'complete' and doesn't fit in this scheme [[ -z "$SECURITY" ]] && SECURITY="none" [[ $SECURITY == "wpa-config" ]] && exit 1 config=$(make_wpa_config) echo -e "network={ \n$config \nid_str=\"$profile\" \n}" >> $WPA_CONF ) done [[ -z $WPA_DRIVER ]] && WPA_DRIVER="nl80211,wext" WPA_OPTS="-W $WPA_OPTS" # Kill any existing wpa_supplicant on this interface stop_wpa "$interface" if start_wpa $interface $WPA_CONF $WPA_DRIVER $WPA_OPTS; then if $AUTOWIFI -i ${interface} -P ${PIDFILE} -a ${ACTION_SCRIPT} ${EXTRA_AUTOWIFI_OPTIONS}; then exit 0 fi fi exit 1