From: Felix Fietkau <nbd@openwrt.org>
Date: Fri, 25 Jan 2008 23:09:13 +0000 (+0000)
Subject: add some random madwifi fixes
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=929767622f857b2371ca8f9a8b2e989dc0aa7a80;p=openwrt%2Fstaging%2Fjow.git

add some random madwifi fixes

SVN-Revision: 10260
---

diff --git a/package/madwifi/patches/312-erpupdate.patch b/package/madwifi/patches/312-erpupdate.patch
new file mode 100644
index 0000000000..8b8b3c7c29
--- /dev/null
+++ b/package/madwifi/patches/312-erpupdate.patch
@@ -0,0 +1,73 @@
+Index: madwifi-dfs-r3053/net80211/ieee80211_beacon.c
+===================================================================
+--- madwifi-dfs-r3053.orig/net80211/ieee80211_beacon.c	2008-01-10 10:51:31.406580318 +0100
++++ madwifi-dfs-r3053/net80211/ieee80211_beacon.c	2008-01-10 10:56:54.040966203 +0100
+@@ -538,9 +538,9 @@
+ 			vap->iv_flags &= ~IEEE80211_F_XRUPDATE;
+ 		}
+ #endif
+-		if ((ic->ic_flags_ext & IEEE80211_FEXT_ERPUPDATE) && (bo->bo_erp != NULL)) {
++		if ((vap->iv_flags_ext & IEEE80211_FEXT_ERPUPDATE) && (bo->bo_erp != NULL)) {
+ 			(void) ieee80211_add_erp(bo->bo_erp, ic);
+-			ic->ic_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE;
++			vap->iv_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE;
+ 		}
+ 	}
+ 	/* if it is a mode change beacon for dynamic turbo case */
+Index: madwifi-dfs-r3053/net80211/ieee80211_input.c
+===================================================================
+--- madwifi-dfs-r3053.orig/net80211/ieee80211_input.c	2008-01-10 10:51:31.558588981 +0100
++++ madwifi-dfs-r3053/net80211/ieee80211_input.c	2008-01-10 10:55:51.565405916 +0100
+@@ -3315,9 +3315,12 @@
+ 			/* Assume no ERP IE == 11b AP */
+ 			if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
+ 				!(ic->ic_flags & IEEE80211_F_USEPROT)) {
++				struct ieee80211vap *tmpvap;
+ 
+ 				ic->ic_flags |= IEEE80211_F_USEPROT;
+-				ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
++				TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
++					tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
++				}
+ 			}
+ 		}
+ 
+Index: madwifi-dfs-r3053/net80211/ieee80211_node.c
+===================================================================
+--- madwifi-dfs-r3053.orig/net80211/ieee80211_node.c	2008-01-10 10:51:31.622592626 +0100
++++ madwifi-dfs-r3053/net80211/ieee80211_node.c	2008-01-10 10:54:58.398376106 +0100
+@@ -1998,8 +1998,12 @@
+ 		}
+ 
+ 		/* Update ERP element if this is first non ERP station */
+-		if (ic->ic_nonerpsta == 1)
+-			ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
++		if (ic->ic_nonerpsta == 1) {
++			struct ieee80211vap *tmpvap;
++			TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
++				tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
++			}
++		}
+ 	} else
+ 		ni->ni_flags |= IEEE80211_NODE_ERP;
+ }
+@@ -2202,6 +2206,8 @@
+ 		IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
+ 			"non-ERP station leaves, count now %d", ic->ic_nonerpsta);
+ 		if (ic->ic_nonerpsta == 0) {
++			struct ieee80211vap *tmpvap;
++
+ 			IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC,
+ 				"%s: disable use of protection\n", __func__);
+ 			ic->ic_flags &= ~IEEE80211_F_USEPROT;
+@@ -2213,7 +2219,9 @@
+ 				ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
+ 				ic->ic_flags &= ~IEEE80211_F_USEBARKER;
+ 			}
+-			ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
++			TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
++				tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
++			}
+ 		}
+ 	}
+ }
diff --git a/package/madwifi/patches/313-long_preamble.patch b/package/madwifi/patches/313-long_preamble.patch
new file mode 100644
index 0000000000..1f3515036c
--- /dev/null
+++ b/package/madwifi/patches/313-long_preamble.patch
@@ -0,0 +1,13 @@
+Index: madwifi-dfs-r3053/net80211/ieee80211_output.c
+===================================================================
+--- madwifi-dfs-r3053.orig/net80211/ieee80211_output.c	2008-01-10 15:40:39.777239675 +0100
++++ madwifi-dfs-r3053/net80211/ieee80211_output.c	2008-01-10 15:41:05.214689275 +0100
+@@ -1297,7 +1297,7 @@
+ 		erp |= IEEE80211_ERP_NON_ERP_PRESENT;
+ 	if (ic->ic_flags & IEEE80211_F_USEPROT)
+ 		erp |= IEEE80211_ERP_USE_PROTECTION;
+-	if (ic->ic_flags & IEEE80211_F_USEBARKER)
++	if ((ic->ic_flags & IEEE80211_F_USEBARKER) || (ic->ic_nonerpsta > 0))
+ 		erp |= IEEE80211_ERP_LONG_PREAMBLE;
+ 	*frm++ = erp;
+ 	return frm;
diff --git a/package/madwifi/patches/314-ap_bridge_multicast.patch b/package/madwifi/patches/314-ap_bridge_multicast.patch
new file mode 100644
index 0000000000..a57901bca3
--- /dev/null
+++ b/package/madwifi/patches/314-ap_bridge_multicast.patch
@@ -0,0 +1,15 @@
+Index: madwifi-dfs-r3252/net80211/ieee80211_input.c
+===================================================================
+--- madwifi-dfs-r3252.orig/net80211/ieee80211_input.c	2008-01-26 00:03:20.203760157 +0100
++++ madwifi-dfs-r3252/net80211/ieee80211_input.c	2008-01-26 00:08:08.773799701 +0100
+@@ -1133,8 +1133,8 @@
+ 
+ 		if (ETHER_IS_MULTICAST(eh->ether_dhost)) {
+ 			skb1 = skb_copy(skb, GFP_ATOMIC);
+-			/* We duplicate the reference after skb_copy */
+-			ieee80211_skb_copy_noderef(skb, skb1);
++			/* Use the BSS node for retransmitting this multicast frame */
++			SKB_CB(skb1)->ni = ieee80211_ref_node(vap->iv_bss);
+ 		}
+ 		else {
+ 			/*