ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1573回复:7

使用ptReceive的网卡如何处理包?

楼主#
更多 发布于:2004-01-08 12:36
passthru中,
在ptreceive中Packet不能获得完整的一个NDIS_PACKET结构,是不是MptransferData中当Status=NDIS_STATUS_SUCCESS时,MptransferData中的Packet就指向了一个完整的NDIS_PACKET结构呢?我现在想先得到完整的包内容放入一个缓冲中,处理后在提交上去给协议层。但是我现在不知道应该怎样实现这个方案,希望各位能帮忙给我一些解决的方案或者方法。
我是来学习的。不打扫卫生
ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-08 18:06
请帮助,谢谢
我是来学习的。不打扫卫生
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-08 21:46
你用的是什么网卡呢?
有些便宜的网卡如rtl8139芯片的网卡无法获取PACKET,只能从原是buffer中提取ip包!
ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-09 08:44
8139,我应该怎样提取出完整的包内容呢?
我是来学习的。不打扫卫生
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-09 12:22
接收过程分三种情况:
>1.对于10/100M自适应网卡(这是据说,我试过好像不灵喔:),我的网卡是10/100自
适应的啊,但从来不以这种方式接收包,但据我们教研室一个人说遇到过,所以最好还
是把这种情况做出来),NdisGetReceivedPacket可以得到完整的包,
包含OOB DATA,这是最简单的情况。
>2.如果不是,也就是上述方法得不到PACKET,那么要判断PTRECEIVE的两个参数:
PacketSize 和 LookAheadBufferSize的大小,如果PacketSize <=
LookAheadBufferSize,表示整个包被放到了前视缓冲区中,可以从LookAheadBuffer得
到整个的包,包大小是LookAheadBufferSize。
>3.PacketSize > LookAheadBufferSize的情况那么表示下层MINIPORT发送了一个叫做
前视数据的部分上来,如果上层判断需要这个包,可以利用PTTRANSFERDATA将剩下的部
分传上来。LookAheadBufferSize表示传了多大上来,PacketSize -
LookAheadBufferSize表示还剩多少要传。
根据地的兄弟们,团结就是力量
ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-09 13:40
你是说我可以在MPTransferData中得到完整包内容么?
情况一:我在ptreceive中收到的lookaheadbuffersize>=packetsize,我就可以直接处理lookaheadbuffer,把它当成是包内容,当我处理完以后,如果lookheadbuffer的长度变化,就将新的lookaheadbuffersize通知给NdisMEthIndicateReceive()。直接把lookaheadbuffer给NdisMEthIndicateReceive()。
情况二:lookaheadbuffersize<packetsize,我就可以直接在MPTransferData中收全整个包,并用一个packet描述符来描述这个包,我就可以将包能容一一都给考出来到一个连续的buffer中,进行处理,处理完毕之后,用一个新的描述符把这个缓冲描述成一个packet。然后用NdisMIndicateReceivePacket()来通知协议层一个包送到。
我这样做可以么?请指教。谢谢
我是来学习的。不打扫卫生
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-09 20:58
可以可以;)JUST DO IT
根据地的兄弟们,团结就是力量
youngyt
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2006-12-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-16 11:33
这个贴子原来有回答的。

在PtReceive中的不是完整的包结构的话,得到的是一部分包内容,将其拷入一个内存块中,然后调用ndistranferdata,在ptTransferdataComplete中会得到剩下的包内容,将两个包组装一下就行了。
游客

返回顶部