가상 미니 포트 드라이버에 멀티 캐스트 지원을 추가하고 싶습니다. 필터 드라이버가 각 물리적 NIC에 바인딩되어 있습니다. Microsoft 문서
https://msdn.microsoft.com/en-us/library/windows/hardware/ff569073(v=vs.85).aspx에 따라
지원 멀티 캐스트 주소를 추가하려고했습니다.
이 내 단계는 다음과 같습니다 미니 포트 드라이버에서 : 동안 miniport initialization
내가 추가 MaxMulticastListSize = 32
에 NDIS_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_FILTER
OID 설정 요청 중에 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
합니다. 어떤 제안?
.NET에 대한 처리기를 제공해야한다고 생각합니다 OID_802_3_MAXIMUM_LIST_SIZE
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다