From ab712fae0f7383a26f5b8f14e9505d28e848c641 Mon Sep 17 00:00:00 2001
From: Helge Jung <hej@c3pb.de>
Date: Mon, 7 Jul 2014 19:27:22 +0200
Subject: [PATCH] new package 'ffpb-wifi-blackout-workaround'

---
 ffpb/ffpb-wifi-blackout-workaround/Makefile   | 36 ++++++++++++++++
 .../etc/hotplug.d/iface/99-ath9k_disable_ani  | 41 +++++++++++++++++++
 2 files changed, 77 insertions(+)
 create mode 100644 ffpb/ffpb-wifi-blackout-workaround/Makefile
 create mode 100644 ffpb/ffpb-wifi-blackout-workaround/files/etc/hotplug.d/iface/99-ath9k_disable_ani

diff --git a/ffpb/ffpb-wifi-blackout-workaround/Makefile b/ffpb/ffpb-wifi-blackout-workaround/Makefile
new file mode 100644
index 0000000..6b71b53
--- /dev/null
+++ b/ffpb/ffpb-wifi-blackout-workaround/Makefile
@@ -0,0 +1,36 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ffpb-wifi-blackout-workaround
+PKG_VERSION:=1
+PKG_RELEASE:=$(GLUON_VERSION).$(GLUON_SITE_CODE)-$(GLUON_RELEASE).$(GLUON_CONFIG_VERSION)
+
+PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ffpb-wifi-blackout-workaround
+  SECTION:=ffpb
+  CATEGORY:=workarounds
+  TITLE:=WiFi-Blackout workaround
+  DEPENDS:=+busybox
+endef
+
+define Package/ffpb-wifi-blackout-workaround/description
+	Disables ANI when the "stable" firmware branch is used.
+endef
+
+define Build/Prepare
+	mkdir -p $(PKG_BUILD_DIR)
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/ffpb-wifi-blackout-workaround/install
+	$(CP) ./files/* $(1)/
+endef
+
+$(eval $(call BuildPackage,ffpb-wifi-blackout-workaround))
diff --git a/ffpb/ffpb-wifi-blackout-workaround/files/etc/hotplug.d/iface/99-ath9k_disable_ani b/ffpb/ffpb-wifi-blackout-workaround/files/etc/hotplug.d/iface/99-ath9k_disable_ani
new file mode 100644
index 0000000..cc41b3d
--- /dev/null
+++ b/ffpb/ffpb-wifi-blackout-workaround/files/etc/hotplug.d/iface/99-ath9k_disable_ani
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# "ANI-thing is better than no WiFi"-Workaround
+#
+# In order to avoid further WiFi-Blackouts that *might* be caused by a buggy
+# ANI feature in the ath9k kernel module, we disable ANI for nodes using the
+# "stable" firmware branch until it got fixed in OpenWRT completely.
+
+# Don't need to do anything, unless the script gets triggered by an "ifup"
+# event.
+[[ "$ACTION" != "ifup" ]] && exit 0;
+[[ "$INTERFACE" != "mesh_radio0" && "$INTERFACE" != "client" ]] && exit 0;
+
+# Test whether disabling ANI is applicable or not
+if [ ! -e "/sys/kernel/debug/ieee80211/phy0/ath9k/ani" ] ; then
+	logger -s -t ath9k-disable-ani -p local0.notice \
+		"Not an ath9k device with ANI. Aborting."
+	exit 0
+fi
+
+# Load helper functions and determine the current branch
+. /lib/functions.sh
+
+config_load autoupdater
+
+# Test whether this devices has the stable or the testing firmware
+config_get fw_branch "settings" "branch"
+
+new_ani_state=1
+log_msg="Current firmware branch is: ${fw_branch}"
+if [ "$fw_branch" == "stable" ] ; then
+	new_ani_state=0
+	log_msg="${log_msg} (disabling ANI)"
+else
+	log_msg="${log_msg} (enabling ANI)"
+fi
+
+# enable/disable feature
+logger -s -t ath9k-disable-ani -p local0.info $log_msg
+/bin/echo ${new_ani_state} > /sys/kernel/debug/ieee80211/phy0/ath9k/ani
+
-- 
GitLab