Introduzione agli anelli di rete

Panoramica 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 include due anelli: un anello di pacchetti per i descrittori di pacchetti core e un anello di frammento per i descrittori di frammento di ogni pacchetto.

Per altre informazioni sui descrittori dei pacchetti, vedere Descrittori di pacchetti e estensioni.

Ogni descrittore di base nell'anello del pacchetto include indici nell'anello del frammento per individuare i descrittori di frammento 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.

Diagramma che mostra il layout multi-anello di una struttura NET_RING_COLLECTION, tra cui un anello di pacchetti e un anello di frammento.

Ogni coda di pacchetti ha la 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 dei pacchetti, vedere Trasmettere e ricevere code.

NET_RING proprietà dell'elemento

Ogni elemento in una NET_RING è di proprietà del driver client o NetAdapterCx. La proprietà è controllata da tre indici, che contrassegnano le sezioni del NET_RING. Questi indici sono descritti nella tabella seguente. L'atto di spostare questi indici è descritto da post e svuota semantica.

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 proprietario del driver client della scheda di interfaccia di rete. BeginIndex è anche l'inizio della sottosezione di scarico del NET_RING. Quando BeginIndex viene incrementato, il driver scarica gli elementi dall'anello e li trasferisce alla proprietà al sistema operativo. Driver client della scheda di interfaccia di rete
NextIndex Inizio della sottosezione post del NET_RING. NextIndex divide la sezione dell'anello che il driver client possiede nelle sottosezioni post e svuota. Quando NextIndex viene incrementato, il driver inserisce i buffer nell'hardware e trasferisce i buffer alla sezione di scarico dell'anello. No Driver client della scheda di interfaccia di rete
Endindex Fine dell'intervallo di elementi nel NET_RING proprietario del driver client della scheda di interfaccia di rete. I driver client sono proprietari di elementi fino a EndIndex - 1 inclusivo. NetAdapterCx

La modifica di questi indici durante il callback EvtPacketQueueAdvance di evtPacketQueueAdvance dei driver client trasferisce i dati di rete tra il sistema e l'hardware della scheda di interfaccia di rete.

I driver client sono proprietari di ogni elemento da BeginIndex a EndIndex - 1 inclusivo. 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 dell'anello 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à nella separazione delle sottosezioni post e svuotamento della sezione del driver client dell'anello.

Gli elementi con valori di indice tra NextIndex e EndIndex - 1 inclusivo sono di proprietà del client, ma non sono ancora stati pubblicati 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 inviare all'hardware.

Poiché l'anello di rete è circolare, alla fine i valori dell'indice vengono a capo 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 di rete, vedere Gestione degli elementi dell'anello net.

Invio e ricezione di dati di rete con anelli di rete

Per altre informazioni e esempi di codice sull'invio e la recupero dei dati di rete negli anelli di rete, vedere gli argomenti seguenti.

Invio di dati di rete con anelli di rete

Ricezione di dati di rete con anelli di rete