次の方法で共有


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 ハッシュ値の計算に RSS 対応 NIC が使用する必要がある受信ネットワーク データの部分を指定する 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
Header netreceivescaling.h (netadaptercx.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

EvtNetAdapterReceiveScalingDisable

NetAdapterCx Receive Side Scaling