Merge pull request #34 from sargon/ath9k

gluon-ath9k-workaround: Workaround for the ath9k wifi bug.
This commit is contained in:
Nils Schneider 2014-07-08 12:13:16 +02:00
commit f0cd49ae55
4 changed files with 109 additions and 0 deletions

View File

@ -0,0 +1,35 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=gluon-ath9k-workaround
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/gluon-ath9k-workaround
SECTION:=gluon
CATEGORY:=Gluon
TITLE:=ATH9K Workaround
DEPENDS:=+gluon-cron
endef
define Package/gluon-ath9k-workaround/description
Gluon community wifi mesh firmware framework: ath9k wifi bug workaround
endef
define Build/Prepare
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/gluon-ath9k-workaround/install
$(CP) ./files/* $(1)/
endef
$(eval $(call BuildPackage,gluon-ath9k-workaround))

View File

@ -0,0 +1 @@
* * * * * /usr/sbin/ath9k-workaround

View File

@ -0,0 +1,12 @@
#!/usr/bin/lua
local site = require 'gluon.site_config'
local uci = require 'luci.model.uci'
local c = uci.cursor()
local f = io.open('/lib/gluon/cron/ath9k-workaround','w')
if f and site.monitor ~= nil then
f:write('* * * * * /usr/sbin/ath9k-workaround | nc ' .. site.monitor)
f:close()
end

View File

@ -0,0 +1,61 @@
#!/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