NDIS 가상 미니 포트 드라이버의 멀티 캐스트 주소를 설정하고 쿼리하는 방법은 무엇입니까?

user2986042

가상 미니 포트 드라이버에 멀티 캐스트 지원을 추가하고 싶습니다. 필터 드라이버가 각 물리적 NIC에 바인딩되어 있습니다. Microsoft 문서
https://msdn.microsoft.com/en-us/library/windows/hardware/ff569073(v=vs.85).aspx에 따라

지원 멀티 캐스트 주소를 추가하려고했습니다.

이 내 단계는 다음과 같습니다 미니 포트 드라이버에서 : 동안 miniport initialization내가 추가 MaxMulticastListSize = 32NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES.

NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES MiniportAdapterGeneralAttributes;
MiniportAdapterGeneralAttributes.MediaType = NdisMedium802_3;
MiniportAdapterGeneralAttributes.PhysicalMediumType = NdisPhysicalMediumUnspecified;
MiniportAdapterGeneralAttributes.MaxMulticastListSize = 32;

또한 OID_802_3_MAXIMUM_LIST_SIZE OID에서 32 개의 최대 주소를 업데이트했습니다. 다음으로 업데이트 PacketFilters했습니다.

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_FILTEROID 설정 요청 중에 PacketFilters를 DATA.SET_INFORMATION.InformationBuffer값으로 업데이트했습니다 .

그리고 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 설정 요청에서 멀티 캐스트 목록을 유지했습니다.

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합니다. 어떤 제안?

tech_123

.NET에 대한 처리기를 제공해야한다고 생각합니다 OID_802_3_MAXIMUM_LIST_SIZE.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관