目前在看marvell 8686 wifi的驱动代码,在接收数据的时候不太明白,代码如下
- C/C++ code
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域。不知道是不是这样的、、、??
------解决方案--------------------------------------------------------
这个芯片没有用过,估计前面是去掉了部分头部字段的,正常应该是偏移30个字节才是SNAP头部
------解决方案--------------------------------------------------------
看样子确实有点像转换成802.3MAC的了
刚刚去IANA查了一下没有找到888e的类型
880B PPP [IANA]
8847 MPLS [RFC5332]
8848 MPLS with upstream-assigned label [RFC5332]
8A96-8A97 Invisible Software [XEROX]
34915 8863 - - PPPoE Discovery Stage [RFC2516]
34916 8864 - - PPPoE Session Stage [RFC2516]