--- ../v21.orig/mpi350.c 2004-05-05 11:22:04.000000000 +0200 +++ mpi350.c-20040519 2004-05-19 00:11:36.000000000 +0200 @@ -25,7 +25,6 @@ #include #include #ifdef CONFIG_MODVERSIONS -#define MODVERSIONS #include #endif @@ -63,9 +62,7 @@ #include #endif -/* #include -*/ #include "aes.h" #include "mpi350.h" @@ -82,8 +79,8 @@ INCLUDE_RFMONITOR - "#define" this will include RF monitor mode code for use with sniffers must have WIRELESS_EXT (include linux/wireless.h) -#define INCLUDE_RFMONITOR */ +#define INCLUDE_RFMONITOR static struct net_device *venus_device; @@ -552,21 +549,23 @@ if (v_info->rxfids[0].VirtualHostAddress[4] & 0x2) { /* CRC error */ len = 0; } else { - len = *(u16*)((u16*)(v_info->rxfids[0].VirtualHostAddress)+3)+30; + len = *(u16*)((u16*)(v_info->rxfids[0].VirtualHostAddress)+3)+24; } if (len && len < 2312) { v_info->stats.rx_packets++; v_info->stats.rx_bytes += len; skb = dev_alloc_skb( len ); buffer = skb_put(skb, len); - memcpy(buffer, v_info->rxfids[0].VirtualHostAddress+20, 30); + memcpy(buffer, v_info->rxfids[0].VirtualHostAddress+20, 24); /* gap length */ i = *(u16*)((u16*)(v_info->rxfids[0].VirtualHostAddress)+25); if (i+len+52 > rxd.length) { i = 0; } + if (buffer[0]==0x08) + i = i + 2; /* skip the gap */ - memcpy(buffer+30, v_info->rxfids[0].VirtualHostAddress+52+i,len-30); + memcpy(buffer+24, v_info->rxfids[0].VirtualHostAddress+52+i,len-24); skb->mac.raw = skb->data; skb->pkt_type = PACKET_OTHERHOST; skb->protocol = htons(ETH_P_802_2); @@ -2305,6 +2304,7 @@ { ConfigRid *configRid; PC3500_SID_LIST *ssidRid; + struct net_device *dev = v_info->dev; if (v_info->rfMonitor) { printk(KERN_INFO "venus_set_rfmonitor : rfmonitor\n"); @@ -2325,10 +2325,12 @@ configRid->authType = AUTH_OPEN; v_info->rfMonitor = TRUE; vwriterid(v_info,0xff10,(char *)(v_info->saveAPList)); + dev->type = ARPHRD_IEEE80211; } else { vreadrid(v_info,0xff21,(char *)(v_info->saveAPList), 2048); vwriterid(v_info,0xff10,(char *)(v_info->saveAPList)); v_info->rfMonitor = FALSE; + dev->type = ARPHRD_ETHER; printk(KERN_INFO "venus_set_rfmonitor : not-rfmonitor\n"); } }