diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-01-20 07:55:27 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-02-06 14:50:37 -0500 |
commit | 66e67e418908442389d3a9e6509985f01cbaf9b0 (patch) | |
tree | 01fad87d0d47f5887497c569d98cee20fa1f0f29 /net/mac80211/rx.c | |
parent | 4c0c0b75e0c35ddb8f61c06bcbffede63ab4f4a2 (diff) |
mac80211: redesign auth/assoc
This is the second part of the auth/assoc redesign,
the mac80211 part. This moves the auth/assoc code
out of the work abstraction and into the MLME, so
that we don't flip channels all the time etc.
The only downside is that when we are associated,
we need to drop the association in order to create
a connection to another AP, but for most drivers
this is actually desirable and the ability to do
was never used by any applications. If we want to
implement resource reservation with FT-OTA, we'd
probably best do it with explicit R-O-C in wpa_s.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 8d6fa674f53e..2b5b1194dfc2 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -2484,14 +2484,9 @@ static ieee80211_rx_result debug_noinline | |||
2484 | ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) | 2484 | ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) |
2485 | { | 2485 | { |
2486 | struct ieee80211_sub_if_data *sdata = rx->sdata; | 2486 | struct ieee80211_sub_if_data *sdata = rx->sdata; |
2487 | ieee80211_rx_result rxs; | ||
2488 | struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; | 2487 | struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; |
2489 | __le16 stype; | 2488 | __le16 stype; |
2490 | 2489 | ||
2491 | rxs = ieee80211_work_rx_mgmt(rx->sdata, rx->skb); | ||
2492 | if (rxs != RX_CONTINUE) | ||
2493 | return rxs; | ||
2494 | |||
2495 | stype = mgmt->frame_control & cpu_to_le16(IEEE80211_FCTL_STYPE); | 2490 | stype = mgmt->frame_control & cpu_to_le16(IEEE80211_FCTL_STYPE); |
2496 | 2491 | ||
2497 | if (!ieee80211_vif_is_mesh(&sdata->vif) && | 2492 | if (!ieee80211_vif_is_mesh(&sdata->vif) && |
@@ -2500,10 +2495,13 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) | |||
2500 | return RX_DROP_MONITOR; | 2495 | return RX_DROP_MONITOR; |
2501 | 2496 | ||
2502 | switch (stype) { | 2497 | switch (stype) { |
2498 | case cpu_to_le16(IEEE80211_STYPE_AUTH): | ||
2503 | case cpu_to_le16(IEEE80211_STYPE_BEACON): | 2499 | case cpu_to_le16(IEEE80211_STYPE_BEACON): |
2504 | case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP): | 2500 | case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP): |
2505 | /* process for all: mesh, mlme, ibss */ | 2501 | /* process for all: mesh, mlme, ibss */ |
2506 | break; | 2502 | break; |
2503 | case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): | ||
2504 | case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): | ||
2507 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): | 2505 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): |
2508 | case cpu_to_le16(IEEE80211_STYPE_DISASSOC): | 2506 | case cpu_to_le16(IEEE80211_STYPE_DISASSOC): |
2509 | if (is_multicast_ether_addr(mgmt->da) && | 2507 | if (is_multicast_ether_addr(mgmt->da) && |
@@ -2515,7 +2513,6 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) | |||
2515 | return RX_DROP_MONITOR; | 2513 | return RX_DROP_MONITOR; |
2516 | break; | 2514 | break; |
2517 | case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ): | 2515 | case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ): |
2518 | case cpu_to_le16(IEEE80211_STYPE_AUTH): | ||
2519 | /* process only for ibss */ | 2516 | /* process only for ibss */ |
2520 | if (sdata->vif.type != NL80211_IFTYPE_ADHOC) | 2517 | if (sdata->vif.type != NL80211_IFTYPE_ADHOC) |
2521 | return RX_DROP_MONITOR; | 2518 | return RX_DROP_MONITOR; |