diff options
author | Felix Fietkau <nbd@openwrt.org> | 2008-07-31 21:11:27 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2008-07-31 21:11:27 +0000 |
commit | d298a4a411dd928acdc5a2471ea64d64c3c69aad (patch) | |
tree | d0c5f5f45234a35778e33faa2bbf61ecffc8a10c | |
parent | 434f4269ea51f04428380fd0099fbefe76955430 (diff) | |
download | mtk-20170518-d298a4a411dd928acdc5a2471ea64d64c3c69aad.zip mtk-20170518-d298a4a411dd928acdc5a2471ea64d64c3c69aad.tar.gz mtk-20170518-d298a4a411dd928acdc5a2471ea64d64c3c69aad.tar.bz2 |
fix multicast/authframe handling for wds ap with split sta interfaces
SVN-Revision: 12051
-rw-r--r-- | package/madwifi/patches/371-wds_sta_separation.patch | 21 | ||||
-rw-r--r-- | package/madwifi/patches/372-queue_vif.patch | 4 |
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 c16145b..9126fec 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 2467986..a73b9ec 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 */ |