struktur PD_BUFFER (ndis.h)

Struktur ini mewakili paket PacketDirect (PD), atau sebagian paket PD dalam antrean.

Sintaks

typedef struct _PD_BUFFER {
  struct _PD_BUFFER   *NextPDBuffer;
  struct _PD_BUFFER   *NextPartialPDBuffer;
  PVOID               PDClientReserved;
  PVOID               PDClientContext;
  PUCHAR              DataBufferVirtualAddress;
  DMA_LOGICAL_ADDRESS DataBufferDmaLogicalAddress;
  ULONG               DataBufferSize;
  USHORT              PDClientContextSize;
  USHORT              Attributes;
  USHORT              Flags;
  USHORT              DataStart;
  ULONG               DataLength;
  union {
    struct {
      union {
        ULONG64 RxFilterContext;
        ULONG64 GftFlowEntryId;
      };
      ULONG                         RxHashValue;
      union {
        struct {
          ULONG RxIPHeaderChecksumSucceeded : 1;
          ULONG RxTCPChecksumSucceeded : 1;
          ULONG RxUDPChecksumSucceeded : 1;
          ULONG RxIPHeaderChecksumFailed : 1;
          ULONG RxTCPChecksumFailed : 1;
          ULONG RxUDPChecksumFailed : 1;
          ULONG RxHashComputed : 1;
          ULONG RxHashWithL4PortNumbers : 1;
          ULONG RxGftDirectionIngress : 1;
          ULONG RxGftExceptionPacket : 1;
          ULONG RxGftCopyPacket : 1;
          ULONG RxGftSamplePacket : 1;
          ULONG RxReserved1 : 4;
          ULONG RxCoalescedSegCount : 16;
          ULONG RxRscTcpTimestampDelta;
        };
        ULONG RxOffloads[2];
      };
      union {
        struct {
          ULONG TxIsIPv4 : 1;
          ULONG TxIsIPv6 : 1;
          ULONG TxTransportHeaderOffset : 10;
          ULONG TxMSS : 20;
          ULONG TxComputeIPHeaderChecksum : 1;
          ULONG TxComputeTCPChecksum : 1;
          ULONG TxComputeUDPChecksum : 1;
          ULONG TxIsEncapsulatedPacket : 1;
          ULONG TxInnerPacketOffsetsValid : 1;
          ULONG TxReserved1 : 11;
          ULONG TxInnerFrameOffset : 8;
          ULONG TxInnerIpHeaderRelativeOffset : 6;
          ULONG TxInnerIsIPv6 : 1;
          ULONG TxInnerTcpOptionsPresent : 1;
        };
        ULONG TxOffloads[2];
      };
      PD_BUFFER_VIRTUAL_SUBNET_INFO VirtualSubnetInfo;
      PD_BUFFER_8021Q_INFO          Ieee8021qInfo;
      USHORT                        GftSourceVPortId;
      ULONG                         Reserved;
      UINT64                        ProviderScratch;
    } MetaDataV0;
  };
} PD_BUFFER;

Anggota

NextPDBuffer

Penunjuk ke struktur PD_BUFFER berikutnya dalam antrean.

NextPartialPDBuffer

Penunjuk ke struktur PD_BUFFER parsial berikutnya dalam antrean.

PDClientReserved

Dicadangkan untuk penggunaan sistem. Jangan gunakan.

PDClientContext

Klien dan penyedia tidak diizinkan untuk mengubah bidang ini. Jika klien telah mengalokasikan PD_BUFFER dengan nilai bukan nol untuk ClientContextSize, maka PDClientContext mengacu pada ukuran buffer ClientContextSize. Jika tidak, bidang ini NULL.

DataBufferVirtualAddress

Bidang ini mewakili alamat yang dapat digunakan host dan perangkat lunak untuk mengakses/memodifikasi konten paket. Data paket aktual selalu ada di DataBufferVirtualAddress+DataStart. Penyedia dan platform tidak pernah memodifikasi nilai bidang ini setelah inisialisasi PD_BUFFER .

DataBufferDmaLogicalAddress

Bidang ini mewakili lokasi memori logis yang digunakan untuk menyimpan data paket. Penyedia harus menggunakan untuk DMA. Data paket aktual selalu ada di DataBufferDmaLogicalAddress+DataStart. Penyedia dan platform tidak boleh memodifikasi nilai bidang ini setelah inisialisasi PD_BUFFER .

DataBufferSize

Ini adalah ukuran total buffer data yang dialokasikan. Penyedia dan platform tidak boleh memodifikasi nilai bidang ini setelah inisialisasi PD_BUFFER . Jenis data ini adalah ULONG alih-alih USHORT karena offload pengiriman besar.

