Bagikan melalui


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
  • Selama Rx, driver klien mengatur Abaikan jika perlu, dan kerangka kerja membacanya. Driver klien tidak perlu membaca Abaikan kapan saja selama Rx.
  • Jika driver klien mengatur bidang Ignore selama Rx, maka:
    • Driver klien harus menulis ke bidang Abaikan saat membatalkan operasi Rx untuk paket apa pun yang belum berhasil diprogram ke perangkat keras. Untuk informasi selengkapnya, lihat Membatalkan data jaringan dengan cincin bersih.
    • Driver klien tidak boleh mengaitkan sumber daya dengan paket karena tidak akan dibebaskan.
  • Jika driver klien tidak mengatur bidang Ignore selama Rx, maka:
    • Driver klien harus mengisi FragmentIndex, FragmentCount, dan semua bidang di Tata Letak.
    • FragmentIndex harus antara BeginIndex inklusif dan EndIndex eksklusif di cincin fragmen.
    • FragmentCount tidak boleh melebihi jumlah fragmen antara BeginIndex inklusif dan EndIndex eksklusif dalam cincin fragmen.
    • Driver klien harus memindahkan cincin paket BeginIndex jika mereka memindahkan cincin fragmen yang sesuai BeginIndex.
    • Setelah panggilan ke EvtPacketQueueAdvance, jika driver klien meningkatkan cincin paket BeginIndex maka driver juga harus meningkatkan cincin fragmen BeginIndex melewati fragmen untuk paket tersebut. Dengan kata lain, cincin fragmen BeginIndex harus pindah ke EndIndex dari fragmen paket sebelumnya.
Tx NetAdapterCx
  • Driver klien tidak boleh memodifikasi bidang apa pun dalam paket apa pun kecuali Scratch.
  • Driver klien dapat membaca nilai Abaikan tetapi tidak boleh menulisnya.
  • Jika paket Tx diabaikan, driver tidak boleh membaca bidang apa pun kecuali mungkin untuk Scratch, jika perlu.

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
  • Driver klien tidak dapat menulis ke bidang OsReserved_Bounced .
  • Jika driver tidak terpasang, maka Kapasitas tidak boleh dimodifikasi tetapi ValidLength dan Offset harus dimodifikasi.
  • Jika driver terpasang, maka Kapasitas, ValidLength, dan Offset semuanya harus dimodifikasi.
  • Offset + ValidLength harus kurang dari Kapasitas.
Tx
  • Driver klien tidak dapat mengubah bidang apa pun kecuali untuk Scratch.