首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置和查询NDIS虚拟微型端口驱动程序的多播地址?

如何设置和查询NDIS虚拟微型端口驱动程序的多播地址?
EN

Stack Overflow用户
提问于 2017-03-25 09:13:47
回答 1查看 426关注 0票数 2

我想在虚拟的Miniport驱动程序上添加多播支持。我在每个物理网卡上都有一个过滤器驱动程序。根据Microsoft文档

https://msdn.microsoft.com/en-us/library/windows/hardware/ff569073(v=vs.85).aspx

我正准备添加支持多播地址:

,以下是我的步骤:在小型端口驱动程序中:在miniport initialization期间,我在NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES中添加了MaxMulticastListSize = 32

代码语言:javascript
运行
复制
NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES MiniportAdapterGeneralAttributes;
MiniportAdapterGeneralAttributes.MediaType = NdisMedium802_3;
MiniportAdapterGeneralAttributes.PhysicalMediumType = NdisPhysicalMediumUnspecified;
MiniportAdapterGeneralAttributes.MaxMulticastListSize = 32;

另外,我在OID_802_3_MAXIMUM_LIST_SIZE OID中更新了32 max地址。接下来,我更新了PacketFilters

代码语言:javascript
运行
复制
MiniportAdapterGeneralAttributes.SupportedPacketFilters =    NDIS_PACKET_TYPE_DIRECTED |
        NDIS_PACKET_TYPE_MULTICAST |
        NDIS_PACKET_TYPE_BROADCAST |
        NDIS_PACKET_TYPE_PROMISCUOUS |
        NDIS_PACKET_TYPE_ALL_MULTICAST;

OID_GEN_CURRENT_PACKET_FILTER OID设置请求期间,我用DATA.SET_INFORMATION.InformationBuffer值更新了PacketFilters。

OID_GEN_MAC_OPTION期间,我将添加宏:NDIS_MAC_OPTION_NO_LOOPBACK | NDIS_MAC_OPTION_FULL_DUPLEX | NDIS_MAC_OPTION_8021P_PRIORITY ;

接下来,在OID_802_3_MULTICAST_LIST OID设置请求中,我维护了一个多播列表

代码语言:javascript
运行
复制
OidRequest->DATA.SET_INFORMATION.BytesNeeded = 6;
OidRequest->DATA.SET_INFORMATION.BytesRead = OidRequest->DATA.SET_INFORMATION.InformationBufferLength;

do
{

  //check multicast address invalid
  if(OidRequest->DATA.SET_INFORMATION.InformationBufferLength % 6){
   OidRequest->DATA.SET_INFORMATION.BytesRead = 0;
   status = NDIS_STATUS_INVALID_LENGTH;
   break;
   }

   //check multicast address list full
  if(OidRequest->DATA.SET_INFORMATION.InformationBufferLength > (VELAN_MAX_MCAST_LIST * 6)){
  status = NDIS_STATUS_MULTICAST_FULL;
  OidRequest->DATA.SET_INFORMATION.BytesNeeded = VELAN_MAX_MCAST_LIST * 6;
  break;
  }

 //setting new multicast address list
 NdisZeroMemory(m_ulMcList,VELAN_MAX_MCAST_LIST * MUX_MAC_ADDRESS);
 NdisMoveMemory(m_ulMcList,OidRequest->DATA.SET_INFORMATION.InformationBuffer,OidRequest->DATA.SET_INFORMATION.InformationBufferLength);
 m_ulMclistSize = OidRequest->DATA.SET_INFORMATION.InformationBufferLength / 6;
 status = NDIS_STATUS_SUCCESS;

}while(FALSE);

我用NDISTester进行了测试。它有一个协议驱动程序,它将绑定到小型端口适配器。但是在接收过程中我没有收到任何多播数据包。有东西不见了吗?我遇到了像received less than expected percentage of sent这样的错误。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 15:59:20

我认为您需要为OID_802_3_MAXIMUM_LIST_SIZE提供一个处理程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43014599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档