OID_RECEIVE_FILTER_SET_FILTER

지나치게 많은 드라이버가 네트워크 어댑터에서 필터를 설정하기 위해 OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청을 발급합니다.

NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는 호출자가 할당한 버퍼에 대한 포인터가 포함됩니다. 이 버퍼는 다음을 포함하도록 형식이 지정됩니다.

OID 메서드 요청에서 성공적으로 반환된 후 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는 NDIS_RECEIVE_FILTER_PARAMETERS 구조체에 대한 포인터가 포함됩니다. 오버리싱 드라이버가 새 수신 필터를 만드는 경우 NDIS는 이 구조를 새 필터 식별자로 업데이트합니다.

설명

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

OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청은 NDIS 패킷 병합, SR-IOV 또는 VMQ 인터페이스를 지원하는 미니포트 드라이버에 필수입니다.

오버리싱 드라이버는 요청된 필터 구성을 사용하여 NDIS_RECEIVE_FILTER_PARAMETERS 구조를 초기화합니다. NDIS는 NDIS_RECEIVE_FILTER_PARAMETERS 구조체의 FilterId 멤버에 필터 식별자를 할당하고 메서드 요청을 기본 미니포트 드라이버에 전달합니다.

수신 큐에 설정된 각 필터에는 네트워크 어댑터에 대한 고유한 필터 식별자가 있습니다. 즉, 필터 식별자는 네트워크 어댑터가 관리하는 다른 큐에서 중복되지 않습니다. NDIS가 수신 큐에서 필터를 설정하는 OID 요청을 받으면 필터 매개 변수를 확인합니다. NDIS는 필요한 리소스와 필터 식별자를 할당한 후 기본 네트워크 어댑터에 OID 요청을 제출합니다. 네트워크 어댑터가 필터에 필요한 소프트웨어 및 하드웨어 리소스를 성공적으로 할당할 수 있는 경우 반환 상태 NDIS_STATUS_SUCCESS OID 요청을 완료합니다.

참고 NDIS 6.30부터 패킷 병합 수신 필터는 네트워크 어댑터의 기본 수신 큐에서만 지원됩니다. 이 수신 큐에는 NDIS_DEFAULT_RECEIVE_QUEUE_ID 식별자가 있습니다.

미니포트 드라이버는 할당된 수신 필터에 대한 필터 식별자를 유지해야 합니다. NDIS는 이후 OID 요청에서 필터의 식별자를 사용하여 수신 필터 매개 변수를 변경하거나 수신 필터를 지웁니다.

미니포트 드라이버가 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 요청을 수신하고 큐에 설정된 필터가 있으면 큐가 실행 중 상태입니다. 이 상태에서 미니포트 드라이버는 NdisMIndicateReceiveNetBufferLists를 호출하여 큐의 패킷 표시를 시작할 수 있습니다.

SR-IOV 인터페이스에 대한 추가 지침

다음 점은 SR-IOV 인터페이스를 지원하는 미니포트 드라이버에 적용됩니다.

  • SR-IOV 인터페이스의 경우 수신 큐는 기본 또는 비기본 가상 포트(VPort)에 만들어집니다.

    참고 Windows Server 2012 SR-IOV 인터페이스는 VPort의 기본 수신 큐만 지원합니다.

    SR-IOV VPort가 OID_NIC_SWITCH_CREATE_VPORT OID 집합 요청을 통해 할당된 후 지나치게 많은 드라이버는 OID_RECEIVE_FILTER_SET_FILTER OID 요청으로 VPort에 필터를 설정할 수 있습니다.

    참고 VPort를 할당한 지나치게 많은 드라이버만 해당 VPort에 필터를 설정할 수 있습니다.

  • 기본 VPort는 항상 존재하기 때문에 오버리싱 드라이버는 항상 기본 VPort에서 필터를 설정할 수 있습니다.

  • VPort를 만들 때 수신 필터가 설정되지 않습니다. 이 경우 미니포트 드라이버는 미니포트 드라이버가 VPort에 대한 OID_RECEIVE_FILTER_SET_FILTER OID 요청을 받기 전에 해당 VPort의 수신 패킷을 표시해서는 안 됩니다. 이 OID 요청이 실행된 후 미니포트 드라이버는 해당 VPort의 패킷을 나타낼 수 있습니다.

    참고 미니포트 드라이버가 OID_RECEIVE_FILTER_SET_FILTER OID 요청을 처리하는 동안 VPort의 패킷을 나타내는 경우 OID 요청을 완료하고 NDIS_STATUS_SUCCESS 상태 코드를 반환해야 합니다.

