阅读:1327回复:3
passthru的问题
系统wince.net,已经正确安装了passthru,passthru未经任何修改,网卡为2块rtl8139。其中一块被虚拟成vMini,另一块显示为rtl8139。
在protocolReceive函数和protocolReceivePacket函数分别设置了断点,用ping做测试,在程序 。。。。。。 if (pBinding->hMPBinding == NULL) { status = NDIS_STATUS_FAILURE; goto cleanUp; } // // Get at the packet, if any, indicated up by the miniport below. // pRecvPacket = NdisGetReceivedPacket(pBinding->hPTBinding, hMacReceiveContext); if (pRecvPacket != NULL) { 。。。。。。 运行中使用rtl8139那块网卡时用watch察看pRecvPacket 为NULL,可是ping -t命令的确不停地发包。用ethereal也抓到发的包。 使用vMini那块网卡时用watch察看pRecvPacket 不为NULL,NdisGetReceivedPacket()收到了数据包。用ethereal也抓到发的包。测试显示正常。 各位兄台,谁知道什么原因? |
|
|
论坛版主
|
沙发#
发布于:2005-07-13 17:49
这两块网卡要被上层不同(实例)的协议驱动绑定三,不可能同样的包被两个mini port一起发吧,只走一边是正常的阿,如果你上层就设定两个ip,并绑定到下层不同的网卡,然后分别ping他们应该是都可以收到的吧。你想要什么效果?
|
|
板凳#
发布于:2005-07-18 09:57
我在上层设定的2个IP地址,做ping试验时分别对两块网卡做试验。
下面是NDIS版的zhaock解释,我觉得比较合理 zhaock: 你们的理解有问题,在这个时候,NdisGetReceivedPacket为空并不代表没有包,只是因为miniport驱动,没有构造packet,而是用老的方式通知协议驱动,看passthru ptreceive的代码,NdisGetReceivedPacket为空时的处理,就明白了 |
|
|
论坛版主
|
地板#
发布于:2005-07-18 14:49
对了,回忆起来些了:))
不是很清楚CE的NDIS情况了,原来在2K下做的PASSTHRU在PTRECEIVE里面收包的三种情况中,对于用NdisGetReceivedPacket接收的数据始终为NULL的,总是第二和三种情况,由于比较紧,当时也没有仔细搞清楚是怎么回事。按帮助这种方式是有OOB的包才用,好像也不是啊,我记得都有的嘛 |
|