Share via


Gestione degli elementi dell'anello net

Seguire le indicazioni riportate in questo argomento per gestire le strutture NET_RING e i relativi elementi durante il trasferimento dei dati di rete. Le regole in questo argomento descrivono quali membri dei driver client degli elementi circolari net possono modificare e quando, a seconda dello scenario del percorso dati, nonché i driver client di informazioni generali devono tenere presente per queste strutture.

Importante

I driver client devono rispettare queste indicazioni durante tutte le fasi di sviluppo. Se un driver client non rispetta queste indicazioni durante il test con Driver Verifier, Driver Verifier segnala una violazione e attiva un controllo di bug nel dispositivo sottoposto a test.

NET_RING

Quando viene avviata la coda di pacchetti padre del NET_RING, tutti gli indici nell'anello vengono inizializzati su 0.

Nella tabella seguente vengono descritti i membri dell'anello net che i driver client possono modificare.

Campo Il driver client può modificare
OSReserved1 No
ElementStride No
Sizeinbytes No
ElementIndexMask No
Endindex No
OSReserved0 No
OSReserved2 No
BeginIndex Sì (obbligatorio)
NextIndex Sì (facoltativo ): il framework non legge mai NextIndex.
Scratch Sì (facoltativo ): il framework non legge mai Scratch.
Buffer No

I driver client non devono modificare alcun membro di sola lettura di questa struttura, né devono mai incrementare BeginIndex oltre EndIndex durante una chiamata a EvtPacketQueueAdvance.

Per altre informazioni sulla proprietà dell'indice negli anelli di rete, vedere Introduzione agli anelli di rete.

NET_PACKET

I campi in un NET_PACKET sono sensibili ai diversi contesti in cui opera il percorso dati. Indica se il campo Ignore del pacchetto è impostato e se il driver riceve (Rx) o trasmette (Tx) il pacchetto modifica il set di regole applicato al pacchetto.

Nella tabella seguente vengono fornite indicazioni per i driver in ogni scenario.

Rx o Tx Ignora campo è impostato da... Note
Rx Driver client
  • Durante Rx, i driver client impostano Ignora se necessario e il framework lo legge. I driver client non devono leggere Ignora in alcun punto durante Rx.
  • Se un driver client imposta il campo Ignora durante Rx, allora:
    • I driver client devono scrivere nel campo Ignora quando si annullano le operazioni Rx per qualsiasi pacchetto che non è stato programmato correttamente nell'hardware. Per altre informazioni, vedi Annullamento dei dati di rete con anelli di rete.
    • I driver client non devono associare le risorse al pacchetto perché non verranno liberate.
  • Se un driver client non imposta il campo Ignora durante Rx, allora:
    • I driver client devono popolare FragmentIndex, FragmentCount e tutti i campi in Layout.
    • FragmentIndex deve essere compreso tra BeginIndex inclusivo e EndIndex esclusivo nell'anello del frammento.
    • FragmentCount non può superare il numero di frammenti tra BeginIndex inclusivo e EndIndex esclusivo nell'anello del frammento.
    • I driver client devono spostare l'anello di pacchetto BeginIndex se spostano l'anello di frammento corrispondente BeginIndex.
    • Dopo la chiamata a EvtPacketQueueAdvance, se un driver client incrementa l'anello di pacchetti BeginIndex , il driver deve anche incrementare l'anello di frammento BeginIndex oltre i frammenti per tale pacchetto. In altre parole, l'anello del frammento BeginIndex deve passare all'elemento EndIndex dei frammenti del pacchetto precedente.
Tx NetAdapterCx
  • I driver client non devono modificare campi in alcun pacchetto, ad eccezione di Scratch.
  • I driver client possono leggere il valore di Ignore , ma non devono mai scrivervi.
  • Se un pacchetto Tx viene ignorato, il driver non deve leggere alcun campo ad eccezione di Scratch, se necessario.

NET_PACKET_LAYOUT

Durante le operazioni Rx, il campo Layout della NET_PACKET è soggetto alle regole seguenti:

  • Tutti i campi ad eccezione di Reserved0 devono essere inizializzati dal driver client.
  • Se Layer2Type è impostato su NetPacketLayer2TypeEthernet, Layer2HeaderLength deve essere 14 o superiore.
  • Se Layer2Type è impostato su NetPacketLayer2TypeNull, Layer2HeaderLength deve essere impostato su 0.
  • Se Layer3Type è un tipo IPv4, Layer3HeaderLength deve essere 20 o superiore.
  • Se Layer3Type è un tipo IPv6, Layer3HeaderLength deve essere 40 o superiore.
  • Se Layer4Type è impostato su Tcp, Layer4HeaderLength deve essere 40 o superiore.
  • Se Layer4Type è impostato su Udp, Layer4HeaderLength deve essere 8 o superiore.
  • I campi del tipo di livello devono trovarsi all'interno dell'intervallo di enumerazioni appropriato.

Il layout non viene utilizzato durante il Tx.

NET_FRAGMENT

NET_FRAGMENT regole di campo dipendono dalla ricezione o dalla trasmissione del driver e dal fatto che i buffer di frammenti siano collegati ai pacchetti dal driver o dal framework.

Rx o Tx Note
Rx
  • I driver client non possono scrivere nel campo OsReserved_Bounced .
  • Se il driver non è collegato, la capacità non deve essere modificata, ma è necessario modificare ValidLength e Offset .
  • Se il driver è collegato, è necessario modificare tutti Capacity, ValidLength e Offset .
  • Compensare + ValidLength deve essere minore della capacità.
Tx
  • I driver client non possono modificare campi ad eccezione di Scratch.