Commit 28e7cf40 authored by Gabriel Detraz's avatar Gabriel Detraz
Browse files

On ajoute watch_net.sh

parent e0a9bc6e
#!/bin/sh
# Watch the different broadcast networks and hide them if they
# are considered unusable.
# A new entry in wifi-iface sections of wireless config has been added
# test_connect can contain a shell command giving the state of the
# network:
# for a bridged wifi network (without IP on APs side), this could be:
# option 'test_connect' 'arping -I br-$(net) $(routeur_ip) -c 4'
# for wpa2 networks, test_connect can be ommited and connectivity
# to the radius serveur will be checked.
# In case of lack of connectivity, the corresponding SSID won't be
# broadcast anymore, preveting new clients from connecting.
# Currently, the scripts uses SIGHUP signal to hostapd process which
# ends up in loosing anyway all associated clients on the >>radio<<
# (hope this will be fixed)
CONF=/var/run/hostapd-phy0.conf
PID=/var/run/wifi-phy0.pid
CTRL=/var/run/hostapd/
. /lib/functions.sh
# Numbered of changed statuses
changed=0
get_dev_of_ssid() {
for dev in `ls $CTRL`; do
hostapd_cli -p$CTRL -i$dev get_config | grep "^ssid=$1$" -q && {
echo $dev; return;
}
done
}
set_ignore_broadcast_ssid() {
dev=`get_dev_of_ssid $1`
echo "ssid $1 in $dev"
old=`sed -e "/^\(interface\|bss\)=$dev$/,/^bss=/ s/^ignore_broadcast_ssid=\(.*\)$/\1/; t; d" $CONF`
[ -z "$old" ] && { echo "Old value not found. Skipping"; return; }
echo "Set to $2 (old=$old)"
[ "$old" -eq $2 ] && {
echo "...Unchanged !"
} || {
sed -e "/^\(interface\|bss\)=$dev$/,/^bss=/ s/^ignore_broadcast_ssid=.*$/ignore_broadcast_ssid=$2/; " -i $CONF
changed=$(($changed+1))
}
}
check_ssid() {
local iface="$1"
config_get ssid $iface ssid default
config_get test_connect $iface test_connect
config_get disabled $iface disabled 0
[ $disabled -ne 0 ] && {
echo "$ssid: skipped (disabled)"
return
}
[ -z "$test_connect" ] && {
config_get server $iface server
[ -z "$server" ] && {
test_connect="true"
} || {
test_connect="ping -c 4 $server"
}
}
echo "$ssid: $test_connect ..."
$test_connect &> /dev/null
[ 0 -eq $? ] && set_ignore_broadcast_ssid "$ssid" 0 \
|| set_ignore_broadcast_ssid "$ssid" 1
}
# TODO: find out why this causes all clients to be disconnected on the radio
# maybe we should try reload the configuration using "hostapd_cli reconfigure"
# however we should figure out first what happened to that command
# (http://lists.shmoo.com/pipermail/hostap/2011-July/023520.html ?)
reload_hostapd() {
echo "reload config"
kill -1 `cat $PID`
}
config_load wireless
cp $CONF $CONF.bak
config_foreach check_ssid wifi-iface
[ 0 -ne "$changed" ] && {
reload_hostapd
}
exit $changed
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment