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 |
|
Tx | NetAdapterCx |
|
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 |
|
Tx |
|