VMQ 인터페이스에 대한 추가 지침

다음 점은 VMQ 인터페이스를 지원하는 미니포트 드라이버에 적용됩니다.

  • VMQ 수신 큐가 할당된 후 오버리싱 드라이버는 OID_RECEIVE_FILTER_SET_FILTER OID 요청으로 수신 큐에 필터를 설정할 수 있습니다.

    참고 수신 큐를 할당한 프로토콜 드라이버만 해당 큐에 필터를 설정할 수 있습니다.

  • 기본 큐는 항상 존재하기 때문에 지나치게 많은 드라이버는 항상 기본 큐에서 필터를 설정할 수 있습니다. 네트워크 어댑터가 드롭 큐를 지원하는 경우 오버리 드라이버가 드롭 큐에 필터를 설정할 수 있습니다.

    오버리싱 드라이버는 기본 큐를 소유하거나 큐를 삭제하지 않습니다. 따라서 네트워크 어댑터에 바인딩된 모든 프로토콜 드라이버는 기본 큐 또는 드롭 큐를 사용합니다.

  • 수신 큐가 만들어지면 수신 필터가 설정되지 않습니다. 이 경우 미니포트 드라이버는 미니포트 드라이버가 수신 큐에 대한 OID_RECEIVE_FILTER_SET_FILTER OID 요청을 받기 전에 해당 수신 큐의 수신 패킷을 표시해서는 안 됩니다. 이 OID 요청이 실행된 후 미니포트 드라이버는 수신 큐의 패킷을 나타낼 수 있습니다.

    참고 미니포트 드라이버가 OID_RECEIVE_FILTER_SET_FILTER OID 요청을 처리하는 동안 큐의 패킷을 나타내는 경우 OID 요청을 완료하고 NDIS_STATUS_SUCCESS 상태 코드를 반환해야 합니다.

상태 코드 반환

미니포트 드라이버는 OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청에 대해 다음 상태 코드 중 하나를 반환합니다.

NDIS_STATUS_SUCCESS
필터가 큐에 성공적으로 설정되었습니다. 정보 버퍼에는 업데이트된 NDIS_RECEIVE_FILTER_PARAMETERS 구조체 포함됩니다.

NDIS_STATUS_PENDING
요청이 완료될 때까지 보류 중입니다. 최종 상태 코드 및 결과는 호출자의 OID 요청 완료 처리기에 전달됩니다.

NDIS_STATUS_INVALID_PARAMETER
오버리싱 드라이버가 제공한 매개 변수 중 하나 이상이 잘못되었습니다.

NDIS_STATUS_INVALID_LENGTH
정보 버퍼가 너무 짧습니다. NDIS는 데이터를 설정합니다 . METHOD_INFORMATION. 필요한 최소 버퍼 크기에 대한 NDIS_OID_REQUEST 구조체의 BytesNeeded 멤버입니다.

NDIS_STATUS_NOT_SUPPORTED
미니포트 드라이버의 NDIS 버전은 6.20보다 이전 버전입니다.

NDIS_STATUS_FAILURE
다른 이유로 인해 요청이 실패했습니다.

요구 사항

Version

NDIS 6.20 이상에서 지원됩니다.

헤더

Ntddndis.h(Ndis.h 포함)

추가 정보

NdisMIndicateReceiveNetBufferLists

NDIS_OID_REQUEST

NDIS_RECEIVE_FILTER_PARAMETERS

NET_BUFFER_LIST

NET_BUFFER_LIST_RECEIVE_FILTER_ID

OID_NIC_SWITCH_CREATE_VPORT

OID_RECEIVE_FILTER_CLEAR_FILTER

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE