diff options
author | Jiri Benc <jbenc@suse.cz> | 2005-08-25 20:11:46 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-08-25 20:11:46 -0400 |
commit | f13baae43e97e84d3f06080908db75a017c62165 (patch) | |
tree | f1611a5418f2c9790d99017b1cd001fc3a065d0b | |
parent | 8d45ff7d7bd85d9066f5b498cda5c4a52ac36a7f (diff) |
ieee80211: new constants from latest 802.11x specifications
From: Gertjan van Wingerde <gwingerde@home.nl>
Attached patch updates the definitions of the generic ieee80211 stack to
the latest versions of the published 802.11x specification suite.
Signed-off-by: Gertjan van Wingerde <gwingerde@home.nl>
Signed-off-by: Jiri Benc <jbenc@suse.cz>
-rw-r--r-- | drivers/net/wireless/atmel.c | 8 | ||||
-rw-r--r-- | include/net/ieee80211.h | 79 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_rx.c | 16 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_tx.c | 2 |
4 files changed, 78 insertions, 27 deletions
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c index bed160a25cab..f48a6e729224 100644 --- a/drivers/net/wireless/atmel.c +++ b/drivers/net/wireless/atmel.c | |||
@@ -867,7 +867,7 @@ static int start_tx (struct sk_buff *skb, struct net_device *dev) | |||
867 | header.duration_id = 0; | 867 | header.duration_id = 0; |
868 | header.seq_ctl = 0; | 868 | header.seq_ctl = 0; |
869 | if (priv->wep_is_on) | 869 | if (priv->wep_is_on) |
870 | frame_ctl |= IEEE80211_FCTL_WEP; | 870 | frame_ctl |= IEEE80211_FCTL_PROTECTED; |
871 | if (priv->operating_mode == IW_MODE_ADHOC) { | 871 | if (priv->operating_mode == IW_MODE_ADHOC) { |
872 | memcpy(&header.addr1, skb->data, 6); | 872 | memcpy(&header.addr1, skb->data, 6); |
873 | memcpy(&header.addr2, dev->dev_addr, 6); | 873 | memcpy(&header.addr2, dev->dev_addr, 6); |
@@ -1117,7 +1117,7 @@ static void rx_done_irq(struct atmel_private *priv) | |||
1117 | /* probe for CRC use here if needed once five packets have arrived with | 1117 | /* probe for CRC use here if needed once five packets have arrived with |
1118 | the same crc status, we assume we know what's happening and stop probing */ | 1118 | the same crc status, we assume we know what's happening and stop probing */ |
1119 | if (priv->probe_crc) { | 1119 | if (priv->probe_crc) { |
1120 | if (!priv->wep_is_on || !(frame_ctl & IEEE80211_FCTL_WEP)) { | 1120 | if (!priv->wep_is_on || !(frame_ctl & IEEE80211_FCTL_PROTECTED)) { |
1121 | priv->do_rx_crc = probe_crc(priv, rx_packet_loc, msdu_size); | 1121 | priv->do_rx_crc = probe_crc(priv, rx_packet_loc, msdu_size); |
1122 | } else { | 1122 | } else { |
1123 | priv->do_rx_crc = probe_crc(priv, rx_packet_loc + 24, msdu_size - 24); | 1123 | priv->do_rx_crc = probe_crc(priv, rx_packet_loc + 24, msdu_size - 24); |
@@ -1132,7 +1132,7 @@ static void rx_done_irq(struct atmel_private *priv) | |||
1132 | } | 1132 | } |
1133 | 1133 | ||
1134 | /* don't CRC header when WEP in use */ | 1134 | /* don't CRC header when WEP in use */ |
1135 | if (priv->do_rx_crc && (!priv->wep_is_on || !(frame_ctl & IEEE80211_FCTL_WEP))) { | 1135 | if (priv->do_rx_crc && (!priv->wep_is_on || !(frame_ctl & IEEE80211_FCTL_PROTECTED))) { |
1136 | crc = crc32_le(0xffffffff, (unsigned char *)&header, 24); | 1136 | crc = crc32_le(0xffffffff, (unsigned char *)&header, 24); |
1137 | } | 1137 | } |
1138 | msdu_size -= 24; /* header */ | 1138 | msdu_size -= 24; /* header */ |
@@ -2677,7 +2677,7 @@ static void send_authentication_request(struct atmel_private *priv, u8 *challeng | |||
2677 | auth.alg = cpu_to_le16(C80211_MGMT_AAN_SHAREDKEY); | 2677 | auth.alg = cpu_to_le16(C80211_MGMT_AAN_SHAREDKEY); |
2678 | /* no WEP for authentication frames with TrSeqNo 1 */ | 2678 | /* no WEP for authentication frames with TrSeqNo 1 */ |
2679 | if (priv->CurrentAuthentTransactionSeqNum != 1) | 2679 | if (priv->CurrentAuthentTransactionSeqNum != 1) |
2680 | header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_WEP); | 2680 | header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); |
2681 | } else { | 2681 | } else { |
2682 | auth.alg = cpu_to_le16(C80211_MGMT_AAN_OPENSYSTEM); | 2682 | auth.alg = cpu_to_le16(C80211_MGMT_AAN_OPENSYSTEM); |
2683 | } | 2683 | } |
diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h index 185423c6d22e..1feb3fb8914c 100644 --- a/include/net/ieee80211.h +++ b/include/net/ieee80211.h | |||
@@ -112,8 +112,8 @@ struct eapol { | |||
112 | #define IEEE80211_FCTL_MOREFRAGS 0x0400 | 112 | #define IEEE80211_FCTL_MOREFRAGS 0x0400 |
113 | #define IEEE80211_FCTL_RETRY 0x0800 | 113 | #define IEEE80211_FCTL_RETRY 0x0800 |
114 | #define IEEE80211_FCTL_PM 0x1000 | 114 | #define IEEE80211_FCTL_PM 0x1000 |
115 | #define IEEE80211_FCTL_MOREDATA 0x2000 | 115 | #define IEEE80211_FCTL_MOREDATA 0x2000 |
116 | #define IEEE80211_FCTL_WEP 0x4000 | 116 | #define IEEE80211_FCTL_PROTECTED 0x4000 |
117 | #define IEEE80211_FCTL_ORDER 0x8000 | 117 | #define IEEE80211_FCTL_ORDER 0x8000 |
118 | 118 | ||
119 | #define IEEE80211_FTYPE_MGMT 0x0000 | 119 | #define IEEE80211_FTYPE_MGMT 0x0000 |
@@ -132,6 +132,7 @@ struct eapol { | |||
132 | #define IEEE80211_STYPE_DISASSOC 0x00A0 | 132 | #define IEEE80211_STYPE_DISASSOC 0x00A0 |
133 | #define IEEE80211_STYPE_AUTH 0x00B0 | 133 | #define IEEE80211_STYPE_AUTH 0x00B0 |
134 | #define IEEE80211_STYPE_DEAUTH 0x00C0 | 134 | #define IEEE80211_STYPE_DEAUTH 0x00C0 |
135 | #define IEEE80211_STYPE_ACTION 0x00D0 | ||
135 | 136 | ||
136 | /* control */ | 137 | /* control */ |
137 | #define IEEE80211_STYPE_PSPOLL 0x00A0 | 138 | #define IEEE80211_STYPE_PSPOLL 0x00A0 |
@@ -263,6 +264,7 @@ struct ieee80211_snap_hdr { | |||
263 | 264 | ||
264 | #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) | 265 | #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) |
265 | 266 | ||
267 | #define WLAN_FC_GET_VERS(fc) ((fc) & IEEE80211_FCTL_VERS) | ||
266 | #define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) | 268 | #define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) |
267 | #define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) | 269 | #define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) |
268 | 270 | ||
@@ -283,6 +285,9 @@ struct ieee80211_snap_hdr { | |||
283 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) | 285 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) |
284 | #define WLAN_CAPABILITY_PBCC (1<<6) | 286 | #define WLAN_CAPABILITY_PBCC (1<<6) |
285 | #define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) | 287 | #define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) |
288 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) | ||
289 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) | ||
290 | #define WLAN_CAPABILITY_OSSS_OFDM (1<<13) | ||
286 | 291 | ||
287 | /* Status codes */ | 292 | /* Status codes */ |
288 | #define WLAN_STATUS_SUCCESS 0 | 293 | #define WLAN_STATUS_SUCCESS 0 |
@@ -297,9 +302,24 @@ struct ieee80211_snap_hdr { | |||
297 | #define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17 | 302 | #define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17 |
298 | #define WLAN_STATUS_ASSOC_DENIED_RATES 18 | 303 | #define WLAN_STATUS_ASSOC_DENIED_RATES 18 |
299 | /* 802.11b */ | 304 | /* 802.11b */ |
300 | #define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19 | 305 | #define WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE 19 |
301 | #define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20 | 306 | #define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20 |
302 | #define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21 | 307 | #define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21 |
308 | /* 802.11h */ | ||
309 | #define WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM 22 | ||
310 | #define WLAN_STATUS_ASSOC_REJECTED_BAD_POWER 23 | ||
311 | #define WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN 24 | ||
312 | /* 802.11g */ | ||
313 | #define WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME 25 | ||
314 | #define WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM 26 | ||
315 | /* 802.11i */ | ||
316 | #define WLAN_STATUS_INVALID_IE 40 | ||
317 | #define WLAN_STATUS_INVALID_GROUP_CIPHER 41 | ||
318 | #define WLAN_STATUS_INVALID_PAIRWISE_CIPHER 42 | ||
319 | #define WLAN_STATUS_INVALID_AKMP 43 | ||
320 | #define WLAN_STATUS_UNSUPP_RSN_VERSION 44 | ||
321 | #define WLAN_STATUS_INVALID_RSN_IE_CAP 45 | ||
322 | #define WLAN_STATUS_CIPHER_SUITE_REJECTED 46 | ||
303 | 323 | ||
304 | /* Reason codes */ | 324 | /* Reason codes */ |
305 | #define WLAN_REASON_UNSPECIFIED 1 | 325 | #define WLAN_REASON_UNSPECIFIED 1 |
@@ -311,6 +331,22 @@ struct ieee80211_snap_hdr { | |||
311 | #define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7 | 331 | #define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7 |
312 | #define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8 | 332 | #define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8 |
313 | #define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 | 333 | #define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 |
334 | /* 802.11h */ | ||
335 | #define WLAN_REASON_DISASSOC_BAD_POWER 10 | ||
336 | #define WLAN_REASON_DISASSOC_BAD_SUPP_CHAN 11 | ||
337 | /* 802.11i */ | ||
338 | #define WLAN_REASON_INVALID_IE 13 | ||
339 | #define WLAN_REASON_MIC_FAILURE 14 | ||
340 | #define WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT 15 | ||
341 | #define WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT 16 | ||
342 | #define WLAN_REASON_IE_DIFFERENT 17 | ||
343 | #define WLAN_REASON_INVALID_GROUP_CIPHER 18 | ||
344 | #define WLAN_REASON_INVALID_PAIRWISE_CIPHER 19 | ||
345 | #define WLAN_REASON_INVALID_AKMP 20 | ||
346 | #define WLAN_REASON_UNSUPP_RSN_VERSION 21 | ||
347 | #define WLAN_REASON_INVALID_RSN_IE_CAP 22 | ||
348 | #define WLAN_REASON_IEEE8021X_FAILED 23 | ||
349 | #define WLAN_REASON_CIPHER_SUITE_REJECTED 24 | ||
314 | 350 | ||
315 | 351 | ||
316 | #define IEEE80211_STATMASK_SIGNAL (1<<0) | 352 | #define IEEE80211_STATMASK_SIGNAL (1<<0) |
@@ -489,17 +525,32 @@ Total: 28-2340 bytes | |||
489 | #define BEACON_PROBE_SSID_ID_POSITION 12 | 525 | #define BEACON_PROBE_SSID_ID_POSITION 12 |
490 | 526 | ||
491 | /* Management Frame Information Element Types */ | 527 | /* Management Frame Information Element Types */ |
492 | #define MFIE_TYPE_SSID 0 | 528 | #define MFIE_TYPE_SSID 0 |
493 | #define MFIE_TYPE_RATES 1 | 529 | #define MFIE_TYPE_RATES 1 |
494 | #define MFIE_TYPE_FH_SET 2 | 530 | #define MFIE_TYPE_FH_SET 2 |
495 | #define MFIE_TYPE_DS_SET 3 | 531 | #define MFIE_TYPE_DS_SET 3 |
496 | #define MFIE_TYPE_CF_SET 4 | 532 | #define MFIE_TYPE_CF_SET 4 |
497 | #define MFIE_TYPE_TIM 5 | 533 | #define MFIE_TYPE_TIM 5 |
498 | #define MFIE_TYPE_IBSS_SET 6 | 534 | #define MFIE_TYPE_IBSS_SET 6 |
499 | #define MFIE_TYPE_CHALLENGE 16 | 535 | #define MFIE_TYPE_COUNTRY 7 |
500 | #define MFIE_TYPE_RSN 48 | 536 | #define MFIE_TYPE_HOP_PARAMS 8 |
501 | #define MFIE_TYPE_RATES_EX 50 | 537 | #define MFIE_TYPE_HOP_TABLE 9 |
502 | #define MFIE_TYPE_GENERIC 221 | 538 | #define MFIE_TYPE_REQUEST 10 |
539 | #define MFIE_TYPE_CHALLENGE 16 | ||
540 | #define MFIE_TYPE_POWER_CONSTRAINT 32 | ||
541 | #define MFIE_TYPE_POWER_CAPABILITY 33 | ||
542 | #define MFIE_TYPE_TPC_REQUEST 34 | ||
543 | #define MFIE_TYPE_TPC_REPORT 35 | ||
544 | #define MFIE_TYPE_SUPP_CHANNELS 36 | ||
545 | #define MFIE_TYPE_CSA 37 | ||
546 | #define MFIE_TYPE_MEASURE_REQUEST 38 | ||
547 | #define MFIE_TYPE_MEASURE_REPORT 39 | ||
548 | #define MFIE_TYPE_QUIET 40 | ||
549 | #define MFIE_TYPE_IBSS_DFS 41 | ||
550 | #define MFIE_TYPE_ERP_INFO 42 | ||
551 | #define MFIE_TYPE_RSN 48 | ||
552 | #define MFIE_TYPE_RATES_EX 50 | ||
553 | #define MFIE_TYPE_GENERIC 221 | ||
503 | 554 | ||
504 | struct ieee80211_info_element_hdr { | 555 | struct ieee80211_info_element_hdr { |
505 | u8 id; | 556 | u8 id; |
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c index 0dd102993ef4..9505f3167aeb 100644 --- a/net/ieee80211/ieee80211_rx.c +++ b/net/ieee80211/ieee80211_rx.c | |||
@@ -439,7 +439,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
439 | crypt->ops->decrypt_mpdu == NULL)) | 439 | crypt->ops->decrypt_mpdu == NULL)) |
440 | crypt = NULL; | 440 | crypt = NULL; |
441 | 441 | ||
442 | if (!crypt && (fc & IEEE80211_FCTL_WEP)) { | 442 | if (!crypt && (fc & IEEE80211_FCTL_PROTECTED)) { |
443 | /* This seems to be triggered by some (multicast?) | 443 | /* This seems to be triggered by some (multicast?) |
444 | * frames from other than current BSS, so just drop the | 444 | * frames from other than current BSS, so just drop the |
445 | * frames silently instead of filling system log with | 445 | * frames silently instead of filling system log with |
@@ -455,7 +455,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
455 | #ifdef NOT_YET | 455 | #ifdef NOT_YET |
456 | if (type != WLAN_FC_TYPE_DATA) { | 456 | if (type != WLAN_FC_TYPE_DATA) { |
457 | if (type == WLAN_FC_TYPE_MGMT && stype == WLAN_FC_STYPE_AUTH && | 457 | if (type == WLAN_FC_TYPE_MGMT && stype == WLAN_FC_STYPE_AUTH && |
458 | fc & IEEE80211_FCTL_WEP && ieee->host_decrypt && | 458 | fc & IEEE80211_FCTL_PROTECTED && ieee->host_decrypt && |
459 | (keyidx = hostap_rx_frame_decrypt(ieee, skb, crypt)) < 0) | 459 | (keyidx = hostap_rx_frame_decrypt(ieee, skb, crypt)) < 0) |
460 | { | 460 | { |
461 | printk(KERN_DEBUG "%s: failed to decrypt mgmt::auth " | 461 | printk(KERN_DEBUG "%s: failed to decrypt mgmt::auth " |
@@ -556,7 +556,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
556 | 556 | ||
557 | /* skb: hdr + (possibly fragmented, possibly encrypted) payload */ | 557 | /* skb: hdr + (possibly fragmented, possibly encrypted) payload */ |
558 | 558 | ||
559 | if (ieee->host_decrypt && (fc & IEEE80211_FCTL_WEP) && | 559 | if (ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) && |
560 | (keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0) | 560 | (keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0) |
561 | goto rx_dropped; | 561 | goto rx_dropped; |
562 | 562 | ||
@@ -564,7 +564,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
564 | 564 | ||
565 | /* skb: hdr + (possibly fragmented) plaintext payload */ | 565 | /* skb: hdr + (possibly fragmented) plaintext payload */ |
566 | // PR: FIXME: hostap has additional conditions in the "if" below: | 566 | // PR: FIXME: hostap has additional conditions in the "if" below: |
567 | // ieee->host_decrypt && (fc & IEEE80211_FCTL_WEP) && | 567 | // ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) && |
568 | if ((frag != 0 || (fc & IEEE80211_FCTL_MOREFRAGS))) { | 568 | if ((frag != 0 || (fc & IEEE80211_FCTL_MOREFRAGS))) { |
569 | int flen; | 569 | int flen; |
570 | struct sk_buff *frag_skb = ieee80211_frag_cache_get(ieee, hdr); | 570 | struct sk_buff *frag_skb = ieee80211_frag_cache_get(ieee, hdr); |
@@ -620,12 +620,12 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
620 | 620 | ||
621 | /* skb: hdr + (possible reassembled) full MSDU payload; possibly still | 621 | /* skb: hdr + (possible reassembled) full MSDU payload; possibly still |
622 | * encrypted/authenticated */ | 622 | * encrypted/authenticated */ |
623 | if (ieee->host_decrypt && (fc & IEEE80211_FCTL_WEP) && | 623 | if (ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) && |
624 | ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) | 624 | ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) |
625 | goto rx_dropped; | 625 | goto rx_dropped; |
626 | 626 | ||
627 | hdr = (struct ieee80211_hdr *) skb->data; | 627 | hdr = (struct ieee80211_hdr *) skb->data; |
628 | if (crypt && !(fc & IEEE80211_FCTL_WEP) && !ieee->open_wep) { | 628 | if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep) { |
629 | if (/*ieee->ieee802_1x &&*/ | 629 | if (/*ieee->ieee802_1x &&*/ |
630 | ieee80211_is_eapol_frame(ieee, skb)) { | 630 | ieee80211_is_eapol_frame(ieee, skb)) { |
631 | #ifdef CONFIG_IEEE80211_DEBUG | 631 | #ifdef CONFIG_IEEE80211_DEBUG |
@@ -646,7 +646,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
646 | } | 646 | } |
647 | 647 | ||
648 | #ifdef CONFIG_IEEE80211_DEBUG | 648 | #ifdef CONFIG_IEEE80211_DEBUG |
649 | if (crypt && !(fc & IEEE80211_FCTL_WEP) && | 649 | if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && |
650 | ieee80211_is_eapol_frame(ieee, skb)) { | 650 | ieee80211_is_eapol_frame(ieee, skb)) { |
651 | struct eapol *eap = (struct eapol *)(skb->data + | 651 | struct eapol *eap = (struct eapol *)(skb->data + |
652 | 24); | 652 | 24); |
@@ -655,7 +655,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
655 | } | 655 | } |
656 | #endif | 656 | #endif |
657 | 657 | ||
658 | if (crypt && !(fc & IEEE80211_FCTL_WEP) && !ieee->open_wep && | 658 | if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep && |
659 | !ieee80211_is_eapol_frame(ieee, skb)) { | 659 | !ieee80211_is_eapol_frame(ieee, skb)) { |
660 | IEEE80211_DEBUG_DROP( | 660 | IEEE80211_DEBUG_DROP( |
661 | "dropped unencrypted RX data " | 661 | "dropped unencrypted RX data " |
diff --git a/net/ieee80211/ieee80211_tx.c b/net/ieee80211/ieee80211_tx.c index d1049edcd14d..071d093f2989 100644 --- a/net/ieee80211/ieee80211_tx.c +++ b/net/ieee80211/ieee80211_tx.c | |||
@@ -313,7 +313,7 @@ int ieee80211_xmit(struct sk_buff *skb, | |||
313 | 313 | ||
314 | if (encrypt) | 314 | if (encrypt) |
315 | fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA | | 315 | fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA | |
316 | IEEE80211_FCTL_WEP; | 316 | IEEE80211_FCTL_PROTECTED; |
317 | else | 317 | else |
318 | fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA; | 318 | fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA; |
319 | 319 | ||