Manajemen elemen cincin bersih
Ikuti panduan dalam topik ini untuk mengelola struktur NET_RING Anda dan elemennya selama transfer data jaringan. Aturan dalam topik ini menjelaskan anggota driver klien elemen cincin bersih mana yang dapat memodifikasi dan kapan, tergantung pada skenario jalur data, serta driver klien informasi umum yang harus diingat untuk struktur ini.
Penting
Driver klien harus mematuhi arah ini selama semua fase pengembangan. Jika driver klien tidak mematuhi petunjuk ini saat menguji dengan Driver Verifier, Driver Verifier melaporkan pelanggaran dan memicu pemeriksaan bug pada perangkat yang sedang diuji.
NET_RING
Ketika antrean paket induk NET_RING dimulai, semua indeks dalam cincin diinisialisasi menjadi 0.
Tabel berikut ini menjelaskan anggota cincin bersih mana yang dapat dimodifikasi oleh driver klien.
Bidang | Driver klien diizinkan untuk mengubah |
---|---|
OSReserved1 | Tidak |
ElementStride | Tidak |
NumberOfElements | Tidak |
ElementIndexMask | Tidak |
EndIndex | Tidak |
OSReserved0 | Tidak |
OSReserved2 | Tidak |
BeginIndex | Ya (Diperlukan) |
NextIndex | Ya (Opsional) Catatan: Kerangka kerja tidak pernah membaca NextIndex. |
Awal | Ya (Opsional) Catatan: Kerangka kerja tidak pernah membaca Scratch. |
Buffer | Tidak |
Driver klien tidak boleh memodifikasi anggota baca saja dari struktur ini, juga tidak boleh menaikkan BeginIndex melewati EndIndex selama panggilan ke EvtPacketQueueAdvance.
Untuk informasi selengkapnya tentang kepemilikan indeks di cincin bersih, lihat Pengantar cincin bersih.
NET_PACKET
Bidang dalam NET_PACKET sensitif terhadap konteks yang berbeda tempat jalur data beroperasi. Apakah bidang Abaikan paket diatur dan apakah driver menerima (Rx) atau mengirimkan (Tx) paket mengubah aturan yang diterapkan ke paket.
Tabel berikut ini menyediakan petunjuk arah untuk driver di setiap skenario.
Rx atau Tx | Abaikan bidang diatur oleh... | Catatan |
---|---|---|
Rx | Driver klien |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
Selama operasi Rx, bidang Tata LetakNET_PACKET tunduk pada aturan berikut:
- Semua bidang kecuali Reserved0 harus diinisialisasi oleh driver klien.
- Jika Layer2Type diatur ke NetPacketLayer2TypeEthernet, maka Layer2HeaderLength harus 14 atau lebih besar.
- Jika Layer2Type diatur ke NetPacketLayer2TypeNull, maka Layer2HeaderLength harus diatur ke 0.
- Jika Layer3Type adalah jenis IPv4, maka Layer3HeaderLength harus 20 atau lebih besar.
- Jika Layer3Type adalah jenis IPv6, maka Layer3HeaderLength harus 40 atau lebih besar.
- Jika Layer4Type diatur ke Tcp, maka Layer4HeaderLength harus 40 atau lebih besar.
- Jika Layer4Type diatur ke Udp, maka Layer4HeaderLength harus 8 atau lebih besar.
- Bidang jenis lapisan harus berada dalam rentang enum yang sesuai.
Tata letak tidak digunakan selama Tx.
NET_FRAGMENT
NET_FRAGMENT aturan bidang bergantung pada apakah driver menerima atau mengirimkan, dan pada apakah buffer fragmen dilampirkan ke paket oleh driver atau oleh kerangka kerja.
Rx atau Tx | Catatan |
---|---|
Rx |
|
Tx |
|