Michael Wu wrote:
airo: Switch to d80211.h

This patch "converts" the airo driver to use d80211.h instead of
ieee80211.h. It also adds struct ieee80211_info_element and
modifies d80211 to use that.

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

 drivers/net/wireless/airo.c |   15 ++++----
 include/net/d80211.h        |    6 +++
 net/d80211/ieee80211_sta.c  |   85 +++++++++++++++++++++----------------------
 3 files changed, 54 insertions(+), 52 deletions(-)

diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index a4dd139..c08767a 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -46,7 +46,8 @@ #include <linux/if_arp.h>
 #include <linux/ioport.h>
 #include <linux/pci.h>
 #include <asm/uaccess.h>
-#include <net/ieee80211.h>
+#include <net/d80211.h>
+#include <net/d80211_mgmt.h>
#include "airo.h" @@ -7317,31 +7318,29 @@ static inline char *airo_translate_scan(
                        }
switch (info_element->id) {
-                       case MFIE_TYPE_SSID:
+                       case WLAN_EID_SSID:
                                /* Two zero-length SSID elements
                                 * mean we're done parsing elements */
                                if (!info_element->len)
                                        num_null_ies++;
                                break;
- case MFIE_TYPE_GENERIC:
+                       case WLAN_EID_GENERIC:
                                if (info_element->len >= 4 &&
                                    info_element->data[0] == 0x00 &&
                                    info_element->data[1] == 0x50 &&
                                    info_element->data[2] == 0xf2 &&
                                    info_element->data[3] == 0x01) {
                                        iwe.cmd = IWEVGENIE;
-                                       iwe.u.data.length = 
min(info_element->len + 2,
-                                                                 
MAX_WPA_IE_LEN);
+                                       iwe.u.data.length = 
min(info_element->len + 2, 64);

nak:  converts named constant to magic number


                                        current_ev = 
iwe_stream_add_point(current_ev, end_buf,
                                                        &iwe, (char *) 
info_element);
                                }
                                break;
- case MFIE_TYPE_RSN:
+                       case WLAN_EID_RSN:
                                iwe.cmd = IWEVGENIE;
-                               iwe.u.data.length = min(info_element->len + 2,
-                                                         MAX_WPA_IE_LEN);
+                               iwe.u.data.length = min(info_element->len + 2, 
64);

ditto


                                current_ev = iwe_stream_add_point(current_ev, 
end_buf,
                                                &iwe, (char *) info_element);
                                break;
diff --git a/include/net/d80211.h b/include/net/d80211.h
index 6bf1b08..10ef570 100644
--- a/include/net/d80211.h
+++ b/include/net/d80211.h
@@ -977,6 +977,12 @@ struct ieee80211_hdr {
        u8 addr4[6];
 } __attribute__ ((packed));
+struct ieee80211_info_element {
+       u8 id;
+       u8 len;
+       u8 data[0];
+} __attribute__ ((packed));
+
 /* return a pointer to the source address (SA) */
 static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr)
 {
diff --git a/net/d80211/ieee80211_sta.c b/net/d80211/ieee80211_sta.c
index b0cfff1..d206b16 100644
--- a/net/d80211/ieee80211_sta.c
+++ b/net/d80211/ieee80211_sta.c
@@ -110,91 +110,88 @@ static ParseRes ieee802_11_parse_elems(u
                                       struct ieee802_11_elems *elems)
 {
        size_t left = len;
-       u8 *pos = start;
+       struct ieee80211_info_element *info = (struct ieee80211_info_element *) 
start;
        int unknown = 0;
memset(elems, 0, sizeof(*elems)); while (left >= 2) {
-               u8 id, elen;
-
-               id = *pos++;
-               elen = *pos++;
                left -= 2;
- if (elen > left) {
+               if (info->len > left) {
 #if 0
                        if (net_ratelimit())
                                printk(KERN_DEBUG "IEEE 802.11 element parse "
                                       "failed (id=%d elen=%d left=%d)\n",
-                                      id, elen, left);
+                                      info->id, info->len, left);
 #endif
                        return ParseFailed;
                }
- switch (id) {
+               switch (info->id) {
                case WLAN_EID_SSID:
-                       elems->ssid = pos;
-                       elems->ssid_len = elen;
+                       elems->ssid = info->data;
+                       elems->ssid_len = info->len;
                        break;
                case WLAN_EID_SUPP_RATES:
-                       elems->supp_rates = pos;
-                       elems->supp_rates_len = elen;
+                       elems->supp_rates = info->data;
+                       elems->supp_rates_len = info->len;
                        break;
                case WLAN_EID_FH_PARAMS:
-                       elems->fh_params = pos;
-                       elems->fh_params_len = elen;
+                       elems->fh_params = info->data;
+                       elems->fh_params_len = info->len;
                        break;
                case WLAN_EID_DS_PARAMS:
-                       elems->ds_params = pos;
-                       elems->ds_params_len = elen;
+                       elems->ds_params = info->data;
+                       elems->ds_params_len = info->len;
                        break;
                case WLAN_EID_CF_PARAMS:
-                       elems->cf_params = pos;
-                       elems->cf_params_len = elen;
+                       elems->cf_params = info->data;
+                       elems->cf_params_len = info->len;
                        break;
                case WLAN_EID_TIM:
-                       elems->tim = pos;
-                       elems->tim_len = elen;
+                       elems->tim = info->data;
+                       elems->tim_len = info->len;
                        break;
                case WLAN_EID_IBSS_PARAMS:
-                       elems->ibss_params = pos;
-                       elems->ibss_params_len = elen;
+                       elems->ibss_params = info->data;
+                       elems->ibss_params_len = info->len;
                        break;
                case WLAN_EID_CHALLENGE:
-                       elems->challenge = pos;
-                       elems->challenge_len = elen;
+                       elems->challenge = info->data;
+                       elems->challenge_len = info->len;
                        break;
                case WLAN_EID_WPA:
-                       if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 &&
-                           pos[2] == 0xf2) {
+                       if (info->len >= 4 && info->data[0] == 0x00 &&
+                           info->data[1] == 0x50 && info->data[2] == 0xf2) {
                                /* Microsoft OUI (00:50:F2) */
-                               if (pos[3] == 1) {
+                               if (info->data[3] == 1) {
                                        /* OUI Type 1 - WPA IE */
-                                       elems->wpa = pos;
-                                       elems->wpa_len = elen;
-                               } else if (elen >= 5 && pos[3] == 2) {
-                                       if (pos[4] == 0) {
-                                               elems->wmm_info = pos;
-                                               elems->wmm_info_len = elen;
-                                       } else if (pos[4] == 1) {
-                                               elems->wmm_param = pos;
-                                               elems->wmm_param_len = elen;
+                                       elems->wpa = info->data;
+                                       elems->wpa_len = info->len;
+                               } else if (info->len >= 5 &&
+                                          info->data[3] == 2) {
+                                       if (info->data[4] == 0) {
+                                               elems->wmm_info = info->data;
+                                               elems->wmm_info_len = info->len;
+                                       } else if (info->data[4] == 1) {
+                                               elems->wmm_param = info->data;
+                                               elems->wmm_param_len = 
info->len;
                                        }
                                }
                        }
                        break;
                case WLAN_EID_RSN:
-                       elems->rsn = pos;
-                       elems->rsn_len = elen;
+                       elems->rsn = info->data;
+                       elems->rsn_len = info->len;
                        break;
                case WLAN_EID_ERP_INFO:
-                       elems->erp_info = pos;
-                       elems->erp_info_len = elen;
+                       elems->erp_info = info->data;
+                       elems->erp_info_len = info->len;
                        break;
                case WLAN_EID_EXT_SUPP_RATES:
-                       elems->ext_supp_rates = pos;
-                       elems->ext_supp_rates_len = elen;
+                       elems->ext_supp_rates = info->data;
+                       elems->ext_supp_rates_len = info->len;

A lot of this patch would go away, if you simply assigned 'pos' and 'elen' local variables to values info->data and info->len, before all these assignments.

        Jeff


-
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