From: Jeff Garzik <jeff@garzik•org>
To: Michael Wu <flamingice@sourmilk•net>
Cc: linville@tuxdriver•com, Jiri Benc <jbenc@suse•cz>,
netdev@vger•kernel.org
Subject: Re: [PATCH wireless-dev 5/5] airo: Switch to d80211.h
Date: Sun, 23 Jul 2006 23:59:49 -0400 [thread overview]
Message-ID: <44C445B5.1030300@garzik.org> (raw)
In-Reply-To: <200607232050.32467.flamingice@sourmilk.net>
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 <flamingice@sourmilk•net>
> ---
>
> 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
prev parent reply other threads:[~2006-07-24 4:00 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-24 3:50 [PATCH wireless-dev 5/5] airo: Switch to d80211.h Michael Wu
2006-07-24 3:59 ` Jeff Garzik [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44C445B5.1030300@garzik.org \
--to=jeff@garzik$(echo .)org \
--cc=flamingice@sourmilk$(echo .)net \
--cc=jbenc@suse$(echo .)cz \
--cc=linville@tuxdriver$(echo .)com \
--cc=netdev@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox