diff options
Diffstat (limited to 'include/net/ieee80211.h')
-rw-r--r-- | include/net/ieee80211.h | 214 |
1 files changed, 128 insertions, 86 deletions
diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h index 51a20b5f3b5d..8bc126938cd4 100644 --- a/include/net/ieee80211.h +++ b/include/net/ieee80211.h | |||
@@ -47,22 +47,22 @@ | |||
47 | #define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN) | 47 | #define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN) |
48 | 48 | ||
49 | struct ieee80211_hdr { | 49 | struct ieee80211_hdr { |
50 | u16 frame_ctl; | 50 | __le16 frame_ctl; |
51 | u16 duration_id; | 51 | __le16 duration_id; |
52 | u8 addr1[ETH_ALEN]; | 52 | u8 addr1[ETH_ALEN]; |
53 | u8 addr2[ETH_ALEN]; | 53 | u8 addr2[ETH_ALEN]; |
54 | u8 addr3[ETH_ALEN]; | 54 | u8 addr3[ETH_ALEN]; |
55 | u16 seq_ctl; | 55 | __le16 seq_ctl; |
56 | u8 addr4[ETH_ALEN]; | 56 | u8 addr4[ETH_ALEN]; |
57 | } __attribute__ ((packed)); | 57 | } __attribute__ ((packed)); |
58 | 58 | ||
59 | struct ieee80211_hdr_3addr { | 59 | struct ieee80211_hdr_3addr { |
60 | u16 frame_ctl; | 60 | __le16 frame_ctl; |
61 | u16 duration_id; | 61 | __le16 duration_id; |
62 | u8 addr1[ETH_ALEN]; | 62 | u8 addr1[ETH_ALEN]; |
63 | u8 addr2[ETH_ALEN]; | 63 | u8 addr2[ETH_ALEN]; |
64 | u8 addr3[ETH_ALEN]; | 64 | u8 addr3[ETH_ALEN]; |
65 | u16 seq_ctl; | 65 | __le16 seq_ctl; |
66 | } __attribute__ ((packed)); | 66 | } __attribute__ ((packed)); |
67 | 67 | ||
68 | enum eap_type { | 68 | enum eap_type { |
@@ -88,10 +88,10 @@ static inline const char *eap_get_type(int type) | |||
88 | 88 | ||
89 | struct eapol { | 89 | struct eapol { |
90 | u8 snap[6]; | 90 | u8 snap[6]; |
91 | u16 ethertype; | 91 | __be16 ethertype; |
92 | u8 version; | 92 | u8 version; |
93 | u8 type; | 93 | u8 type; |
94 | u16 length; | 94 | __be16 length; |
95 | } __attribute__ ((packed)); | 95 | } __attribute__ ((packed)); |
96 | 96 | ||
97 | #define IEEE80211_1ADDR_LEN 10 | 97 | #define IEEE80211_1ADDR_LEN 10 |
@@ -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 |
@@ -167,8 +168,19 @@ do { if (ieee80211_debug_level & (level)) \ | |||
167 | #define IEEE80211_DEBUG(level, fmt, args...) do {} while (0) | 168 | #define IEEE80211_DEBUG(level, fmt, args...) do {} while (0) |
168 | #endif /* CONFIG_IEEE80211_DEBUG */ | 169 | #endif /* CONFIG_IEEE80211_DEBUG */ |
169 | 170 | ||
171 | |||
172 | /* debug macros not dependent on CONFIG_IEEE80211_DEBUG */ | ||
173 | |||
174 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" | ||
175 | #define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5] | ||
176 | |||
177 | /* escape_essid() is intended to be used in debug (and possibly error) | ||
178 | * messages. It should never be used for passing essid to user space. */ | ||
179 | const char *escape_essid(const char *essid, u8 essid_len); | ||
180 | |||
181 | |||
170 | /* | 182 | /* |
171 | * To use the debug system; | 183 | * To use the debug system: |
172 | * | 184 | * |
173 | * If you are defining a new debug classification, simply add it to the #define | 185 | * If you are defining a new debug classification, simply add it to the #define |
174 | * list here in the form of: | 186 | * list here in the form of: |
@@ -223,9 +235,9 @@ do { if (ieee80211_debug_level & (level)) \ | |||
223 | #include <linux/if_arp.h> /* ARPHRD_ETHER */ | 235 | #include <linux/if_arp.h> /* ARPHRD_ETHER */ |
224 | 236 | ||
225 | #ifndef WIRELESS_SPY | 237 | #ifndef WIRELESS_SPY |
226 | #define WIRELESS_SPY // enable iwspy support | 238 | #define WIRELESS_SPY /* enable iwspy support */ |
227 | #endif | 239 | #endif |
228 | #include <net/iw_handler.h> // new driver API | 240 | #include <net/iw_handler.h> /* new driver API */ |
229 | 241 | ||
230 | #ifndef ETH_P_PAE | 242 | #ifndef ETH_P_PAE |
231 | #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ | 243 | #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ |
@@ -252,6 +264,7 @@ struct ieee80211_snap_hdr { | |||
252 | 264 | ||
253 | #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) | 265 | #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) |
254 | 266 | ||
267 | #define WLAN_FC_GET_VERS(fc) ((fc) & IEEE80211_FCTL_VERS) | ||
255 | #define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) | 268 | #define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) |
256 | #define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) | 269 | #define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) |
257 | 270 | ||
@@ -272,34 +285,72 @@ struct ieee80211_snap_hdr { | |||
272 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) | 285 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) |
273 | #define WLAN_CAPABILITY_PBCC (1<<6) | 286 | #define WLAN_CAPABILITY_PBCC (1<<6) |
274 | #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) | ||
275 | 291 | ||
276 | /* Status codes */ | 292 | /* Status codes */ |
277 | #define WLAN_STATUS_SUCCESS 0 | 293 | enum ieee80211_statuscode { |
278 | #define WLAN_STATUS_UNSPECIFIED_FAILURE 1 | 294 | WLAN_STATUS_SUCCESS = 0, |
279 | #define WLAN_STATUS_CAPS_UNSUPPORTED 10 | 295 | WLAN_STATUS_UNSPECIFIED_FAILURE = 1, |
280 | #define WLAN_STATUS_REASSOC_NO_ASSOC 11 | 296 | WLAN_STATUS_CAPS_UNSUPPORTED = 10, |
281 | #define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12 | 297 | WLAN_STATUS_REASSOC_NO_ASSOC = 11, |
282 | #define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13 | 298 | WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12, |
283 | #define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14 | 299 | WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13, |
284 | #define WLAN_STATUS_CHALLENGE_FAIL 15 | 300 | WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14, |
285 | #define WLAN_STATUS_AUTH_TIMEOUT 16 | 301 | WLAN_STATUS_CHALLENGE_FAIL = 15, |
286 | #define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17 | 302 | WLAN_STATUS_AUTH_TIMEOUT = 16, |
287 | #define WLAN_STATUS_ASSOC_DENIED_RATES 18 | 303 | WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17, |
288 | /* 802.11b */ | 304 | WLAN_STATUS_ASSOC_DENIED_RATES = 18, |
289 | #define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19 | 305 | /* 802.11b */ |
290 | #define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20 | 306 | WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19, |
291 | #define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21 | 307 | WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20, |
308 | WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21, | ||
309 | /* 802.11h */ | ||
310 | WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22, | ||
311 | WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23, | ||
312 | WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24, | ||
313 | /* 802.11g */ | ||
314 | WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, | ||
315 | WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, | ||
316 | /* 802.11i */ | ||
317 | WLAN_STATUS_INVALID_IE = 40, | ||
318 | WLAN_STATUS_INVALID_GROUP_CIPHER = 41, | ||
319 | WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42, | ||
320 | WLAN_STATUS_INVALID_AKMP = 43, | ||
321 | WLAN_STATUS_UNSUPP_RSN_VERSION = 44, | ||
322 | WLAN_STATUS_INVALID_RSN_IE_CAP = 45, | ||
323 | WLAN_STATUS_CIPHER_SUITE_REJECTED = 46, | ||
324 | }; | ||
292 | 325 | ||
293 | /* Reason codes */ | 326 | /* Reason codes */ |
294 | #define WLAN_REASON_UNSPECIFIED 1 | 327 | enum ieee80211_reasoncode { |
295 | #define WLAN_REASON_PREV_AUTH_NOT_VALID 2 | 328 | WLAN_REASON_UNSPECIFIED = 1, |
296 | #define WLAN_REASON_DEAUTH_LEAVING 3 | 329 | WLAN_REASON_PREV_AUTH_NOT_VALID = 2, |
297 | #define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4 | 330 | WLAN_REASON_DEAUTH_LEAVING = 3, |
298 | #define WLAN_REASON_DISASSOC_AP_BUSY 5 | 331 | WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4, |
299 | #define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6 | 332 | WLAN_REASON_DISASSOC_AP_BUSY = 5, |
300 | #define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7 | 333 | WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6, |
301 | #define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8 | 334 | WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7, |
302 | #define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 | 335 | WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8, |
336 | WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9, | ||
337 | /* 802.11h */ | ||
338 | WLAN_REASON_DISASSOC_BAD_POWER = 10, | ||
339 | WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11, | ||
340 | /* 802.11i */ | ||
341 | WLAN_REASON_INVALID_IE = 13, | ||
342 | WLAN_REASON_MIC_FAILURE = 14, | ||
343 | WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, | ||
344 | WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16, | ||
345 | WLAN_REASON_IE_DIFFERENT = 17, | ||
346 | WLAN_REASON_INVALID_GROUP_CIPHER = 18, | ||
347 | WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19, | ||
348 | WLAN_REASON_INVALID_AKMP = 20, | ||
349 | WLAN_REASON_UNSUPP_RSN_VERSION = 21, | ||
350 | WLAN_REASON_INVALID_RSN_IE_CAP = 22, | ||
351 | WLAN_REASON_IEEE8021X_FAILED = 23, | ||
352 | WLAN_REASON_CIPHER_SUITE_REJECTED = 24, | ||
353 | }; | ||
303 | 354 | ||
304 | 355 | ||
305 | #define IEEE80211_STATMASK_SIGNAL (1<<0) | 356 | #define IEEE80211_STATMASK_SIGNAL (1<<0) |
@@ -478,17 +529,34 @@ Total: 28-2340 bytes | |||
478 | #define BEACON_PROBE_SSID_ID_POSITION 12 | 529 | #define BEACON_PROBE_SSID_ID_POSITION 12 |
479 | 530 | ||
480 | /* Management Frame Information Element Types */ | 531 | /* Management Frame Information Element Types */ |
481 | #define MFIE_TYPE_SSID 0 | 532 | enum ieee80211_mfie { |
482 | #define MFIE_TYPE_RATES 1 | 533 | MFIE_TYPE_SSID = 0, |
483 | #define MFIE_TYPE_FH_SET 2 | 534 | MFIE_TYPE_RATES = 1, |
484 | #define MFIE_TYPE_DS_SET 3 | 535 | MFIE_TYPE_FH_SET = 2, |
485 | #define MFIE_TYPE_CF_SET 4 | 536 | MFIE_TYPE_DS_SET = 3, |
486 | #define MFIE_TYPE_TIM 5 | 537 | MFIE_TYPE_CF_SET = 4, |
487 | #define MFIE_TYPE_IBSS_SET 6 | 538 | MFIE_TYPE_TIM = 5, |
488 | #define MFIE_TYPE_CHALLENGE 16 | 539 | MFIE_TYPE_IBSS_SET = 6, |
489 | #define MFIE_TYPE_RSN 48 | 540 | MFIE_TYPE_COUNTRY = 7, |
490 | #define MFIE_TYPE_RATES_EX 50 | 541 | MFIE_TYPE_HOP_PARAMS = 8, |
491 | #define MFIE_TYPE_GENERIC 221 | 542 | MFIE_TYPE_HOP_TABLE = 9, |
543 | MFIE_TYPE_REQUEST = 10, | ||
544 | MFIE_TYPE_CHALLENGE = 16, | ||
545 | MFIE_TYPE_POWER_CONSTRAINT = 32, | ||
546 | MFIE_TYPE_POWER_CAPABILITY = 33, | ||
547 | MFIE_TYPE_TPC_REQUEST = 34, | ||
548 | MFIE_TYPE_TPC_REPORT = 35, | ||
549 | MFIE_TYPE_SUPP_CHANNELS = 36, | ||
550 | MFIE_TYPE_CSA = 37, | ||
551 | MFIE_TYPE_MEASURE_REQUEST = 38, | ||
552 | MFIE_TYPE_MEASURE_REPORT = 39, | ||
553 | MFIE_TYPE_QUIET = 40, | ||
554 | MFIE_TYPE_IBSS_DFS = 41, | ||
555 | MFIE_TYPE_ERP_INFO = 42, | ||
556 | MFIE_TYPE_RSN = 48, | ||
557 | MFIE_TYPE_RATES_EX = 50, | ||
558 | MFIE_TYPE_GENERIC = 221, | ||
559 | }; | ||
492 | 560 | ||
493 | struct ieee80211_info_element_hdr { | 561 | struct ieee80211_info_element_hdr { |
494 | u8 id; | 562 | u8 id; |
@@ -520,9 +588,9 @@ struct ieee80211_info_element { | |||
520 | 588 | ||
521 | struct ieee80211_authentication { | 589 | struct ieee80211_authentication { |
522 | struct ieee80211_hdr_3addr header; | 590 | struct ieee80211_hdr_3addr header; |
523 | u16 algorithm; | 591 | __le16 algorithm; |
524 | u16 transaction; | 592 | __le16 transaction; |
525 | u16 status; | 593 | __le16 status; |
526 | struct ieee80211_info_element info_element; | 594 | struct ieee80211_info_element info_element; |
527 | } __attribute__ ((packed)); | 595 | } __attribute__ ((packed)); |
528 | 596 | ||
@@ -530,23 +598,23 @@ struct ieee80211_authentication { | |||
530 | struct ieee80211_probe_response { | 598 | struct ieee80211_probe_response { |
531 | struct ieee80211_hdr_3addr header; | 599 | struct ieee80211_hdr_3addr header; |
532 | u32 time_stamp[2]; | 600 | u32 time_stamp[2]; |
533 | u16 beacon_interval; | 601 | __le16 beacon_interval; |
534 | u16 capability; | 602 | __le16 capability; |
535 | struct ieee80211_info_element info_element; | 603 | struct ieee80211_info_element info_element; |
536 | } __attribute__ ((packed)); | 604 | } __attribute__ ((packed)); |
537 | 605 | ||
538 | struct ieee80211_assoc_request_frame { | 606 | struct ieee80211_assoc_request_frame { |
539 | u16 capability; | 607 | __le16 capability; |
540 | u16 listen_interval; | 608 | __le16 listen_interval; |
541 | u8 current_ap[ETH_ALEN]; | 609 | u8 current_ap[ETH_ALEN]; |
542 | struct ieee80211_info_element info_element; | 610 | struct ieee80211_info_element info_element; |
543 | } __attribute__ ((packed)); | 611 | } __attribute__ ((packed)); |
544 | 612 | ||
545 | struct ieee80211_assoc_response_frame { | 613 | struct ieee80211_assoc_response_frame { |
546 | struct ieee80211_hdr_3addr header; | 614 | struct ieee80211_hdr_3addr header; |
547 | u16 capability; | 615 | __le16 capability; |
548 | u16 status; | 616 | __le16 status; |
549 | u16 aid; | 617 | __le16 aid; |
550 | struct ieee80211_info_element info_element; /* supported rates */ | 618 | struct ieee80211_info_element info_element; /* supported rates */ |
551 | } __attribute__ ((packed)); | 619 | } __attribute__ ((packed)); |
552 | 620 | ||
@@ -561,7 +629,7 @@ struct ieee80211_txb { | |||
561 | }; | 629 | }; |
562 | 630 | ||
563 | 631 | ||
564 | /* SWEEP TABLE ENTRIES NUMBER*/ | 632 | /* SWEEP TABLE ENTRIES NUMBER */ |
565 | #define MAX_SWEEP_TAB_ENTRIES 42 | 633 | #define MAX_SWEEP_TAB_ENTRIES 42 |
566 | #define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 | 634 | #define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 |
567 | /* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs | 635 | /* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs |
@@ -622,8 +690,6 @@ enum ieee80211_state { | |||
622 | 690 | ||
623 | #define DEFAULT_MAX_SCAN_AGE (15 * HZ) | 691 | #define DEFAULT_MAX_SCAN_AGE (15 * HZ) |
624 | #define DEFAULT_FTS 2346 | 692 | #define DEFAULT_FTS 2346 |
625 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" | ||
626 | #define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5] | ||
627 | 693 | ||
628 | 694 | ||
629 | #define CFG_IEEE80211_RESERVE_FCS (1<<0) | 695 | #define CFG_IEEE80211_RESERVE_FCS (1<<0) |
@@ -791,8 +857,6 @@ extern struct net_device *alloc_ieee80211(int sizeof_priv); | |||
791 | extern int ieee80211_set_encryption(struct ieee80211_device *ieee); | 857 | extern int ieee80211_set_encryption(struct ieee80211_device *ieee); |
792 | 858 | ||
793 | /* ieee80211_tx.c */ | 859 | /* ieee80211_tx.c */ |
794 | |||
795 | |||
796 | extern int ieee80211_xmit(struct sk_buff *skb, | 860 | extern int ieee80211_xmit(struct sk_buff *skb, |
797 | struct net_device *dev); | 861 | struct net_device *dev); |
798 | extern void ieee80211_txb_free(struct ieee80211_txb *); | 862 | extern void ieee80211_txb_free(struct ieee80211_txb *); |
@@ -805,7 +869,7 @@ extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, | |||
805 | struct ieee80211_hdr *header, | 869 | struct ieee80211_hdr *header, |
806 | struct ieee80211_rx_stats *stats); | 870 | struct ieee80211_rx_stats *stats); |
807 | 871 | ||
808 | /* iee80211_wx.c */ | 872 | /* ieee80211_wx.c */ |
809 | extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, | 873 | extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, |
810 | struct iw_request_info *info, | 874 | struct iw_request_info *info, |
811 | union iwreq_data *wrqu, char *key); | 875 | union iwreq_data *wrqu, char *key); |
@@ -827,27 +891,5 @@ extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) | |||
827 | return ieee->scans; | 891 | return ieee->scans; |
828 | } | 892 | } |
829 | 893 | ||
830 | static inline const char *escape_essid(const char *essid, u8 essid_len) { | ||
831 | static char escaped[IW_ESSID_MAX_SIZE * 2 + 1]; | ||
832 | const char *s = essid; | ||
833 | char *d = escaped; | ||
834 | |||
835 | if (ieee80211_is_empty_essid(essid, essid_len)) { | ||
836 | memcpy(escaped, "<hidden>", sizeof("<hidden>")); | ||
837 | return escaped; | ||
838 | } | ||
839 | 894 | ||
840 | essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE); | ||
841 | while (essid_len--) { | ||
842 | if (*s == '\0') { | ||
843 | *d++ = '\\'; | ||
844 | *d++ = '0'; | ||
845 | s++; | ||
846 | } else { | ||
847 | *d++ = *s++; | ||
848 | } | ||
849 | } | ||
850 | *d = '\0'; | ||
851 | return escaped; | ||
852 | } | ||
853 | #endif /* IEEE80211_H */ | 895 | #endif /* IEEE80211_H */ |