49 lines
1.3 KiB
Bash
49 lines
1.3 KiB
Bash
#!/bin/sh
|
|
|
|
# set to true if you want that wpa_supplicant gets restarted automatically
|
|
# on disconnect instead of doing crazy things
|
|
restart_service=false
|
|
# set to false if you want a static ip
|
|
# (and edit ip address settings further down)
|
|
do_dhcp=true
|
|
# set to true if you experience connection problems
|
|
do_throttle=false
|
|
throttle_speed=1M
|
|
|
|
if="$1"
|
|
state="$2"
|
|
essid="$3"
|
|
|
|
echo "$0: $if $state"
|
|
case "$state" in
|
|
RECALLED)
|
|
sleep 1
|
|
$do_throttle && iwconfig "$if" rate "$throttle_speed"
|
|
if $do_dhcp ; then
|
|
dhclient "$if" || dhclient "$if";
|
|
else
|
|
sn=192.168.1
|
|
ifconfig "$if" "$sn".100 netmask 255.255.255.0
|
|
route delete default
|
|
route add default gw "$sn".1
|
|
echo "nameserver 8.8.8.8" > /etc/resolv.conf
|
|
fi
|
|
;;
|
|
CONNECTED)
|
|
printf "<<< Connected to '%s' >>>\n" "$essid"
|
|
"$0" "$1" RECALLED "$essid" &
|
|
;;
|
|
DISCONNECTED)
|
|
$restart_service && sv status wpa_supplicant | grep "^run:">/dev/null && {
|
|
# restart wpa_supplicant on disconnect iff the service is still up
|
|
# (disconnect may be triggered by user doing a sv d wpa_supplicant manually,
|
|
# so doing this here unconditionally would up the service again.
|
|
# why do we want a restart? there's a whole lot of logic of blacklisting,
|
|
# whitelisting, timeouts etc in wpa_supplicant that at the end of the day
|
|
# just gets into the way instead of helping.
|
|
sv d wpa_supplicant ; sv u wpa_supplicant
|
|
}
|
|
|
|
:
|
|
;;
|
|
esac
|