49febb43e7
Cron script which restarts wifi iff queues are marked stopped. This script also outputs some debug information to nail down the problem.
62 lines
1.6 KiB
Bash
Executable File
62 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
check_stopped_queue(){
|
|
local device=$1
|
|
grep -q -E 'stopped: 1$' "${device}/queues"
|
|
}
|
|
|
|
get_tx_pkts() {
|
|
local device=$1
|
|
grep 'TX-Pkts-All' "${device}/xmit" \
|
|
| sed -e 's/^TX-Pkts-All: *\([0-9]*\) .*$/\1/'
|
|
}
|
|
|
|
inc_fatal() {
|
|
local qs=$(cat /tmp/ath9k_workaround_trigger 2>/dev/null || echo 0)
|
|
expr ${qs} + 1 > /tmp/ath9k_workaround_trigger
|
|
}
|
|
|
|
check_ath9k_bug() {
|
|
local device=$1
|
|
check_stopped_queue $device && {
|
|
local tx_first=$(get_tx_pkts $device)
|
|
sleep 5
|
|
check_stopped_queue $device && {
|
|
local tx_second=$(get_tx_pkts $device)
|
|
test $tx_first == $tx_second && {
|
|
local hostname=$(uci get -q system.@system[0].hostname)
|
|
echo "Hostname: ${hostname}"
|
|
echo "------------ Trigger workaround: ${tx_first} -> ${tx_second} ----------------"
|
|
echo "Model:"
|
|
cat /tmp/sysinfo/model
|
|
echo "Release:"
|
|
cat /lib/gluon/release
|
|
echo "Uptime:"
|
|
uptime
|
|
echo "Batctl Neighbours:"
|
|
batctl o | grep wlan0-1
|
|
echo "Queues:"
|
|
cat $device/queues
|
|
echo "Reset:"
|
|
cat $device/reset
|
|
echo "------------ Interupts #1 ---------------------------------------------------"
|
|
cat $device/interrupt
|
|
sleep 10
|
|
echo "------------ Interupts #2 ---------------------------------------------------"
|
|
cat $device/interrupt
|
|
echo "Batctl Neighbours:"
|
|
batctl o | grep wlan0-1
|
|
|
|
#BE queue hangs
|
|
inc_fatal
|
|
wifi
|
|
exit 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for device in /sys/kernel/debug/ieee80211/phy*/ath9k ; do
|
|
check_ath9k_bug $device
|
|
done
|