NDIS 패킷 다시 반복
NET_BUFFER_LIST 구조체의 NblFlags 멤버에 있는 NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET 플래그가 설정된 경우 패킷은 루프백 패킷입니다. 프로토콜 드라이버 및 필터 드라이버는 이 플래그를 검사 패킷이 루프백 패킷인지 확인할 수 있습니다.
다음 세 가지 조건이 모두 충족되면 NDIS는 패킷을 다시 루프합니다.
기본 미니포트 어댑터 미디어 유형은 NdisMedium802_3 또는 NdisMedium802_5.
다음 세 가지 조건 중 하나가 충족됩니다.
프로토콜 바인딩은 OID_GEN_CURRENT_PACKET_FILTER OID를 사용하여 NDIS_PACKET_TYPE_PROMISCUOUS 설정을 설정하여 패킷 필터를 지정하고(Windows 8 이상에서는 동일한 OID에서 NDIS_PACKET_TYPE_NO_LOCAL 설정하지 않음) 다음 중 하나가 true입니다.
- 미니포트 어댑터에 바인딩이 두 개 이상 있습니다.
- 미니포트 어댑터에 연결된 필터 모듈이 있으며 필터 모듈이 수신 처리기를 등록했습니다.
프로토콜 바인딩은 OID_GEN_CURRENT_PACKET_FILTER OID를 사용하여 NDIS_PACKET_TYPE_ALL_LOCAL 설정을 설정하여 패킷 필터를 지정하고 다음 중 하나가 true입니다.
- 미니포트 어댑터에 바인딩이 두 개 이상 있습니다.
- 미니포트 어댑터에 연결된 필터 모듈이 있으며 필터 모듈이 수신 처리기를 등록했습니다.
호출자는 NdisSendNetBufferLists 함수의 SendFlags 매개 변수에서 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 플래그를 설정합니다.
패킷은 미니포트 어댑터의 OID_GEN_CURRENT_PACKET_FILTER OID를 사용하여 설정된 패킷 필터에 의해 결정된 대로 허용됩니다. 예는 다음과 같습니다.
- 패킷이 직접 패킷인 경우 패킷의 대상 주소가 미니포트 어댑터의 MAC 주소와 일치해야 합니다.
- 패킷이 멀티캐스트 패킷인 경우 패킷 필터는 NDIS_PACKET_TYPE_ALL_MULTICAST 설정되었거나 대상 주소가 미니포트 어댑터의 멀티캐스트 주소 목록의 멀티캐스트 주소 중 하나와 일치해야 하며 패킷 필터가 NDIS_PACKET_TYPE_MULTICAST 설정됩니다.
- 패킷이 브로드캐스트 패킷인 경우 미니포트 어댑터의 패킷 필터는 NDIS_PACKET_TYPE_BROADCAST 설정해야 합니다.
- 미니포트 어댑터의 패킷 필터에 NDIS_PACKET_TYPE_PROMISCUOUS 또는 NDIS_PACKET_TYPE_ALL_LOCAL 설정되었습니다.
프로토콜 바인딩은 다음 중 하나가 true인 경우 루프백 패킷을 받습니다.
프로토콜 바인딩은 패킷의 원래 보낸 사람이며 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 설정됩니다.
프로토콜 바인딩은 패킷 필터에서 NDIS_PACKET_TYPE_NO_LOCAL 설정하지 않습니다.
다음 중 하나가 true인 경우 프로토콜 바인딩은 루프백 패킷을 받지 않습니다.
프로토콜 바인딩은 패킷 필터에서 NDIS_PACKET_TYPE_NO_LOCAL 설정하며 패킷에 대한 원래 발신자가 아닙니다.
프로토콜 바인딩은 원래 보낸 사람이지만 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK NdisSendNetBufferLists 함수에 대한 호출에서 SendFlags 매개 변수에 설정되지 않습니다.
다음 그림에서는 루프백 알고리즘 논리 흐름을 보여줍니다.