aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index cc4a896c617f..d0018fc40b09 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -20,9 +20,7 @@
20 20
21#include "ieee80211_i.h" 21#include "ieee80211_i.h"
22#include "ieee80211_led.h" 22#include "ieee80211_led.h"
23#ifdef CONFIG_MAC80211_MESH
24#include "mesh.h" 23#include "mesh.h"
25#endif
26#include "wep.h" 24#include "wep.h"
27#include "wpa.h" 25#include "wpa.h"
28#include "tkip.h" 26#include "tkip.h"
@@ -439,6 +437,13 @@ ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx)
439 else 437 else
440 return RX_CONTINUE; 438 return RX_CONTINUE;
441} 439}
440#undef msh_h_get
441#else
442static inline ieee80211_rx_result
443ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx)
444{
445 return RX_CONTINUE;
446}
442#endif 447#endif
443 448
444 449
@@ -477,10 +482,8 @@ ieee80211_rx_h_check(struct ieee80211_txrx_data *rx)
477 * responsible for filtering on both auth and assoc states. 482 * responsible for filtering on both auth and assoc states.
478 */ 483 */
479 484
480#ifdef CONFIG_MAC80211_MESH 485 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
481 if (rx->sdata->vif.type == IEEE80211_IF_TYPE_MESH_POINT)
482 return ieee80211_rx_mesh_check(rx); 486 return ieee80211_rx_mesh_check(rx);
483#endif
484 487
485 if (unlikely(((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA || 488 if (unlikely(((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA ||
486 ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL && 489 ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL &&
@@ -1111,8 +1114,7 @@ ieee80211_data_to_8023(struct ieee80211_txrx_data *rx)
1111 1114
1112 hdrlen = ieee80211_get_hdrlen(fc); 1115 hdrlen = ieee80211_get_hdrlen(fc);
1113 1116
1114#ifdef CONFIG_MAC80211_MESH 1117 if (ieee80211_vif_is_mesh(&sdata->vif)) {
1115 if (sdata->vif.type == IEEE80211_IF_TYPE_MESH_POINT) {
1116 int meshhdrlen = ieee80211_get_mesh_hdrlen( 1118 int meshhdrlen = ieee80211_get_mesh_hdrlen(
1117 (struct ieee80211s_hdr *) (skb->data + hdrlen)); 1119 (struct ieee80211s_hdr *) (skb->data + hdrlen));
1118 /* Copy on cb: 1120 /* Copy on cb:
@@ -1126,7 +1128,6 @@ ieee80211_data_to_8023(struct ieee80211_txrx_data *rx)
1126 memcpy(MESH_PREQ(skb), hdr->addr2, ETH_ALEN); 1128 memcpy(MESH_PREQ(skb), hdr->addr2, ETH_ALEN);
1127 hdrlen += meshhdrlen; 1129 hdrlen += meshhdrlen;
1128 } 1130 }
1129#endif
1130 1131
1131 /* convert IEEE 802.11 header + possible LLC headers into Ethernet 1132 /* convert IEEE 802.11 header + possible LLC headers into Ethernet
1132 * header 1133 * header
@@ -1306,9 +1307,8 @@ ieee80211_deliver_skb(struct ieee80211_txrx_data *rx)
1306 } 1307 }
1307 } 1308 }
1308 1309
1309#ifdef CONFIG_MAC80211_MESH
1310 /* Mesh forwarding */ 1310 /* Mesh forwarding */
1311 if (sdata->vif.type == IEEE80211_IF_TYPE_MESH_POINT) { 1311 if (ieee80211_vif_is_mesh(&sdata->vif)) {
1312 u8 *mesh_ttl = &((struct ieee80211s_hdr *)skb->cb)->ttl; 1312 u8 *mesh_ttl = &((struct ieee80211s_hdr *)skb->cb)->ttl;
1313 (*mesh_ttl)--; 1313 (*mesh_ttl)--;
1314 1314
@@ -1321,12 +1321,13 @@ ieee80211_deliver_skb(struct ieee80211_txrx_data *rx)
1321 else 1321 else
1322 xmit_skb->pkt_type = PACKET_OTHERHOST; 1322 xmit_skb->pkt_type = PACKET_OTHERHOST;
1323 } else 1323 } else
1324 sdata->u.sta.mshstats.dropped_frames_ttl++; 1324 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta,
1325 1325 dropped_frames_ttl);
1326 } else if (skb->pkt_type != PACKET_OTHERHOST && 1326 } else if (skb->pkt_type != PACKET_OTHERHOST &&
1327 compare_ether_addr(dev->dev_addr, skb->data) != 0) { 1327 compare_ether_addr(dev->dev_addr, skb->data) != 0) {
1328 if (*mesh_ttl == 0) { 1328 if (*mesh_ttl == 0) {
1329 sdata->u.sta.mshstats.dropped_frames_ttl++; 1329 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta,
1330 dropped_frames_ttl);
1330 dev_kfree_skb(skb); 1331 dev_kfree_skb(skb);
1331 skb = NULL; 1332 skb = NULL;
1332 } else { 1333 } else {
@@ -1337,7 +1338,6 @@ ieee80211_deliver_skb(struct ieee80211_txrx_data *rx)
1337 } 1338 }
1338 } 1339 }
1339 } 1340 }
1340#endif
1341 1341
1342 if (skb) { 1342 if (skb) {
1343 /* deliver to local stack */ 1343 /* deliver to local stack */