PDClientContextSize

Ketika nilai ini bukan nol, itu adalah ukuran buffer yang diacu oleh PDClientContext. Nilai bidang ini hanya boleh dimodifikasi oleh platform. Platform tidak mengubah nilai bidang ini setelah alokasi PD_BUFFER .

Attributes

Atribut tidak boleh dimodifikasi oleh penyedia. Tabel di bawah ini mencantumkan atribut yang dapat dimiliki struktur PD_BUFFER ini.

Atribut Deskripsi
PD_BUFFER_ATTR_BUILT_IN_DATA_BUFFER PD_BUFFER yang dialokasikan dengan buffer data yang menyertainya sendiri akan memiliki set atribut ini. Atribut PD_BUFFER tidak boleh dimodifikasi oleh klien atau penyedia.

Flags

Tabel berikut ini mencantumkan bendera yang dapat dimiliki struktur PD_BUFFER ini.

Bendera Deskripsi
PD_BUFFER_FLAG_PARTIAL_PACKET_HEAD Menunjukkan bahwa buffer ini adalah kepala paket parsial.

DataStart

Bidang ini menunjukkan di mana paket dimulai relatif terhadap alamat awal asli buffer data yang dialokasikan. Penyedia tidak boleh mengubah bidang ini. Penyedia menambahkan nilai ini ke nilai DataBufferDmaLogicalAddress untuk mendapatkan alamat DMA target aktual untuk penerimaan/transmisi paket. Misalnya, nilai alamat DMA target dalam deskriptor penerima/pengiriman perangkat keras harus diatur ke DataBufferDmaLogicalAddress+DataStart saat PD_BUFFER diposting ke antrean terima/kirim.

DataLength

Panjang paket ini atau data paket parsial.

MetaDataV0

MetaDataV0.RxFilterContext

Penyedia mengatur ini ke nilai konteks filter yang diperoleh dari filter yang cocok yang mengarahkan paket ke antrean terima. Nilai konteks filter ditentukan oleh klien saat mengonfigurasi filter.

MetaDataV0.GftFlowEntryId

Jika salah satu bit RxGftExceptionPacket atau RxGftCopyPacket atau RxGftSamplePacket diatur, nilai RxFilterContext ditimpa dengan nilai Id entri aliran GFT.

MetaDataV0.RxHashValue

Nilai hash dihitung untuk paket masuk yang dikemudikan ke antrean terima menggunakan RSS.

MetaDataV0.RxIPHeaderChecksumSucceeded

Bidang offload RX umum yang menunjukkan apakah checksum header IP berhasil.

MetaDataV0.RxTCPChecksumSucceeded

Bidang offload RX umum yang menunjukkan apakah checksum TCP berhasil.

MetaDataV0.RxUDPChecksumSucceeded

Bidang offload RX umum yang menunjukkan apakah checksum UDP berhasil.

MetaDataV0.RxIPHeaderChecksumFailed

Bidang offload RX umum yang menunjukkan apakah checksum header IP gagal.

MetaDataV0.RxTCPChecksumFailed

Bidang offload RX umum yang menunjukkan apakah checksum TCP gagal.

MetaDataV0.RxUDPChecksumFailed

Bidang offload RX umum yang menunjukkan apakah checksum UDP gagal.

MetaDataV0.RxHashComputed

Bidang offload RX umum yang menunjukkan apakah hash dihitung.

MetaDataV0.RxHashWithL4PortNumbers

Bidang offload RX umum yang menunjukkan hash dihitung dengan nomor port L4.

MetaDataV0.RxGftDirectionIngress

MetaDataV0.RxGftExceptionPacket

Bidang offload RX umum yang menunjukkan ini adalah paket pengecualian GFT.

MetaDataV0.RxGftCopyPacket

Bidang offload RX umum yang menunjukkan ini adalah paket salinan GFT.

MetaDataV0.RxGftSamplePacket

Bidang offload RX umum yang menunjukkan ini adalah paket sampel GFT.

MetaDataV0.RxReserved1

Dicadangkan.

MetaDataV0.RxCoalescedSegCount

Bidang offload RX umum yang berisi jumlah segmen yang digabungkan.

MetaDataV0.RxRscTcpTimestampDelta

Bidang offload RX umum yang berisi perbedaan tanda waktu RSC dan TCP.

MetaDataV0.RxOffloads[2]

Offload RX untuk buffer ini.

MetaDataV0.TxIsIPv4

Bidang offload TX umum yang menunjukkan paket ini adalah IPv4.

