diff options
-rw-r--r-- | net/mac80211/rx.c | 17 | ||||
-rw-r--r-- | net/mac80211/sta_info.h | 8 |
2 files changed, 14 insertions, 11 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index d0018fc40b09..1ff1301ca3df 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -391,13 +391,14 @@ ieee80211_rx_h_passive_scan(struct ieee80211_txrx_data *rx) | |||
391 | return RX_CONTINUE; | 391 | return RX_CONTINUE; |
392 | } | 392 | } |
393 | 393 | ||
394 | #ifdef CONFIG_MAC80211_MESH | ||
395 | #define msh_h_get(h, l) ((struct ieee80211s_hdr *) ((u8 *)h + l)) | ||
396 | static ieee80211_rx_result | 394 | static ieee80211_rx_result |
397 | ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx) | 395 | ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx) |
398 | { | 396 | { |
399 | int hdrlen = ieee80211_get_hdrlen(rx->fc); | 397 | int hdrlen = ieee80211_get_hdrlen(rx->fc); |
400 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data; | 398 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data; |
399 | |||
400 | #define msh_h_get(h, l) ((struct ieee80211s_hdr *) ((u8 *)h + l)) | ||
401 | |||
401 | if ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) { | 402 | if ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) { |
402 | if (!((rx->fc & IEEE80211_FCTL_FROMDS) && | 403 | if (!((rx->fc & IEEE80211_FCTL_FROMDS) && |
403 | (rx->fc & IEEE80211_FCTL_TODS))) | 404 | (rx->fc & IEEE80211_FCTL_TODS))) |
@@ -410,8 +411,9 @@ ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx) | |||
410 | * establisment frame, beacon or probe, drop the frame. | 411 | * establisment frame, beacon or probe, drop the frame. |
411 | */ | 412 | */ |
412 | 413 | ||
413 | if (!rx->sta || rx->sta->plink_state != ESTAB) { | 414 | if (!rx->sta || sta_plink_state(rx->sta) != ESTAB) { |
414 | struct ieee80211_mgmt *mgmt; | 415 | struct ieee80211_mgmt *mgmt; |
416 | |||
415 | if ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT) | 417 | if ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT) |
416 | return RX_DROP_MONITOR; | 418 | return RX_DROP_MONITOR; |
417 | 419 | ||
@@ -434,17 +436,10 @@ ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx) | |||
434 | is_broadcast_ether_addr(hdr->addr1) && | 436 | is_broadcast_ether_addr(hdr->addr1) && |
435 | mesh_rmc_check(hdr->addr4, msh_h_get(hdr, hdrlen), rx->dev)) | 437 | mesh_rmc_check(hdr->addr4, msh_h_get(hdr, hdrlen), rx->dev)) |
436 | return RX_DROP_MONITOR; | 438 | return RX_DROP_MONITOR; |
437 | else | ||
438 | return RX_CONTINUE; | ||
439 | } | ||
440 | #undef msh_h_get | 439 | #undef msh_h_get |
441 | #else | 440 | |
442 | static inline ieee80211_rx_result | ||
443 | ieee80211_rx_mesh_check(struct ieee80211_txrx_data *rx) | ||
444 | { | ||
445 | return RX_CONTINUE; | 441 | return RX_CONTINUE; |
446 | } | 442 | } |
447 | #endif | ||
448 | 443 | ||
449 | 444 | ||
450 | static ieee80211_rx_result | 445 | static ieee80211_rx_result |
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 4ad500373d5a..4d0840b8c58e 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -235,6 +235,14 @@ struct sta_info { | |||
235 | #endif | 235 | #endif |
236 | }; | 236 | }; |
237 | 237 | ||
238 | static inline enum plink_state sta_plink_state(struct sta_info *sta) | ||
239 | { | ||
240 | #ifdef CONFIG_MAC80211_MESH | ||
241 | return sta->plink_state; | ||
242 | #endif | ||
243 | return LISTEN; | ||
244 | } | ||
245 | |||
238 | 246 | ||
239 | /* Maximum number of concurrently registered stations */ | 247 | /* Maximum number of concurrently registered stations */ |
240 | #define MAX_STA_COUNT 2007 | 248 | #define MAX_STA_COUNT 2007 |