Introduzione agli anelli di rete
Panoramica di NET_RING
Un NET_RING è un buffer circolare di dati di rete condivisi tra NetAdapterCx e un driver client. Ogni coda di pacchetti in un driver client ha due anelli: un anello di pacchetti per i descrittori di pacchetti core e un anello di frammento per i descrittori di frammenti di ogni pacchetto.
Per altre informazioni sui descrittori di pacchetti, vedere Descrittori di pacchetti ed estensioni.
Ogni descrittore principale nell'anello di pacchetti ha indici nell'anello di frammento per individuare i descrittori di frammenti del pacchetto. Un'altra struttura di dati, la NET_RING_COLLECTION, raggruppa l'anello di pacchetti e l'anello di frammento per una determinata coda di pacchetti, come illustrato nel diagramma seguente.
Ogni coda di pacchetti ha una propria struttura NET_RING_COLLECTION e, di conseguenza, il proprio anello di pacchetti, anello di frammento e descrittori in tali anelli. Pertanto, l'operazione di trasferimento dei dati di rete di ogni coda di pacchetti è completamente indipendente. Per altre informazioni sulle code di pacchetti, vedere Trasmettere e ricevere code.
proprietà dell'elemento NET_RING
Ogni elemento in un NET_RING è di proprietà del driver client o di NetAdapterCx. La proprietà è controllata da tre indici, che contrassegnano le sezioni del NET_RING. Questi indici sono descritti nella tabella seguente. L'azione di spostamento di questi indici è descritta dalla semantica post e di svuotamento .
NET_RING nome dell'indice | Descrizione | Obbligatorio per il trasferimento dei dati di rete | Modificato da |
---|---|---|---|
BeginIndex | Inizio dell'intervallo di elementi nella NET_RING di proprietà del driver client NIC. BeginIndex è anche l'inizio della sottosezione di svuotamento della NET_RING. Quando BeginIndex viene incrementato, il driver svuota gli elementi dall'anello e trasferisce la proprietà di tali elementi al sistema operativo. | Sì | Driver client della scheda di interfaccia di rete |
NextIndex | Inizio della sottosezione post del NET_RING. NextIndex divide la sezione dell'anello di proprietà del driver client nelle sottosezioni post e svuotamento. Quando NextIndex viene incrementato, il driver inserisce i buffer nell'hardware e trasferisce i buffer nella sezione di svuotamento dell'anello. | No | Driver client della scheda di interfaccia di rete |
Endindex | Fine dell'intervallo di elementi nella NET_RING di proprietà del driver client NIC. I driver client possiedono elementi fino a EndIndex - 1 inclusi. | Sì | NetAdapterCx |
La modifica di questi indici durante il callback evtPacketQueueAdvance di una coda di pacchetti è il modo in cui i driver client trasferiscono i dati di rete tra il sistema e l'hardware della scheda di interfaccia di rete.
I driver client possiedono ogni elemento da BeginIndex a EndIndex - 1 incluso. Ad esempio, se BeginIndex è 2 e EndIndex è 5, il driver client possiede tre elementi: gli elementi con valori di indice 2, 3 e 4.
Se BeginIndex è uguale a EndIndex, il driver client non possiede alcun elemento.
NetAdapterCx inserisce gli elementi nel buffer circolare incrementando EndIndex. Un driver client svuota i buffer e restituisce la proprietà degli elementi avanzando BeginIndex.
NextIndex è facoltativo per i driver client da usare e viene fornito per praticità separando le sottosezioni post e svuotamento della sezione del driver client dell'anello.
Gli elementi con valori di indice compresi tra NextIndex e EndIndex - 1 inclusi sono di proprietà del client ma non sono ancora stati registrati nell'hardware. Se NextIndex è uguale a BeginIndex, il driver client non dispone di buffer completati da trasferire nel sistema operativo. Se NextIndex è uguale a EndIndex, il driver client non dispone di buffer da inserire nell'hardware.
Poiché l'anello di rete è circolare, alla fine i valori dell'indice vengono disposti intorno alla fine del buffer e tornano all'inizio. NetAdapterCx gestisce automaticamente il wrapping dei valori di indice intorno all'anello quando il driver client chiama il metodo appropriato.
Per informazioni specifiche sulla gestione degli elementi in anelli net, vedere Net Ring Element Management.For specific information about managing the elements in net rings, see Net ring element management.
Invio e ricezione di dati di rete con anelli di rete
Per altre informazioni ed esempi di codice sull'invio e la ricezione di dati di rete in anelli di rete, vedere gli argomenti seguenti.