如何在协议驱动程序中禁用接收环回数据包?场景是,我的协议驱动程序正在从一个适配器接收数据包并将其发送到另一个适配器。(如eth0 -> eth1
)。
只对 IPv4 感兴趣,
#define NPROT_ETH_TYPE 0x0008 //IPv4
过滤器定义为,
#define NPROTO_PACKET_FILTER ( NDIS_PACKET_TYPE_NO_LOCAL| \
NDIS_PACKET_TYPE_DIRECTED/*| \
NDIS_PACKET_TYPE_MULTICAST| \
NDIS_PACKET_TYPE_BROADCAST*/)
接收端正在检查环回数据包,如下所示,
// Leave the packet if loopback flag is set.
if( NdisTestNblFlag( pNetBufList, NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET ))
{
//
// Ndisprot is not interested in this NetBufferList, return the
// NetBufferList back to the miniport if the miniport gave us
// ownership of it.
//
break;
}
当我在路上发送数据包时,SendFlags
根据 MSDN 将其设置为零以避免环回。
NdisSendNetBufferLists(
pOpenContext->BindingHandle,
pNetBufferList,
NDIS_DEFAULT_PORT_NUMBER,
0);
即使在提出所有这些障碍之后,我的抗议仍然是接收环回数据包,这从wireshark 中可以看出。
任何想法?
使用NDIS6.0,ndisprot60,开发:Win7,测试VM:Win2008 R2