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 수신 쪽 크기 조정