mac80211: restructuring data Rx handlers
PATCH 1/1 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
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 three above function
--- net/mac80211/ieee80211_i.h | 2 +- net/mac80211/rx.c | 88 ++++++++++++++++++++++++++------------------ net/mac80211/tx.c | 12 +++-- net/mac80211/util.c | 14 +------ 4 files changed, 61 insertions(+), 55 deletions(-)
net/mac80211/ieee80211_i.h +1 -1
@@ -792,7 +792,7 @@ extern void *mac80211_wiphy_privid; /* for wiphy privid */extern const unsigned char rfc1042_header[6 ];extern const unsigned char bridge_tunnel_header[6 ];u8 *ieee80211_get_bssid (struct ieee80211_hdr *hdr,size_t len); -int ieee80211_is_eapol (const struct sk_buff *skb); +int ieee80211_is_eapol (const struct sk_buff *skb,int hdrlen);int ieee80211_frame_duration (struct ieee80211_local *local,size_t len,int rate,int erp,int short_preamble); void mac80211_ev_michael_mic_failure(struct net_device *dev, int keyidx,
net/mac80211/rx.c +52 -36
189 lines not on this page · raw message
net/mac80211/tx.c +7 -5
@@ -420,7 +420,6 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_txrx_data *tx)return TXRX_CONTINUE ; } -static ieee80211_txrx_result ieee80211_tx_h_ps_buf (struct ieee80211_txrx_data *tx) {
@@ -433,13 +432,15 @@ ieee80211_tx_h_ps_buf(struct ieee80211_txrx_data *tx)return ieee80211_tx_h_multicast_ps_buf (tx); } - - -static ieee80211_txrx_result ieee80211_tx_h_select_key (struct ieee80211_txrx_data *tx) {struct ieee80211_key *key; +const struct ieee80211_hdr *hdr; +u16 fc; + + hdr = (const struct ieee80211_hdr *) tx->skb->data; + fc =le16_to_cpu (hdr->frame_control);if (unlikely (tx->u.tx.control->flags &IEEE80211_TXCTL_DO_NOT_ENCRYPT )) tx->key =NULL ;
@@ -448,7 +449,8 @@ ieee80211_tx_h_select_key(struct ieee80211_txrx_data *tx)else if ((key =rcu_dereference (tx->sdata->default_key))) tx->key = key;else if (tx->sdata->drop_unencrypted && - !(tx->sdata->eapol &&ieee80211_is_eapol (tx->skb))) { + !(tx->sdata->eapol && +ieee80211_is_eapol (tx->skb,ieee80211_get_hdrlen (fc)))) {I802_DEBUG_INC (tx->local->tx_handlers_drop_unencrypted);return TXRX_DROP ; }else {
net/mac80211/util.c +1 -13
@@ -217,23 +217,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 ))
Signature · 8 lines
1.5.3.3 --------------------------------------------------------------------- Intel Israel (74) Limited This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.
Quoted 5 lines · Ron Rindjunsky
This patch restructures the Rx handlers chain by incorporating previously handlers
ieee80211_rx_h_802_1x_paeandieee80211_rx_h_drop_unencryptedintoieee80211_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.
Sorry for the slip, I will issue the *correct* patch :)
Quoted 2 lines
net/mac80211/rx.c +1
-1- (rx->sdata->eapol == 0 || !ieee80211_is_eapol(rx->skb)))) { + (rx->sdata->eapol ||