aboutsummaryrefslogtreecommitdiffstats
path: root/package/madwifi
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2008-07-31 21:11:27 +0000
committerFelix Fietkau <nbd@openwrt.org>2008-07-31 21:11:27 +0000
commitd298a4a411dd928acdc5a2471ea64d64c3c69aad (patch)
treed0c5f5f45234a35778e33faa2bbf61ecffc8a10c /package/madwifi
parent434f4269ea51f04428380fd0099fbefe76955430 (diff)
downloadupstream-d298a4a411dd928acdc5a2471ea64d64c3c69aad.tar.gz
upstream-d298a4a411dd928acdc5a2471ea64d64c3c69aad.tar.bz2
upstream-d298a4a411dd928acdc5a2471ea64d64c3c69aad.zip
fix multicast/authframe handling for wds ap with split sta interfaces
SVN-Revision: 12051
Diffstat (limited to 'package/madwifi')
-rw-r--r--package/madwifi/patches/371-wds_sta_separation.patch21
-rw-r--r--package/madwifi/patches/372-queue_vif.patch4
2 files changed, 19 insertions, 6 deletions
diff --git a/package/madwifi/patches/371-wds_sta_separation.patch b/package/madwifi/patches/371-wds_sta_separation.patch
index c16145b0a9..9126fec4d3 100644
--- a/package/madwifi/patches/371-wds_sta_separation.patch
+++ b/package/madwifi/patches/371-wds_sta_separation.patch
@@ -39,19 +39,21 @@
IEEE80211_NODE_STAT(ni, rx_data);
IEEE80211_NODE_STAT_ADD(ni, rx_bytes, skb->len);
ic->ic_lastdata = jiffies;
-@@ -1132,6 +1140,11 @@
+@@ -1132,6 +1140,13 @@
dev = vap->iv_xrvap->iv_dev;
#endif
+ /* if the node has a wds subif, move data frames there,
+ * but keep EAP traffic on the master */
-+ if (ni->ni_subif && ((eh)->ether_type != __constant_htons(ETHERTYPE_PAE)))
-+ dev = ni->ni_subif->iv_dev;
++ if (ni->ni_subif && ((eh)->ether_type != __constant_htons(ETHERTYPE_PAE))) {
++ vap = ni->ni_subif;
++ dev = vap->iv_dev;
++ }
+
/* perform as a bridge within the vap */
/* XXX intra-vap bridging only */
if (vap->iv_opmode == IEEE80211_M_HOSTAP &&
-@@ -1157,6 +1170,7 @@
+@@ -1157,6 +1172,7 @@
if (ni1 != NULL) {
if (ni1->ni_vap == vap &&
ieee80211_node_is_authorized(ni1) &&
@@ -419,3 +421,14 @@
/*
* Guess how the interrupt handler should work.
*/
+--- a/net80211/ieee80211_output.c
++++ b/net80211/ieee80211_output.c
+@@ -786,6 +786,8 @@
+ hdrsize = sizeof(struct ieee80211_frame);
+
+ SKB_CB(skb)->auth_pkt = (eh.ether_type == __constant_htons(ETHERTYPE_PAE));
++ if (!SKB_CB(skb)->auth_pkt && ni->ni_subif)
++ vap = ni->ni_subif;
+
+ switch (vap->iv_opmode) {
+ case IEEE80211_M_IBSS:
diff --git a/package/madwifi/patches/372-queue_vif.patch b/package/madwifi/patches/372-queue_vif.patch
index 2467986049..a73b9ec582 100644
--- a/package/madwifi/patches/372-queue_vif.patch
+++ b/package/madwifi/patches/372-queue_vif.patch
@@ -1,6 +1,6 @@
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -1181,6 +1181,7 @@
+@@ -1183,6 +1183,7 @@
}
if (skb1 != NULL) {
struct ieee80211_node *ni_tmp;
@@ -8,7 +8,7 @@
skb1->dev = dev;
skb_reset_mac_header(skb1);
skb_set_network_header(skb1, sizeof(struct ether_header));
-@@ -1188,7 +1189,12 @@
+@@ -1190,7 +1191,12 @@
skb1->protocol = __constant_htons(ETH_P_802_2);
/* XXX insert vlan tag before queue it? */
ni_tmp = SKB_CB(skb1)->ni; /* remember node so we can free it */