MetaDataV0.TxIsIPv6

Bidang offload TX umum yang menunjukkan paket ini adalah IPv6.

MetaDataV0.TxTransportHeaderOffset

Bidang offload TX umum yang berisi offset header paket.

MetaDataV0.TxMSS

Bidang offload TX umum yang berisi ukuran segmen maksimum paket ini.

MetaDataV0.TxComputeIPHeaderChecksum

Bidang offload TX umum yang menunjukkan checksum header IP dihitung.

MetaDataV0.TxComputeTCPChecksum

Bidang offload TX umum yang menunjukkan checksum TCP dihitung.

MetaDataV0.TxComputeUDPChecksum

Bidang offload TX umum yang menunjukkan checksum UDP dihitung.

MetaDataV0.TxIsEncapsulatedPacket

Bidang offload TX umum yang menunjukkan paket dienkapsulasi.

MetaDataV0.TxInnerPacketOffsetsValid

Bidang offload TX umum yang menunjukkan offset paket dalam valid.

MetaDataV0.TxReserved1

Dicadangkan.

MetaDataV0.TxInnerFrameOffset

Bidang offload TX umum yang berisi offset bingkai dalam.

MetaDataV0.TxInnerIpHeaderRelativeOffset

Bidang offload TX umum yang berisi offset relatif header IP dalam.

MetaDataV0.TxInnerIsIPv6

Bidang offload TX umum yang menunjukkan paket dalam adalah IPv6.

MetaDataV0.TxInnerTcpOptionsPresent

Bidang offload TX umum yang menunjukkan opsi TCP dalam ada.

MetaDataV0.TxOffloads[2]

Offload TX untuk buffer ini.

MetaDataV0.VirtualSubnetInfo

Informasi subnet virtual.

MetaDataV0.Ieee8021qInfo

Informasi IEEE 802.1Q.

MetaDataV0.GftSourceVPortId

ID port virtual sumber GFT.

MetaDataV0.Reserved

Dicadangkan untuk penggunaan sistem.

MetaDataV0.ProviderScratch

Bidang coretan yang dapat digunakan penyedia PD untuk tujuannya sendiri saat PD_BUFFER duduk di antrean penyedia (dengan kata lain, diposting oleh klien tetapi belum dikosongkan kembali oleh klien). Setelah PD_BUFFER dikosongkan oleh klien, tidak ada jaminan bahwa konten bidang ini akan dipertahankan.

Keterangan

Jika paket L2 diwakili oleh beberapa struktur PD_BUFFER , PD_BUFFER pertama harus memiliki set bendera PD_BUFFER_ATTR_BUILT_IN_DATA_BUFFER dan bidang NextPartialPDBuffer harus menunjuk ke struktur PD_BUFFER parsial yang merupakan seluruh paket. Setiap struktur PD_BUFFER parsial harus menunjuk ke PD_BUFFER parsial berikutnya dengan menggunakan NextPartialPDBuffer dibandingkan dengan bidang NextPDBuffer. Bidang NextPDBuffer harus NULL di semua struktur PD_BUFFER parsial kecuali untuk buffer kepala. Semua struktur PD_BUFFER parsial kecuali untuk buffer kepala harus menghapus bendera PD_BUFFER_ATTR_BUILT_IN_DATA_BUFFER. PD_BUFFER parsial terakhir harus memiliki bidang NextPartialPDBuffer yang diatur ke NULL. Panjang total paket L2 adalah jumlah bidang DataLength dari setiap PD_BUFFER parsial. Head PD_BUFFER harus berisi hingga dan termasuk header transportasi IP (TCP, UDP, SCTP, dll). Dalam kasus enkapulasi atau enkapulasi ganda, header transportasi IP paling dalam harus terkandung dalam PD_BUFFER kepala.

Saat memposting struktur PD_BUFFER untuk menerima antrean, DataLength diabaikan oleh penyedia (Untuk informasi selengkapnya lihat deskripsi ReceiveDataLength dalam struktur NDIS_PD_QUEUE_PARAMETERS ). Saat pengurasan selesai PD_BUFFER struktur dari antrean terima, penyedia menyimpan panjang paket yang diterima di bidang DataLength. Panjangnya tidak termasuk FCS atau header 801Q yang dilucuti. Saat memposting struktur PD_BUFFER untuk mengirimkan antrean, DataLength menunjukkan panjang paket yang akan dikirim. Saat pengurasan selesai PD_BUFFER struktur dari mengirimkan antrean, penyedia membiarkan bidang DataLength tidak dimodifikasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10
Server minimum yang didukung Server Windows 2016
Header ndis.h