阅读:1590回复:6
MPSend中获得HeaderBuffer,HeaderBufferSize的方法?
如果复制到自己的内存里,取第13个字节得到的不对啊,转换后不是正确的报头,是不是可以认为Packet 的OrignalPacket里面开始是MacHeader,后面是IPHeader。。。?那么我有没有办法得到准确的MacHeaderSize呢?难道要用NdisRequest查询么? :(
|
|
沙发#
发布于:2004-01-05 21:16
:D搞定了
方法不太好,先假定了MacHeader都是14了。 把Packet先NdisQueryBuffer,再NdisMoveMemory,再NdisGetNextBuffer,取出所有的buffer在取需要的就可以了,我不知道当前的MacHeaderSize,就按照14算的了。看到有个程序查询之后用TotalSize-FrameSize不知道啥意思。 :mad: |
|
板凳#
发布于:2004-01-07 16:53
MacHeader目前都是14哈
|
|
地板#
发布于:2004-01-08 09:21
MacHeader绝对是14,不像IPHeader那样还有变数。
一下是arthurtu老大的办法,本来是用在PtReceive里面,不过应该在这里也行吧: typedef struct _ETH_HEADER { unsigned char targ_hw_addr[6]; // 目的地址,6字节。 unsigned char src_hw_addr[6]; // 源地址,6字节。 unsigned char H_frame_type; // 0x0800 for IP data, 0x806 for ARP, 0x8035 for RARP unsigned char L_frame_type; } ETHERNET_HEADER, *PETHERNET_HEADER; PETHERNET_HEADER pEth = (PETHERNET_HEADER)HeaderBuffer; pEh->... |
|
论坛版主
|
地下室#
发布于:2004-01-09 22:07
MAC层你可以肯定是802.3就可以用14,如果下层不一定就需要用QUERY了
|
|
5楼#
发布于:2004-01-10 19:42
和和,wxl_50685330说的是!明白了。
谢谢上面几位的回答,给分! :D :D |
|
6楼#
发布于:2004-03-01 14:29
有没有看vlan的MacHeader是什么样子?
|
|
|