EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE fungsi panggilan balik (netreceivescaling.h)

Fungsi panggilan balik EvtNetAdapterReceiveScalingEnable diimplementasikan oleh driver klien untuk mengaktifkan receive side scaling (RSS) untuk pengontrol antarmuka jaringan (NIC).

Sintaks

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
)
{...}

Parameter

[_In_] Adapter

Objek NETADAPTER yang diperoleh driver klien dalam panggilan sebelumnya ke NetAdapterCreate.

[_In_] HashType

Nilai NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE yang menentukan jenis fungsi hash receive side scaling (RSS) yang harus digunakan NIC untuk menghitung nilai hash untuk paket masuk.

[_In_] ProtocolType

Nilai NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE yang menentukan bagian data jaringan yang diterima yang harus digunakan NIC berkemampuan RSS untuk menghitung nilai hash RSS.

Nilai kembali

Mengembalikan STATUS_SUCCESS jika RSS berhasil diaktifkan. Jika tidak, mengembalikan kode kesalahan NTSTATUS yang sesuai.

Keterangan

Daftarkan implementasi fungsi panggilan balik ini dengan mengatur anggota struktur NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES yang sesuai lalu memanggil NetAdapterSetReceiveScalingCapabilities. Driver klien biasanya memanggil NetAdapterSetReceiveScalingCapabilities saat memulai adaptor net, sebelum memanggil NetAdapterStart.

Contoh

Dalam panggilan balik ini, klien mengaktifkan RSS dengan informasi yang disediakan dengan mengatur bit kontrol yang sesuai dalam perangkat keras.

Penting

Driver klien tidak boleh menghapus atau mengatur ulang tabel tidak langsung mereka dari panggilan balik EvtNetAdapterReceiveScalingEnable mereka. Kerangka kerja akan mengatur status tabel tidak langsung awal driver.

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;
}

Persyaratan

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1.27
Header netreceivescaling.h (termasuk netadaptercx.h)
IRQL PASSIVE_LEVEL

Lihat juga

EvtNetAdapterReceiveScalingDisable

NetAdapterCx Menerima Penskalaan Sisi