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 |