|
@@ -49,7 +49,8 @@ static inline void ieee80211_monitor_rx(struct ieee80211_device *ieee,
|
|
|
struct sk_buff *skb,
|
|
|
struct ieee80211_rx_stats *rx_stats)
|
|
|
{
|
|
|
- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
|
|
+ struct ieee80211_hdr_4addr *hdr =
|
|
|
+ (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
u16 fc = le16_to_cpu(hdr->frame_ctl);
|
|
|
|
|
|
skb->dev = ieee->dev;
|
|
@@ -95,7 +96,7 @@ ieee80211_frag_cache_find(struct ieee80211_device *ieee, unsigned int seq,
|
|
|
/* Called only as a tasklet (software IRQ) */
|
|
|
static struct sk_buff *
|
|
|
ieee80211_frag_cache_get(struct ieee80211_device *ieee,
|
|
|
- struct ieee80211_hdr *hdr)
|
|
|
+ struct ieee80211_hdr_4addr *hdr)
|
|
|
{
|
|
|
struct sk_buff *skb = NULL;
|
|
|
u16 fc = le16_to_cpu(hdr->frame_ctl);
|
|
@@ -124,7 +125,7 @@ ieee80211_frag_cache_get(struct ieee80211_device *ieee,
|
|
|
if (frag == 0) {
|
|
|
/* Reserve enough space to fit maximum frame length */
|
|
|
skb = dev_alloc_skb(ieee->dev->mtu +
|
|
|
- sizeof(struct ieee80211_hdr) +
|
|
|
+ sizeof(struct ieee80211_hdr_4addr) +
|
|
|
8 /* LLC */ +
|
|
|
2 /* alignment */ +
|
|
|
8 /* WEP */ +
|
|
@@ -164,7 +165,7 @@ ieee80211_frag_cache_get(struct ieee80211_device *ieee,
|
|
|
|
|
|
/* Called only as a tasklet (software IRQ) */
|
|
|
static int ieee80211_frag_cache_invalidate(struct ieee80211_device *ieee,
|
|
|
- struct ieee80211_hdr *hdr)
|
|
|
+ struct ieee80211_hdr_4addr *hdr)
|
|
|
{
|
|
|
u16 fc = le16_to_cpu(hdr->frame_ctl);
|
|
|
u16 sc = le16_to_cpu(hdr->seq_ctl);
|
|
@@ -214,17 +215,18 @@ ieee80211_rx_frame_mgmt(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
|
struct ieee80211_rx_stats *rx_stats, u16 type,
|
|
|
u16 stype)
|
|
|
{
|
|
|
- struct ieee80211_hdr *hdr;
|
|
|
+ struct ieee80211_hdr_4addr *hdr;
|
|
|
|
|
|
// cheat the the hdr type
|
|
|
- hdr = (struct ieee80211_hdr *)skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
|
|
|
/* On the struct stats definition there is written that
|
|
|
* this is not mandatory.... but seems that the probe
|
|
|
* response parser uses it
|
|
|
*/
|
|
|
rx_stats->len = skb->len;
|
|
|
- ieee80211_rx_mgt(ieee,(struct ieee80211_hdr *)skb->data,rx_stats);
|
|
|
+ ieee80211_rx_mgt(ieee, (struct ieee80211_hdr_4addr *)skb->data,
|
|
|
+ rx_stats);
|
|
|
|
|
|
if((ieee->state == IEEE80211_LINKED)&&(memcmp(hdr->addr3,ieee->current_network.bssid,ETH_ALEN))) {
|
|
|
dev_kfree_skb_any(skb);
|
|
@@ -256,13 +258,13 @@ static int ieee80211_is_eapol_frame(struct ieee80211_device *ieee,
|
|
|
{
|
|
|
struct net_device *dev = ieee->dev;
|
|
|
u16 fc, ethertype;
|
|
|
- struct ieee80211_hdr *hdr;
|
|
|
+ struct ieee80211_hdr_4addr *hdr;
|
|
|
u8 *pos;
|
|
|
|
|
|
if (skb->len < 24)
|
|
|
return 0;
|
|
|
|
|
|
- hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
fc = le16_to_cpu(hdr->frame_ctl);
|
|
|
|
|
|
/* check that the frame is unicast frame to us */
|
|
@@ -296,13 +298,13 @@ static inline int
|
|
|
ieee80211_rx_frame_decrypt(struct ieee80211_device* ieee, struct sk_buff *skb,
|
|
|
struct ieee80211_crypt_data *crypt)
|
|
|
{
|
|
|
- struct ieee80211_hdr *hdr;
|
|
|
+ struct ieee80211_hdr_4addr *hdr;
|
|
|
int res, hdrlen;
|
|
|
|
|
|
if (crypt == NULL || crypt->ops->decrypt_mpdu == NULL)
|
|
|
return 0;
|
|
|
|
|
|
- hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl));
|
|
|
|
|
|
#ifdef CONFIG_IEEE80211_CRYPT_TKIP
|
|
@@ -341,13 +343,13 @@ static inline int
|
|
|
ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device* ieee, struct sk_buff *skb,
|
|
|
int keyidx, struct ieee80211_crypt_data *crypt)
|
|
|
{
|
|
|
- struct ieee80211_hdr *hdr;
|
|
|
+ struct ieee80211_hdr_4addr *hdr;
|
|
|
int res, hdrlen;
|
|
|
|
|
|
if (crypt == NULL || crypt->ops->decrypt_msdu == NULL)
|
|
|
return 0;
|
|
|
|
|
|
- hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl));
|
|
|
|
|
|
atomic_inc(&crypt->refcnt);
|
|
@@ -367,7 +369,7 @@ ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device* ieee, struct sk_buff *s
|
|
|
/* this function is stolen from ipw2200 driver*/
|
|
|
#define IEEE_PACKET_RETRY_TIME (5*HZ)
|
|
|
static int is_duplicate_packet(struct ieee80211_device *ieee,
|
|
|
- struct ieee80211_hdr *header)
|
|
|
+ struct ieee80211_hdr_4addr *header)
|
|
|
{
|
|
|
u16 fc = le16_to_cpu(header->frame_ctl);
|
|
|
u16 sc = le16_to_cpu(header->seq_ctl);
|
|
@@ -473,7 +475,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
|
{
|
|
|
struct net_device *dev = ieee->dev;
|
|
|
//struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev);
|
|
|
- struct ieee80211_hdr *hdr;
|
|
|
+ struct ieee80211_hdr_4addr *hdr;
|
|
|
//struct ieee80211_hdr_3addr_QOS *hdr;
|
|
|
|
|
|
size_t hdrlen;
|
|
@@ -490,7 +492,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
|
int keyidx = 0;
|
|
|
|
|
|
// cheat the the hdr type
|
|
|
- hdr = (struct ieee80211_hdr *)skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
stats = &ieee->stats;
|
|
|
|
|
|
if (skb->len < 10) {
|
|
@@ -631,7 +633,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
|
(keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0)
|
|
|
goto rx_dropped;
|
|
|
|
|
|
- hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
|
|
|
/* skb: hdr + (possibly fragmented) plaintext payload */
|
|
|
// PR: FIXME: hostap has additional conditions in the "if" below:
|
|
@@ -684,7 +686,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
|
/* this was the last fragment and the frame will be
|
|
|
* delivered, so remove skb from fragment cache */
|
|
|
skb = frag_skb;
|
|
|
- hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
ieee80211_frag_cache_invalidate(ieee, hdr);
|
|
|
}
|
|
|
|
|
@@ -694,7 +696,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
|
ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt))
|
|
|
goto rx_dropped;
|
|
|
|
|
|
- hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
+ hdr = (struct ieee80211_hdr_4addr *)skb->data;
|
|
|
if (crypt && !(fc & IEEE80211_FCTL_WEP) && !ieee->open_wep) {
|
|
|
if (/*ieee->ieee802_1x &&*/
|
|
|
ieee80211_is_eapol_frame(ieee, skb, hdrlen)) {
|
|
@@ -1525,7 +1527,7 @@ inline void ieee80211_process_probe_response(
|
|
|
}
|
|
|
|
|
|
void ieee80211_rx_mgt(struct ieee80211_device *ieee,
|
|
|
- struct ieee80211_hdr *header,
|
|
|
+ struct ieee80211_hdr_4addr *header,
|
|
|
struct ieee80211_rx_stats *stats)
|
|
|
{
|
|
|
switch (WLAN_FC_GET_STYPE(header->frame_ctl)) {
|