NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체(ntddndis.h)

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체는 네트워크 패킷 헤더의 필드에 대한 필터 테스트 조건을 지정합니다.

NDIS 수신 필터는 다음 NDIS 인터페이스에서 사용됩니다.

구문

typedef struct _NDIS_RECEIVE_FILTER_FIELD_PARAMETERS {
  NDIS_OBJECT_HEADER       Header;
  ULONG                    Flags;
  NDIS_FRAME_HEADER        FrameHeader;
  NDIS_RECEIVE_FILTER_TEST ReceiveFilterTest;
  union {
    NDIS_MAC_HEADER_FIELD  MacHeaderField;
    NDIS_ARP_HEADER_FIELD  ArpHeaderField;
    NDIS_IPV4_HEADER_FIELD IPv4HeaderField;
    NDIS_IPV6_HEADER_FIELD IPv6HeaderField;
    NDIS_UDP_HEADER_FIELD  UdpHeaderField;
  } HeaderField;
  _HEADER_FIELD            _HEADER_FIELD;
  union {
    UCHAR   FieldByteValue;
    USHORT  FieldShortValue;
    ULONG   FieldLongValue;
    ULONG64 FieldLong64Value;
    UCHAR   FieldByteArrayValue[16];
  } FieldValue;
  _FIELD_VALUE             _FIELD_VALUE;
  union {
    UCHAR   ResultByteValue;
    USHORT  ResultShortValue;
    ULONG   ResultLongValue;
    ULONG64 ResultLong64Value;
    UCHAR   ResultByteArrayValue[16];
  } ResultValue;
  _RESULT_VALUE            _RESULT_VALUE;
} NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, *PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS;

멤버

Header

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체의 NDIS_OBJECT_HEADER 구조체입니다. 드라이버는 Header가 지정하는 구조체의 Type 멤버를 NDIS_OBJECT_TYPE_DEFAULT 설정합니다.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체의 버전을 나타내기 위해 드라이버는 Revision 멤버를 다음 값 중 하나로 설정합니다.

의미
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
NDIS 6.30용 HeaderField 공용 구조체에 추가 멤버가 추가되었습니다.

드라이버는 Size 멤버를 NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2 설정합니다.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
NDIS 6.20의 원래 버전입니다.

드라이버는 Size 멤버를 NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1 설정합니다.

Flags

플래그의 비트 OR입니다. 다음 플래그는 에 대해 유효합니다. OID_RECEIVE_FILTER_SET_FILTER Oid.

의미
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
이 플래그가 설정된 경우 네트워크 어댑터는 다음 조건을 통과하는 수신된 패킷만 표시해야 합니다.
  • 패킷의 MAC(미디어 액세스 제어) 주소는 지정된 MAC 헤더 필드 테스트와 일치합니다.
  • 패킷에 VLAN 태그가 없거나 ID가 0인 VLAN 태그가 있습니다.
이 플래그에 대한 자세한 내용은 주의 섹션을 참조하세요.
참고 오버리싱 드라이버가 OID 요청이 OID_RECEIVE_FILTER_SET_FILTER MAC 주소 필터 및 VLAN 식별자 필터를 설정하는 경우 필터 필드 중 하나에서 이 플래그를 설정하지 않습니다. 이 경우 미니포트 드라이버는 지정된 MAC 주소와 VLAN 식별자와 일치하는 패킷을 나타내야 합니다. 즉, 미니포트 드라이버는 VLAN 식별자가 없거나 태그가 지정되지 않은 MAC 주소가 일치하는 패킷을 나타내면 안 됩니다.
 

FrameHeader

네트워크 데이터 프레임의 헤더 형식입니다.

ReceiveFilterTest

수신 필터에 대해 수행할 테스트 유형입니다.

HeaderField

헤더의 필드 형식입니다. 필드 형식(예: NDIS_MAC_HEADER_FIELD)은 FrameHeader 멤버에 지정된 헤더 형식에 해당합니다.

이 공용 구조체에는 다음 멤버가 포함됩니다.

HeaderField.MacHeaderField

MAC 헤더의 필드 형식입니다.

HeaderField.ArpHeaderField

ARP(주소 확인 프로토콜) 헤더의 필드 형식입니다.

HeaderField.IPv4HeaderField

IP 버전 4(IPv4) 헤더의 필드 형식을 지정하는 NDIS_IPV4_HEADER_FIELD 열거 형 값입니다.

HeaderField.IPv6HeaderField

IP 버전 6(IPv6) 헤더의 필드 형식을 지정하는 NDIS_IPV6_HEADER_FIELD 열거 형 값입니다.

HeaderField.UdpHeaderField

UDP(사용자 데이터그램 프로토콜) 헤더의 필드 형식입니다.

_HEADER_FIELD

FieldValue

미니포트 어댑터가 들어오는 패킷의 해당 헤더 필드 값과 비교하는 값입니다. 헤더 필드 값의 위치는 HeaderField 멤버에 지정된 필드 형식에 따라 결정됩니다.

자세한 내용은 주의 섹션을 참조하세요.

이 공용 구조체에는 다음 멤버가 포함됩니다.

FieldValue.FieldByteValue

네트워크 패킷의 필드와 비교할 UCHAR 값입니다.

참고MacHeaderField 멤버가 NdisMacHeaderFieldPacketType 열거형 값을 지정하는 경우 이 멤버에는 NDIS_MAC_PACKET_TYPE 열거형 값이 포함됩니다.
 

