forked from freifunk-franken/firmware
Einrückungen Korrigiert
Signed-off-by: Jan-Tarek Butt <buttjantarek@googlemail.com>
This commit is contained in:
parent
af17b5196f
commit
b59b5c945d
|
@ -3,27 +3,27 @@
|
||||||
# functions
|
# functions
|
||||||
#FIXME: define here your favorite methods to get the values
|
#FIXME: define here your favorite methods to get the values
|
||||||
get_wlan_client_interface() {
|
get_wlan_client_interface() {
|
||||||
echo "wlan0"
|
echo "wlan0"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_wlan_mesh_interface() {
|
get_wlan_mesh_interface() {
|
||||||
echo "wlan0-1"
|
echo "wlan0-1"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_eth_client_interface() {
|
get_eth_client_interface() {
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
get_eth_mesh_interface() {
|
get_eth_mesh_interface() {
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
get_bridge_interface() {
|
get_bridge_interface() {
|
||||||
echo "br-mesh"
|
echo "br-mesh"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_batman_interface() {
|
get_batman_interface() {
|
||||||
echo "bat0"
|
echo "bat0"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_vpn_interface() {
|
get_vpn_interface() {
|
||||||
|
|
|
@ -19,142 +19,139 @@ SINCE=
|
||||||
|
|
||||||
# functions
|
# functions
|
||||||
debug_output() {
|
debug_output() {
|
||||||
echo "==== DEBUG OUTPUT ===="
|
echo "==== DEBUG OUTPUT ===="
|
||||||
echo "date: $(date)"
|
echo "date: $(date)"
|
||||||
echo "=== INTERFACES ==="
|
echo "=== INTERFACES ==="
|
||||||
ifconfig 2>&1
|
ifconfig 2>&1
|
||||||
echo "=== BATMAN ==="
|
echo "=== BATMAN ==="
|
||||||
echo "== ORIGINATORS =="
|
echo "== ORIGINATORS =="
|
||||||
batctl o 2>&1
|
batctl o 2>&1
|
||||||
echo "== STATISTICS =="
|
echo "== STATISTICS =="
|
||||||
batctl s 2>&1
|
batctl s 2>&1
|
||||||
echo "== GATEWAYS =="
|
echo "== GATEWAYS =="
|
||||||
batctl gwl 2>&1
|
batctl gwl 2>&1
|
||||||
echo "=== BRIDGE ==="
|
echo "=== BRIDGE ==="
|
||||||
echo "== $BRIDGE_INTERFACE =="
|
echo "== $BRIDGE_INTERFACE =="
|
||||||
brctl showmacs $BRIDGE_INTERFACE 2>&1
|
brctl showmacs $BRIDGE_INTERFACE 2>&1
|
||||||
echo "=== CONNECTIVITY TESTS ==="
|
echo "=== CONNECTIVITY TESTS ==="
|
||||||
echo "== PING GATEWAY OVER MESH =="
|
echo "== PING GATEWAY OVER MESH =="
|
||||||
ping -6 -c3 $(uci get configurator.@api[0].ipv6_address)%$(uci get configurator.@api[0].ipv6_interface) 2>&1
|
ping -6 -c3 $(uci get configurator.@api[0].ipv6_address)%$(uci get configurator.@api[0].ipv6_interface) 2>&1
|
||||||
echo "== PING HOST OVER INTERNET =="
|
echo "== PING HOST OVER INTERNET =="
|
||||||
ping -4 -c3 freifunk-ol.de 2>&1
|
ping -4 -c3 freifunk-ol.de 2>&1
|
||||||
echo "=== WLAN ==="
|
echo "=== WLAN ==="
|
||||||
echo "== $WLAN_CLIENT_INTERFACE =="
|
echo "== $WLAN_CLIENT_INTERFACE =="
|
||||||
iw dev $WLAN_CLIENT_INTERFACE station dump 2>&1
|
iw dev $WLAN_CLIENT_INTERFACE station dump 2>&1
|
||||||
echo "== $WLAN_MESH_INTERFACE =="
|
echo "== $WLAN_MESH_INTERFACE =="
|
||||||
iw dev $WLAN_MESH_INTERFACE station dump 2>&1
|
iw dev $WLAN_MESH_INTERFACE station dump 2>&1
|
||||||
echo "== SCAN =="
|
echo "== SCAN =="
|
||||||
iwlist scanning 2>&1
|
iwlist scanning 2>&1
|
||||||
echo "=== WATCHDOG LOG ==="
|
echo "=== WATCHDOG LOG ==="
|
||||||
cat "/var/log/wlanwatchdog.log"
|
cat "/var/log/wlanwatchdog.log"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_time() {
|
get_time() {
|
||||||
date +%s
|
date +%s
|
||||||
}
|
}
|
||||||
|
|
||||||
count_originators() {
|
count_originators() {
|
||||||
local COUNT=0
|
local COUNT=0
|
||||||
if [ -n "$BATMAN_INTERFACE" ]; then
|
if [ -n "$BATMAN_INTERFACE" ]; then
|
||||||
COUNT=$(tail -n +3 /sys/kernel/debug/batman_adv/$BATMAN_INTERFACE/originators 2> /dev/null | grep -v "nodes in range" | wc -l)
|
COUNT=$(tail -n +3 /sys/kernel/debug/batman_adv/$BATMAN_INTERFACE/originators 2> /dev/null | grep -v "nodes in range" | wc -l)
|
||||||
fi
|
fi
|
||||||
echo $COUNT
|
echo $COUNT
|
||||||
}
|
}
|
||||||
|
|
||||||
count_clients() {
|
count_clients() {
|
||||||
local COUNT=0
|
local COUNT=0
|
||||||
local NUMBER=
|
local NUMBER=
|
||||||
if [ -n "$BRIDGE_INTERFACE" ] && [ -n "$WLAN_CLIENT_INTERFACE" ]; then
|
if [ -n "$BRIDGE_INTERFACE" ] && [ -n "$WLAN_CLIENT_INTERFACE" ]; then
|
||||||
NUMBER=$(brctl showstp $BRIDGE_INTERFACE 2> /dev/null | grep $WLAN_CLIENT_INTERFACE | cut -d" " -f2 | tr -d "()")
|
NUMBER=$(brctl showstp $BRIDGE_INTERFACE 2> /dev/null | grep $WLAN_CLIENT_INTERFACE | cut -d" " -f2 | tr -d "()")
|
||||||
fi
|
fi
|
||||||
if [ -n "$BRIDGE_INTERFACE" ] && [ -n "$NUMBER" ]; then
|
if [ -n "$BRIDGE_INTERFACE" ] && [ -n "$NUMBER" ]; then
|
||||||
COUNT=$(brctl showmacs $BRIDGE_INTERFACE 2> /dev/null | grep -v yes | cut -f1 | grep "$NUMBER" | wc -l)
|
COUNT=$(brctl showmacs $BRIDGE_INTERFACE 2> /dev/null | grep -v yes | cut -f1 | grep "$NUMBER" | wc -l)
|
||||||
fi
|
fi
|
||||||
echo $COUNT
|
echo $COUNT
|
||||||
}
|
}
|
||||||
|
|
||||||
count_neighbours() {
|
count_neighbours() {
|
||||||
local COUNT=0
|
local COUNT=0
|
||||||
#FIXME: this counts all nodes that accessable via the WLAN mesh interface
|
#FIXME: this counts all nodes that accessable via the WLAN mesh interface
|
||||||
if [ -n "$BATMAN_INTERFACE" ] && [ -n "$WLAN_MESH_INTERFACE" ]; then
|
if [ -n "$BATMAN_INTERFACE" ] && [ -n "$WLAN_MESH_INTERFACE" ]; then
|
||||||
COUNT=$(tail -n +3 /sys/kernel/debug/batman_adv/$BATMAN_INTERFACE/originators | grep "$WLAN_MESH_INTERFACE" | wc -l)
|
COUNT=$(tail -n +3 /sys/kernel/debug/batman_adv/$BATMAN_INTERFACE/originators | grep "$WLAN_MESH_INTERFACE" | wc -l)
|
||||||
fi
|
fi
|
||||||
echo $COUNT
|
echo $COUNT
|
||||||
}
|
}
|
||||||
|
|
||||||
scan_wlan() {
|
scan_wlan() {
|
||||||
#FIXME: if you can; is there an easier way to get the current frequency?
|
#FIXME: if you can; is there an easier way to get the current frequency?
|
||||||
#FIXME: this should reanimate the wlan driver; do passive and active scanning the job equally well?
|
#FIXME: this should reanimate the wlan driver; do passive and active scanning the job equally well?
|
||||||
local FREQUENCY=$(iwlist $WLAN_MESH_INTERFACE frequency 2> /dev/null | grep -o "Current Frequency=[0-9.]\+ GHz" | grep -o "[0-9.]*" | tr -d ".")
|
local FREQUENCY=$(iwlist $WLAN_MESH_INTERFACE frequency 2> /dev/null | grep -o "Current Frequency=[0-9.]\+ GHz" | grep -o "[0-9.]*" | tr -d ".")
|
||||||
[ -n "$FREQUENCY" ] && iw $WLAN_MESH_INTERFACE scan freq $FREQUENCY passive 1> /dev/null 2> /dev/null
|
[ -n "$FREQUENCY" ] && iw $WLAN_MESH_INTERFACE scan freq $FREQUENCY passive 1> /dev/null 2> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
fsm_load() {
|
fsm_load() {
|
||||||
if [ -f "$STATEFILE" ]
|
if [ -f "$STATEFILE" ] then
|
||||||
then
|
STATE=""
|
||||||
STATE=""
|
SINCE=""
|
||||||
SINCE=""
|
. "$STATEFILE" || return 1
|
||||||
. "$STATEFILE" || return 1
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fsm_save() {
|
fsm_save() {
|
||||||
echo -e "STATE=${STATE}\nSINCE=${SINCE}" > "$STATEFILE" || return 1
|
echo -e "STATE=${STATE}\nSINCE=${SINCE}" > "$STATEFILE" || return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fsm_entry() {
|
fsm_entry() {
|
||||||
SINCE=$(get_time)
|
SINCE=$(get_time)
|
||||||
case $STATE in
|
case $STATE in
|
||||||
pending)
|
pending)
|
||||||
scan_wlan
|
scan_wlan
|
||||||
;;
|
;;
|
||||||
error)
|
error)
|
||||||
if [ -n "$DEBUG" ] && [ $DEBUG -eq 1 ]; then
|
if [ -n "$DEBUG" ] && [ $DEBUG -eq 1 ]; then
|
||||||
debug_output | gzip > ${DEBUGFILE}
|
debug_output | gzip > ${DEBUGFILE}
|
||||||
fi
|
fi
|
||||||
reboot
|
reboot
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
fsm_transition() {
|
fsm_transition() {
|
||||||
local AGE=-1
|
local AGE=-1
|
||||||
[ -n "$SINCE" ] && AGE=$(( $(get_time) - $SINCE ))
|
[ -n "$SINCE" ] && AGE=$(( $(get_time) - $SINCE ))
|
||||||
local OLDSTATE=$STATE
|
local OLDSTATE=$STATE
|
||||||
case $STATE in
|
case $STATE in
|
||||||
working)
|
working)
|
||||||
if [ $(count_neighbours) -eq 0 ] && [ $(count_clients) -eq 0 ]
|
if [ $(count_neighbours) -eq 0 ] && [ $(count_clients) -eq 0 ] then
|
||||||
then
|
STATE=pending
|
||||||
STATE=pending
|
fi
|
||||||
fi
|
;;
|
||||||
;;
|
pending)
|
||||||
pending)
|
if [ $AGE -ge $TIMEOUT_MEDIUM ] then
|
||||||
if [ $AGE -ge $TIMEOUT_MEDIUM ]
|
STATE=error
|
||||||
then
|
elif [ $(count_originators) -eq 0 ] && [ $AGE -ge $TIMEOUT_SHORT ]
|
||||||
STATE=error
|
then
|
||||||
elif [ $(count_originators) -eq 0 ] && [ $AGE -ge $TIMEOUT_SHORT ]
|
STATE=error
|
||||||
then
|
elif [ $(count_neighbours) -gt 0 ] || [ $(count_clients) -gt 0 ]
|
||||||
STATE=error
|
then
|
||||||
elif [ $(count_neighbours) -gt 0 ] || [ $(count_clients) -gt 0 ]
|
STATE=working
|
||||||
then
|
fi
|
||||||
STATE=working
|
;;
|
||||||
fi
|
*)
|
||||||
;;
|
if [ $AGE -ge $TIMEOUT_LONG ]
|
||||||
*)
|
then
|
||||||
if [ $AGE -ge $TIMEOUT_LONG ]
|
STATE=error
|
||||||
then
|
elif [ $(count_neighbours) -gt 0 ] || [ $(count_clients) -gt 0 ]
|
||||||
STATE=error
|
then
|
||||||
elif [ $(count_neighbours) -gt 0 ] || [ $(count_clients) -gt 0 ]
|
STATE=working
|
||||||
then
|
fi
|
||||||
STATE=working
|
;;
|
||||||
fi
|
esac
|
||||||
;;
|
if [ ! "$OLDSTATE" == "$STATE" ]
|
||||||
esac
|
then
|
||||||
if [ ! "$OLDSTATE" == "$STATE" ]
|
echo "$(date) '$OLDSTATE' -> '$STATE'"
|
||||||
then
|
fsm_entry
|
||||||
echo "$(date) '$OLDSTATE' -> '$STATE'"
|
fi
|
||||||
fsm_entry
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# program
|
# program
|
||||||
|
|
Loading…
Reference in New Issue