aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Benc <jbenc@suse.cz>2005-08-25 20:11:46 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-08-25 20:11:46 -0400
commitf13baae43e97e84d3f06080908db75a017c62165 (patch)
treef1611a5418f2c9790d99017b1cd001fc3a065d0b
parent8d45ff7d7bd85d9066f5b498cda5c4a52ac36a7f (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.c8
-rw-r--r--include/net/ieee80211.h79
-rw-r--r--net/ieee80211/ieee80211_rx.c16
-rw-r--r--net/ieee80211/ieee80211_tx.c2
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
504struct ieee80211_info_element_hdr { 555struct 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