Hi,

This patch adds more management frame definitions, renames some of the
definitions, and turns info_element into a zero length array.

ieee80211_authentication was renamed to ieee80211_auth for consistency because
association is also abbreviated.

The _frame suffix was not being used throughout, so it was dropped for
consistency.

info_element makes no sense by itself because nobody parses just one IE (well,
except in shared key authentication) and there might not be an IE in the frame.

Signed-off-by: Michael Wu <[EMAIL PROTECTED]>

diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h
--- a/include/net/ieee80211.h
+++ b/include/net/ieee80211.h
@@ -546,38 +546,65 @@ struct ieee80211_info_element {
        u16 status;
 */

-struct ieee80211_authentication {
+struct ieee80211_auth {
        struct ieee80211_hdr_3addr header;
        __le16 algorithm;
        __le16 transaction;
        __le16 status;
-       struct ieee80211_info_element info_element;
+       /* challenge */
+       struct ieee80211_info_element info_element[0];
 } __attribute__ ((packed));

+struct ieee80211_deauth {
+       struct ieee80211_hdr_3addr header;
+       __le16 reason_code;
+} __attribute__ ((packed));
+
+struct ieee80211_probe_request {
+       struct ieee80211_hdr_3addr header;
+       /* SSID, supported rates */
+       struct ieee80211_info_element info_element[0];
+} __attribute__ ((packed));

 struct ieee80211_probe_response {
        struct ieee80211_hdr_3addr header;
        u32 time_stamp[2];
        __le16 beacon_interval;
        __le16 capability;
-       struct ieee80211_info_element info_element;
+       /* SSID, supported rates, FH params, DS params,
+        * CF params, IBSS params, TIM (if beacon), RSN */
+       struct ieee80211_info_element info_element[0];
+} __attribute__ ((packed));
+
+struct ieee80211_assoc_request {
+       struct ieee80211_hdr_3addr header;
+       __le16 capability;
+       __le16 listen_interval;
+       /* SSID, supported rates, RSN */
+       struct ieee80211_info_element info_element[0];
 } __attribute__ ((packed));

-struct ieee80211_assoc_request_frame {
+struct ieee80211_reassoc_request {
+       struct ieee80211_hdr_3addr header;
        __le16 capability;
        __le16 listen_interval;
        u8 current_ap[ETH_ALEN];
-       struct ieee80211_info_element info_element;
+       /* SSID, supported rates, RSN */
+       struct ieee80211_info_element info_element[0];
 } __attribute__ ((packed));

-struct ieee80211_assoc_response_frame {
+struct ieee80211_assoc_response {
        struct ieee80211_hdr_3addr header;
        __le16 capability;
        __le16 status;
        __le16 aid;
-       struct ieee80211_info_element info_element; /* supported rates */
+       /* supported rates */
+       struct ieee80211_info_element info_element[0];
 } __attribute__ ((packed));

+#define ieee80211_disassoc ieee80211_deauth
+#define ieee80211_beacon ieee80211_probe_response
+

 struct ieee80211_txb {
        u8 nr_frags;
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c
--- a/net/ieee80211/ieee80211_rx.c
+++ b/net/ieee80211/ieee80211_rx.c
@@ -827,7 +827,7 @@ static inline int ieee80211_network_init
        network->wpa_ie_len = 0;
        network->rsn_ie_len = 0;

-       info_element = &beacon->info_element;
+       info_element = beacon->info_element;
        left = stats->len - ((void *)info_element - (void *)beacon);
        while (left >= sizeof(struct ieee80211_info_element_hdr)) {
                if (sizeof(struct ieee80211_info_element_hdr) + 
info_element->len > left) {
@@ -1041,7 +1041,7 @@ static inline void ieee80211_process_pro
        struct ieee80211_network *target;
        struct ieee80211_network *oldest = NULL;
 #ifdef CONFIG_IEEE80211_DEBUG
-       struct ieee80211_info_element *info_element = &beacon->info_element;
+       struct ieee80211_info_element *info_element = beacon->info_element;
 #endif
        unsigned long flags;


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to