diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-12-23 07:15:35 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-12-28 16:54:55 -0500 |
commit | af6b63741cc4e4dfd575d06beb333b11a8a6e0c0 (patch) | |
tree | a2c1a27b6b6b0fb171606f3653b5c280537b32a3 /net/mac80211/rx.c | |
parent | f679f65d417c3ea3f91b4bbfb68e3951c9eb8f04 (diff) |
mac80211: generalise work handling
In order to use auth/assoc for different purposes
other than MLME, it needs to be split up. For other
purposes, a generic work handling (potentially on
another channel) will be useful.
To achieve that, this patch moves much of the MLME
work handling out of mlme into a new work API. The
API can currently handle probing a specific AP,
authentication and association. The MLME previously
handled probe/authentication as one step and will
continue to do so, but they are separate in the new
work handling.
Work items are RCU-managed to be able to check for
existence of an item for a specific frame in the RX
path, but they can be re-used which the MLME right
now will do for its combined probe/auth step.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index f60dfca52196..bfcf09eb64b4 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1945,6 +1945,7 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) | |||
1945 | { | 1945 | { |
1946 | struct ieee80211_sub_if_data *sdata = rx->sdata; | 1946 | struct ieee80211_sub_if_data *sdata = rx->sdata; |
1947 | struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; | 1947 | struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; |
1948 | ieee80211_rx_result rxs; | ||
1948 | 1949 | ||
1949 | if (!(rx->flags & IEEE80211_RX_RA_MATCH)) | 1950 | if (!(rx->flags & IEEE80211_RX_RA_MATCH)) |
1950 | return RX_DROP_MONITOR; | 1951 | return RX_DROP_MONITOR; |
@@ -1952,6 +1953,10 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) | |||
1952 | if (ieee80211_drop_unencrypted(rx, mgmt->frame_control)) | 1953 | if (ieee80211_drop_unencrypted(rx, mgmt->frame_control)) |
1953 | return RX_DROP_MONITOR; | 1954 | return RX_DROP_MONITOR; |
1954 | 1955 | ||
1956 | rxs = ieee80211_work_rx_mgmt(rx->sdata, rx->skb); | ||
1957 | if (rxs != RX_CONTINUE) | ||
1958 | return rxs; | ||
1959 | |||
1955 | if (ieee80211_vif_is_mesh(&sdata->vif)) | 1960 | if (ieee80211_vif_is_mesh(&sdata->vif)) |
1956 | return ieee80211_mesh_rx_mgmt(sdata, rx->skb); | 1961 | return ieee80211_mesh_rx_mgmt(sdata, rx->skb); |
1957 | 1962 | ||