FieldValue.FieldShortValue

네트워크 패킷의 필드와 비교할 USHORT 값입니다.

FieldValue.FieldLongValue

네트워크 패킷의 필드와 비교할 ULONG 값입니다.

FieldValue.FieldLong64Value

네트워크 패킷의 필드와 비교할 ULONG64 값입니다.

FieldValue.FieldByteArrayValue[16]

네트워크 패킷의 필드와 비교할 UCHAR 배열입니다.

_FIELD_VALUE

ResultValue

테스트 결과 값이 포함된 공용 구조체입니다.

ReceiveFilterTest 멤버가 NdisReceiveFilterTestMaskEqual로 설정된 경우 네트워크 어댑터는 먼저 FieldValue 멤버의 값과 HeaderField 멤버가 지정한 헤더 필드 값의 결과를 계산합니다. 그런 다음, 어댑터는 계산된 결과를 ResultValue와 비교합니다.

자세한 내용은 주의 섹션을 참조하세요.

이 공용 구조체에는 다음 멤버가 포함됩니다.

ResultValue.ResultByteValue

테스트 결과와 비교할 UCHAR 값입니다.

ResultValue.ResultShortValue

테스트 결과와 비교할 USHORT 값입니다.

ResultValue.ResultLongValue

테스트 결과와 비교할 ULONG 값입니다.

ResultValue.ResultLong64Value

테스트 결과와 비교할 ULONG64 값입니다.

ResultValue.ResultByteArrayValue[16]

테스트 결과와 비교할 UCHAR 배열입니다.

_RESULT_VALUE

설명

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체는 를 사용하여 지정할 수 있는 가능한 필드 테스트 배열의 한 필드에 대한 필터 테스트 조건을 지정합니다. NDIS_RECEIVE_FILTER_PARAMETERS 구조체입니다.

다음 표에서는 네트워크 어댑터가 ReceiveFilterTest, FieldValue 및 ResultValue 멤버를 사용하여 수신된 패킷의 지정된 헤더 필드 값에 대한 필터 테스트를 수행하는 방법을 설명합니다.

ReceiveFilterTest 네트워크 어댑터에서 수행하는 필터 테스트
NdisReceiveFilterTestEqual (<헤더 필드 값> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<헤더 필드 값> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<헤더 필드 값> != FieldValue)
 
참고FieldShortValueResultLong64Value 멤버와 같은 모든 멀티바이트 필드 및 결과 값은 네트워크 바이트 순서(big-endian) 형식으로 지정해야 합니다.
 
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그가 설정되지 않고 OID_RECEIVE_FILTER_SET_FILTER OID 집합 요청에 의해 구성된 VLAN 식별자 필터가 없는 경우 미니포트 드라이버는 다음 중 하나를 수행해야 합니다.
  • NDIS 6.20의 경우 미니포트 드라이버는 OID_RECEIVE_FILTER_SET_FILTER OID 요청에 실패한 상태 반환해야 합니다.
  • NDIS 6.30부터 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그가 설정되지 않고 OID_RECEIVE_FILTER_SET_FILTER 메서드 요청으로 구성된 VLAN 식별자 필터가 없는 경우 미니포트 드라이버는 다음 중 하나를 수행해야 합니다.
    • 미니포트 드라이버는 OID_RECEIVE_FILTER_SET_FILTER 메서드 요청에 대해 실패한 상태 반환해야 합니다.
    • 미니포트 드라이버는 지정된 MAC 주소 필드를 검사하고 필터링하도록 네트워크 어댑터를 구성해야 합니다. VLAN 태그가 수신된 패킷에 있는 경우 네트워크 어댑터는 패킷 데이터에서 제거해야 합니다. 미니포트 드라이버는 패킷의 NET_BUFFER_LIST 구조와 연결된 NDIS_NET_BUFFER_LIST_8021Q_INFO VLAN 태그를 배치해야 합니다.
NDIS 6.30부터 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그가 설정되지 않고 OID_RECEIVE_FILTER_SET_FILTER OID 집합 요청에 의해 구성된 0이 아닌 VLAN 식별자 필터가 있는 경우 미니포트 드라이버는 다음을 수행해야 합니다.
  • 미니포트 드라이버는 지정된 MAC 주소 및 VLAN 식별자 필드를 검사하고 필터링하도록 네트워크 어댑터를 구성해야 합니다.

    VLAN 태그가 수신된 패킷에 있는 경우 네트워크 어댑터는 패킷 데이터에서 제거해야 합니다. 미니포트 드라이버는 패킷의 NET_BUFFER_LIST 구조와 연결된 NDIS_NET_BUFFER_LIST_8021Q_INFO VLAN 태그를 배치해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.20 이상에서 지원됩니다.
머리글 ntddndis.h(Ndis.h 포함)

추가 정보

NDIS_ARP_HEADER_FIELD

NDIS_FRAME_HEADER

NDIS_IPV4_HEADER_FIELD

NDIS_IPV6_HEADER_FIELD

NDIS_MAC_HEADER_FIELD

NDIS_MAC_PACKET_TYPE

NDIS_OBJECT_HEADER

NDIS_RECEIVE_FILTER_PARAMETERS

NDIS_RECEIVE_FILTER_TEST

NDIS_UDP_HEADER_FIELD

OID_RECEIVE_FILTER_SET_FILTER