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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk