2017-03-25 12 views
2

가상 미니 포트 드라이버에 멀티 캐스트 지원을 추가하고 싶습니다. 각 물리적 NIC에 필터 드라이버가 바인딩되어 있습니다. 내가 지원 멀티 캐스트 주소를 추가 응시
https://msdn.microsoft.com/en-us/library/windows/hardware/ff569073(v=vs.85).aspxNDIS 가상 미니 포트 드라이버의 멀티 캐스트 주소를 설정하고 쿼리하는 방법은 무엇입니까?

마이크로 소프트 문서에 따라 :

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

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

또한 OID_802_3_MAXIMUM_LIST_SIZE OID의 최대 주소 32 개를 업데이트했습니다. 다음 제가 OID_GEN_CURRENT_PACKET_FILTER OID 설정 요청 중에

MiniportAdapterGeneralAttributes.SupportedPacketFilters = NDIS_PACKET_TYPE_DIRECTED | 
     NDIS_PACKET_TYPE_MULTICAST | 
     NDIS_PACKET_TYPE_BROADCAST | 
     NDIS_PACKET_TYPE_PROMISCUOUS | 
     NDIS_PACKET_TYPE_ALL_MULTICAST; 

PacketFilters 업데이트 난 DATA.SET_INFORMATION.InformationBuffer 값으로 업데이트 PacketFilters.

OID_GEN_MAC_OPTION 동안 제가 첨가하고 매크로 : 요청을 설정 다음 OID_802_3_MULTICAST_LIST OID에

NDIS_MAC_OPTION_NO_LOOPBACK | NDIS_MAC_OPTION_FULL_DUPLEX | NDIS_MAC_OPTION_8021P_PRIORITY ;는 난 NDISTester 테스트 캐스트 목록

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); 

유지. 미니 포트 어댑터에 바인딩되는 프로토콜 드라이버가 있습니다. 그러나 나는 수신 시간 동안 어떤 멀티 캐스트 패킷도 얻지 못했습니다. 뭐가 실종 됐어? received less than expected percentage of sent과 같은 오류가 표시됩니다. 어떤 제안?

답변

1

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

+0

이것은 답변이 아니라 주석이어야합니다. – user1810087