cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:1194回复:3

Ndis中如何处理接收到数据?

楼主#
更多 发布于:2005-06-13 17:00
int CheckRecvBuffer(IN OUT PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize)
{
PETHERNET_FRAME pEthernetFrame = 0;
WORD ethernetFrameType = 0;
PIP_HEADER pIpHeader = 0;
UINT ipHeaderLen = 0;
PVOID pIpData = NULL;

if(HeaderBuffer &&
(HeaderBufferSize >= ETHERNET_FRAME_LENGTH))
{
pEthernetFrame = (PETHERNET_FRAME)HeaderBuffer;
ethernetFrameType = ntohs(pEthernetFrame -> FrameType);


if(ETHERNET_FRAME_TYPE_TCPIP == ethernetFrameType
&& LookaheadBufferSize > IP_HEADER_LENGTH && LookAheadBuffer != NULL)
{
pIpHeader = (PIP_HEADER)LookAheadBuffer;
ipHeaderLen = GET_IP_HEADER_LENGTH(pIpHeader->VersionAndHeaderLength);
if(LookaheadBufferSize - ipHeaderLen > 0)
{
pIpData = (PVOID)((BYTE*)LookAheadBuffer + ipHeaderLen);
changeIpData(pIpData,pIpHeader->Protocol);
}
                                else // 有可能出现该情况吗?出现了又如何去做呢?
}
}
   return XF_SUCCESS;
}
我仅想得到ip报头后tcp数据报头第一个字节数据, 是否有LookaheadBufferSize <= IP_HEADER_LEN  的情况? 还是永远LookaheadBufferSize > IP_HEADER_LEN?

[编辑 -  6/13/05 by  cyliu]

[编辑 -  6/13/05 by  cyliu]
走走看看开源好 Solaris vs Linux
harry_chen
驱动牛犊
驱动牛犊
  • 注册日期2002-07-08
  • 最后登录2007-05-25
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-14 14:13
LookaheadBufferSize > IP_HEADER_LEN
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2005-06-14 14:39
1000M/100M/10M这种自适应的网卡有什么特殊处理吗?
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地板#
发布于:2005-06-15 11:08
在ReceiveHandler涵数中,
if (LookaheadBufferSize < PacketSize) 会调用TransferDataHandler,在TransferDataHandler中获得Packet是否不在包含ReceiveHandler接收到的数据,如Frame头,IP头等,仅是ReceiveHandler没有接收完的剩余数据?

为什么会出现LookaheadBufferSize < PacketSize情况呢?
走走看看开源好 Solaris vs Linux
游客

返回顶部