|
目前在看marvell 8686 wifi的驱动代码,在接收数据的时候不太明白,代码如下
- case IF_DATA_PKT:
- //051107 Coverity chagne to mainstream //060407
- if( pRxBufVM != NULL)
- {
- if((*((UCHAR *)((ULONG)pRxBufVM + 14)) == 0xaa ) &&
- (*((UCHAR *)((ULONG)pRxBufVM + 15)) == 0xaa ) &&
- (*((UCHAR *)((ULONG)pRxBufVM + 16)) == 0x03 ) &&
- (*((UCHAR *)((ULONG)pRxBufVM + 20)) == 0x88 ) )
- {
- if ( (*((UCHAR *)((ULONG)pRxBufVM + 21)) == 0x8e ) ||
- (*((UCHAR *)((ULONG)pRxBufVM + 21)) == 0xc7 ) ) // fix pre-auth
- {
- usLength -= 8;
- NdisMoveMemory((PUCHAR)((ULONG)pRxBufVM + 12),(PUCHAR)((ULONG)pRxBufVM + 20), (usLength-20));
- }
- }
- }
复制代码
目前看代码可以看出,底层固件是不是把802.11帧转化为了802.3 SNAP帧,所以才会判断是不是0xAA,0x03。。。
我不明白的是oxAA,AA,03后面的,为什么是0x88,根据tcpip详解,偏移20字节的是类型域,里面只有ip(0800),arp(0806)和rarp(8305)的,没有个内容是0x88的。这是什么意思呢?
还有就是偏移21个字节,判断是不是0x8e或0xC7,这又是什么意思?
说的不太清楚,请高手指点。
另外,感觉wifi小端口传到协议层中的数据包,就是一个14字节的802.3MAC域+38~1492的数据域和CRC域。不知道是不是这样的、、、??
|
|