#! /bin/bash . /usr/lib/network/network . "$SUBR_DIR/8021x" . "$SUBR_DIR/rfkill" . /etc/conf.d/netcfg AUTOWIFI="/usr/sbin/wpa_actiond -p /run/wpa_supplicant" 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 PIDFILE="/run/wpa_actiond_${interface}.pid" [[ -f "$IFACE_DIR/$interface" ]] && source "$IFACE_DIR/$interface" netcfg -D "$interface" timeout_wait 1 '[[ ! -f "$PIDFILE" ]]' || kill "$(< "$PIDFILE")" # only try to disable software rfkill switches (FS#25514) if [[ "$RFKILL" == "soft" ]]; then set_rf_state "$interface" disabled $RFKILL_NAME || exit $? fi exit ;; *) interface=$1; shift PIDFILE="/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 -D "$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)" if [[ -n "${AUTO_PROFILES}" ]]; then # At some point, this can be removed. if [[ ${#AUTO_PROFILES[@]} -eq 1 ]]; then report_err "Please convert AUTO_PROFILES to an array in /etc/conf.d/netcfg." AUTO_PROFILES=($AUTO_PROFILES) fi for prof in "${AUTO_PROFILES[@]}"; do echo "$prof"; done else list_profiles fi | while read profile; 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 printf "%s\n" "network={" "$(make_wpa_config)" "id_str=\"$profile\"" "}" >> $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" &> /dev/null 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