EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE 콜백 함수(netreceivescaling.h)

EvtNetAdapterReceiveScalingEnable 콜백 함수는 NIC(네트워크 인터페이스 컨트롤러)에 대해 RSS(수신 쪽 크기 조정)를 사용하도록 클라이언트 드라이버에 의해 구현됩니다.

구문

EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE EvtNetAdapterReceiveScalingEnable;

NTSTATUS EvtNetAdapterReceiveScalingEnable(
  [_In_] NETADAPTER Adapter,
  [_In_] NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE HashType,
  [_In_] NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE ProtocolType
)
{...}

매개 변수

[_In_] Adapter

NetAdapterCreate에 대한 이전 호출에서 클라이언트 드라이버가 얻은 NETADAPTER 개체입니다.

[_In_] HashType

NIC가 들어오는 패킷에 대한 해시 값을 계산하는 데 사용해야 하는 RSS(수신측 크기 조정) 해시 함수의 유형을 지정하는 NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE 값입니다.

[_In_] ProtocolType

RSS 지원 NIC가 RSS 해시 값을 계산하는 데 사용해야 하는 수신된 네트워크 데이터의 부분을 지정하는 NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE 값입니다.

반환 값

RSS가 성공적으로 활성화되었는지 STATUS_SUCCESS 반환합니다. 그렇지 않으면 적절한 NTSTATUS 오류 코드를 반환합니다.

설명

NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES 구조체의 적절한 멤버를 설정한 다음 NetAdapterSetReceiveScalingCapabilities를 호출하여 이 콜백 함수의 구현을 등록합니다. 클라이언트 드라이버는 일반적으로 NetAdapterStart를 호출하기 전에 Net 어댑터를 시작할 때 NetAdapterSetReceiveScalingCapabilities 를 호출합니다.

예제

이 콜백에서 클라이언트는 하드웨어에서 적절한 제어 비트를 설정하여 제공된 정보로 RSS를 켭니다.

중요

클라이언트 드라이버는 EvtNetAdapterReceiveScalingEnable 콜백에서 간접 참조 테이블을 지우거나 다시 설정 해서는 안 됩니다. 프레임워크는 드라이버의 초기 간접 참조 테이블 상태를 설정합니다.

NTSTATUS
MyEvtNetAdapterReceiveScalingEnable(
    _In_ NETADAPTER Adapter,
    _In_ NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE HashType,
    _In_ NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE ProtocolType
)
{
    NTSTATUS status = STATUS_SUCCESS;

    // Not using the hash type in this example
    UNREFERENCED_PARAMETER(HashType);

    UINT32 controlBitsEnable = MY_RSS_MULTI_CPU_ENABLE | MY_RSS_HASH_BITS_ENABLE;

    // Set the appropriate control bits for IPv4
    if(ProtocolType & NetAdapterReceiveScalingProtocolTypeIPv4)
    {
        controlBitsEnable |= MY_RSS_IPV4_ENABLE;

        if (ProtocolType & NetAdapterReceiveScalingProtocolTypeTcp)
        {
            controlBitsEnable |= MY_RSS_IPV4_TCP_ENABLE;
        }
    }

    // Repeat for IPv6
    ...

    // Set the bits in hardware
    if(!MyHardwareRssSetControl(controlBitsEnable))
    {
        WdfDeviceSetFailed(Adapter->WdfDevice, WdfDeviceFailedAttemptRestart);
        return STATUS_UNSUCCESSFUL;
    }

    // Perform other tasks like restarting the Rx queue

    return STATUS_SUCCESS;
}

요구 사항

   
대상 플랫폼 유니버설
최소 KMDF 버전 1.27
헤더 netreceivescaling.h(netadaptercx.h 포함)
IRQL PASSIVE_LEVEL

참고 항목

EvtNetAdapterReceiveScalingDisable

NetAdapterCx 수신측 크기 조정