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 |
최소 UMDF 버전 | 2.33 |
머리글 | netreceivescaling.h(netadaptercx.h 포함) |
IRQL | PASSIVE_LEVEL |