orinoco: Switch to d80211.h This patch "converts" the orinoco driver to use d80211.h instead of ieee80211.h. It also copies the IEEE80211_DATA_LEN definition to d80211.h for use by the stack and drivers.
Signed-off-by: Michael Wu <[EMAIL PROTECTED]> --- drivers/net/wireless/orinoco.c | 37 +++++++++++++++++++------------------ include/net/d80211.h | 9 +++++++++ net/d80211/ieee80211.c | 4 ++-- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c index d6ed578..bdc8d37 100644 --- a/drivers/net/wireless/orinoco.c +++ b/drivers/net/wireless/orinoco.c @@ -83,8 +83,9 @@ #include <linux/netdevice.h> #include <linux/etherdevice.h> #include <linux/ethtool.h> #include <linux/wireless.h> +#include <linux/if_arp.h> #include <net/iw_handler.h> -#include <net/ieee80211.h> +#include <net/d80211.h> #include "hermes_rid.h" #include "orinoco.h" @@ -400,7 +401,7 @@ static int orinoco_change_mtu(struct net if ( (new_mtu < ORINOCO_MIN_MTU) || (new_mtu > ORINOCO_MAX_MTU) ) return -EINVAL; - if ( (new_mtu + ENCAPS_OVERHEAD + IEEE80211_HLEN) > + if ( (new_mtu + ENCAPS_OVERHEAD + sizeof(struct ieee80211_hdr)) > (priv->nicbuf_size - ETH_HLEN) ) return -EINVAL; @@ -720,29 +721,29 @@ static void orinoco_rx_monitor(struct ne /* Determine the size of the header and the data */ fc = le16_to_cpu(desc->frame_ctl); - switch (fc & IEEE80211_FCTL_FTYPE) { - case IEEE80211_FTYPE_DATA: - if ((fc & IEEE80211_FCTL_TODS) - && (fc & IEEE80211_FCTL_FROMDS)) + switch (WLAN_FC_GET_TYPE(fc)) { + case WLAN_FC_TYPE_DATA: + if ((fc & WLAN_FC_TODS) + && (fc & WLAN_FC_FROMDS)) hdrlen = 30; else hdrlen = 24; datalen = len; break; - case IEEE80211_FTYPE_MGMT: + case WLAN_FC_TYPE_MGMT: hdrlen = 24; datalen = len; break; - case IEEE80211_FTYPE_CTL: - switch (fc & IEEE80211_FCTL_STYPE) { - case IEEE80211_STYPE_PSPOLL: - case IEEE80211_STYPE_RTS: - case IEEE80211_STYPE_CFEND: - case IEEE80211_STYPE_CFENDACK: + case WLAN_FC_TYPE_CTRL: + switch (WLAN_FC_GET_STYPE(fc)) { + case WLAN_FC_STYPE_PSPOLL: + case WLAN_FC_STYPE_RTS: + case WLAN_FC_STYPE_CFEND: + case WLAN_FC_STYPE_CFENDACK: hdrlen = 16; break; - case IEEE80211_STYPE_CTS: - case IEEE80211_STYPE_ACK: + case WLAN_FC_STYPE_CTS: + case WLAN_FC_STYPE_ACK: hdrlen = 10; break; } @@ -908,7 +909,7 @@ static void __orinoco_ev_rx(struct net_d hdr->h_proto = htons(length); } memcpy(hdr->h_dest, desc.addr1, ETH_ALEN); - if (fc & IEEE80211_FCTL_FROMDS) + if (fc & WLAN_FC_FROMDS) memcpy(hdr->h_source, desc.addr3, ETH_ALEN); else memcpy(hdr->h_source, desc.addr2, ETH_ALEN); @@ -917,7 +918,7 @@ static void __orinoco_ev_rx(struct net_d skb->dev = dev; skb->protocol = eth_type_trans(skb, dev); skb->ip_summed = CHECKSUM_NONE; - if (fc & IEEE80211_FCTL_TODS) + if (fc & WLAN_FC_TODS) skb->pkt_type = PACKET_OTHERHOST; /* Process the wireless stats if needed */ @@ -2229,7 +2230,7 @@ static int orinoco_init(struct net_devic /* No need to lock, the hw_unavailable flag is already set in * alloc_orinocodev() */ - priv->nicbuf_size = IEEE80211_FRAME_LEN + ETH_HLEN; + priv->nicbuf_size = IEEE80211_DATA_LEN + sizeof(struct ieee80211_hdr) + ETH_HLEN; /* Initialize the firmware */ err = hermes_init(hw); diff --git a/include/net/d80211.h b/include/net/d80211.h index b9d4b24..6bf1b08 100644 --- a/include/net/d80211.h +++ b/include/net/d80211.h @@ -958,6 +958,15 @@ #define WLAN_FC_STYPE_QOS_CFACKPOLL 15 #define IEEE80211_MAX_FRAG_THRESHOLD 2346 #define IEEE80211_MAX_RTS_THRESHOLD 2347 +#define IEEE80211_DATA_LEN 2304 +/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section + 6.2.1.1.2. + + The figure in section 7.1.2 suggests a body size of up to 2312 + bytes is allowed, which is a bit confusing, I suspect this + represents the 2304 bytes of real data, plus a possible 8 bytes of + WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ + struct ieee80211_hdr { __le16 frame_control; __le16 duration_id; diff --git a/net/d80211/ieee80211.c b/net/d80211/ieee80211.c index 71f9005..9c38905 100644 --- a/net/d80211/ieee80211.c +++ b/net/d80211/ieee80211.c @@ -1969,7 +1969,7 @@ static int ieee80211_change_mtu(struct n { /* FIX: what would be proper limits for MTU? * This interface uses 802.3 frames. */ - if (new_mtu < 256 || new_mtu > 2304 - 24 - 6) { + if (new_mtu < 256 || new_mtu > IEEE80211_DATA_LEN - 24 - 6) { printk(KERN_WARNING "%s: invalid MTU %d\n", dev->name, new_mtu); return -EINVAL; @@ -1987,7 +1987,7 @@ static int ieee80211_change_mtu_apdev(st { /* FIX: what would be proper limits for MTU? * This interface uses 802.11 frames. */ - if (new_mtu < 256 || new_mtu > 2304) { + if (new_mtu < 256 || new_mtu > IEEE80211_DATA_LEN) { printk(KERN_WARNING "%s: invalid MTU %d\n", dev->name, new_mtu); return -EINVAL;
pgpoSmathtpdV.pgp
Description: PGP signature