mac80211: restructuring data Rx handlers

This patch restructures the Rx handlers chain by incorporating previously
handlers ieee80211_rx_h_802_1x_pae and ieee80211_rx_h_drop_unencrypted
into ieee80211_rx_h_data, already in 802.3 form. this scheme follows more
precisely after the IEEE802.11 data plane archituecture, and will prevent
code duplication to IEEE8021.11n A-MSDU handler.

added function:
 - ieee80211_data_to_8023: transfering 802.11 data frames to 802.3 frame
 - ieee80211_deliver_skb: delivering the 802.3 frames to upper stack
eliminated handlers:
 - ieee80211_rx_h_drop_unencrypted: now function ieee80211_drop_unencrypted
 - ieee80211_rx_h_802_1x_pae: now function ieee80211_802_1x_pae
changed handlers:
 - ieee80211_rx_h_data: now contains calls to four above function

Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Ron Rindjunsky
2007-11-22 19:49:12 +02:00
committed by David S. Miller
parent ece8edddf0
commit 76ee65bfaa
4 changed files with 86 additions and 66 deletions

View File

@@ -218,23 +218,11 @@ int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb)
}
EXPORT_SYMBOL(ieee80211_get_hdrlen_from_skb);
int ieee80211_is_eapol(const struct sk_buff *skb)
int ieee80211_is_eapol(const struct sk_buff *skb, int hdrlen)
{
const struct ieee80211_hdr *hdr;
u16 fc;
int hdrlen;
if (unlikely(skb->len < 10))
return 0;
hdr = (const struct ieee80211_hdr *) skb->data;
fc = le16_to_cpu(hdr->frame_control);
if (unlikely(!WLAN_FC_DATA_PRESENT(fc)))
return 0;
hdrlen = ieee80211_get_hdrlen(fc);
if (unlikely(skb->len >= hdrlen + sizeof(eapol_header) &&
memcmp(skb->data + hdrlen, eapol_header,
sizeof(eapol_header)) == 0))