attached
#!/bin/sh IFACE=$1 ACTION=$2 SELF=$$
PENDING_FILE="/tmp/pending_disconnect.$IFACE.lock" log () { echo "$(date '+%F %T')" "$@" >> "/tmp/wpa_action.$IFACE.log" } lock () { lockfile "/tmp/wpa_action.$IFACE.lock" } unlock () { rm -f "/tmp/wpa_action.$IFACE.lock" } # Note: wpa_cli runs us synchronously, so go into the background to wait case "$ACTION" in CONNECTED) lockfile /tmp/wpa_action.lock if [ -e $PENDING_FILE ]; then log "CONNECTED, cancelling pending disconnect" rm $PENDING_FILE else log "CONNECTED, doing real connect" /sbin/wpa_action "$@" fi rm -f /tmp/wpa_action.lock ;; DISCONNECTED) log "DISCONNECTED, scheduling disconnect ($SELF)" echo $SELF > $PENDING_FILE ( sleep 5 lockfile /tmp/wpa_action.lock if [ -e $PENDING_FILE && "$SELF" = "$(cat $PENDING_FILE)" ]; then log "resuming $SELF, doing real disconnect" rm $PENDING_FILE /sbin/wpa_action "$@" else log "resuming $SELF, cancelled" fi rm -f /tmp/wpa_action.lock )& ;; *) log "whah?? $ACTION" ;; esac