가상 미니 포트 드라이버에 멀티 캐스트 지원을 추가하고 싶습니다. 각 물리적 NIC에 필터 드라이버가 바인딩되어 있습니다. 내가 지원 멀티 캐스트 주소를 추가 응시
https://msdn.microsoft.com/en-us/library/windows/hardware/ff569073(v=vs.85).aspxNDIS 가상 미니 포트 드라이버의 멀티 캐스트 주소를 설정하고 쿼리하는 방법은 무엇입니까?
마이크로 소프트 문서에 따라 :
이 내 단계는 다음과 같습니다 미니 포트 드라이버에서 : 내가 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES
에 MaxMulticastListSize = 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
과 같은 오류가 표시됩니다. 어떤 제안?
이것은 답변이 아니라 주석이어야합니다. – user1810087