NDIS_TCP_OFFLOAD_EVENT_INDICATE funzione di callback (ndischimney.h)

[La funzionalità di offload del camino TCP è deprecata e non deve essere usata.]

Una destinazione offload chiama la funzione NdisTcpOffloadEventHandler per indicare un evento relativo a una connessione TCP offloaded.

Sintassi

NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventIndicate;

void NdisTcpOffloadEventIndicate(
  [in] IN NDIS_HANDLE NdisOffloadHandle,
  [in] IN ULONG EventType,
  [in] IN ULONG EventSpecificInformation
)
{...}

Parametri

[in] NdisOffloadHandle

Handle che identifica la connessione TCP offloaded in cui viene effettuata l'indicazione. Quando la connessione è stata scaricata, questo handle è stato fornito nel membro NdisOffloadHandle del NDIS_MINIPORT_OFFLOAD_BLOCK_LIST struttura associata allo stato della connessione.

[in] EventType

L'evento indicato come uno dei valori di TCP_OFFLOAD_EVENT_TYPE seguenti:

TcpIndicateDisconnect

Indica che l'host remoto ha avviato una disconnessione normale inviando un segmento FIN sulla connessione.

TcpIndicateRetrieve

Indica che la destinazione di offload richiede allo stack host di terminare l'offload di una connessione TCP.

TcpIndicateAbort

Indica che l'host remoto ha avviato una disconnessione interrotta inviando un segmento RST accettabile sulla connessione.

TcpIndicateSendBacklogChange

Indica una modifica delle dimensioni del backlog di invio preferite.

[in] EventSpecificInformation

Specifica informazioni aggiuntive sull'evento indicato di seguito:

TcpIndicateDisconnect

Non significativo.

TcpIndicateRetrieve

Indica il motivo della richiesta di caricamento come valore TCP_UPLOAD_REASON . Per altre informazioni, vedere la sezione Osservazioni.

TcpIndicateAbort

Non significativo.

TcpIndicateSendBacklogChange

Specifica il numero ottimale di byte di dati inviati che lo stack host deve avere in sospeso nella destinazione di offload.

Valore restituito

nessuno

Osservazioni

Indicazione di una disconnessione normale

Una destinazione di offload deve indicare una disconnessione normale solo quando:
  • Ha ricevuto un segmento FIN dall'host remoto.
  • Tutti i dati ricevuti sulla connessione prima della ricezione del segmento FIN sono stati utilizzati dall'applicazione client , ovvero non sono presenti dati di ricezione da indicata nella connessione.
La destinazione di offload non deve liberare le risorse per la connessione fino a quando lo stack host non termina l'offload della connessione.

Si noti che una disconnessione normale arresta solo la metà della connessione. Non arresta la metà dell'invio della connessione.

Indicazione di una disconnessione interrotta

Quando una destinazione di offload riceve un segmento RST accettabile in una connessione TCP, deve:
  1. Nello stato interno della connessione contrassegnare la connessione come interrotta.
  2. Chiamare la funzione NdisTcpOffloadEventHandler con un EventTypedi TcpIndicateAbort.
    Nota Quando il miniport indica l'evento TcpIndicateAbort , lo stack TCP/IP host terminerà l'offload della connessione. La destinazione di offload è gratuita per indicare l'evento TcpIndicateAbort non appena arriva il segmento RST.
     
  3. Completare tutte le richieste di invio in sospeso e disconnettere le richieste sulla connessione con NDIS_STATUS_REQUEST_ABORTED. La destinazione di offload scrive questo valore di stato nel membro Status di ogni struttura NET_BUFFER_LIST nell'elenco collegato che passa all'oggetto Funzione NdisTcpOffloadSendComplete o a Funzione NdisTcpOffloadDisconnectComplete .
La destinazione di offload non deve liberare le risorse per la connessione fino a quando lo stack host non termina l'offload della connessione.

Richiesta di terminazione di una connessione TCP

La destinazione di offload specifica il motivo della richiesta di terminazione come valore TCP_UPLOAD_REASON nel parametro EventSpecificInformation che passa alla funzione NdisTcpOffloadEventHandler . In risposta, lo stack host chiama la funzione MiniportTerminateOffload della destinazione di offload.

La destinazione di offload può richiedere la terminazione di una sola connessione TCP per chiamata a NdisTcpOffloadEventHandler. La destinazione di offload non può richiedere la terminazione di un oggetto stato adiacente o di un oggetto stato del percorso. Solo lo stack host può avviare la terminazione di un oggetto stato adiacente o percorso.

Nella tabella seguente vengono descritti gli eventi o le circostanze che possono causare una destinazione di offload per richiedere la chiusura dell'offload di una connessione TCP.

La colonna più a destra indica, per ogni TCP_UPLOAD_REASON, se lo stack host carica sempre la connessione (obbligatoria) o potrebbe o meno caricare la connessione (facoltativa). Nei casi obbligatori, una destinazione di offload non continua l'elaborazione della connessione offloaded. Nei casi facoltativi, una destinazione di offload deve essere in grado di continuare l'elaborazione nella connessione offloaded se lo stack host non termina l'offload di tale connessione.

Evento/Circostanza TCP_UPLOAD_REASON Terminazione dello stack host della connessione TCP
Lo stato hardware usato per tenere traccia della connessione è danneggiato. HardwareFailure Obbligatorio
La destinazione di offload ha tentato di inviare dati su una connessione TCP che dipende da un oggetto stato invalidato. InvalidState Obbligatorio
La destinazione di offload riceve un segmento con il bit URG impostato nell'intestazione TCP. Si noti che la destinazione di offload non invia un ACK per confermare i dati urgenti. ReceivedUrgentData Obbligatorio
Si è verificato un timeout sulla connessione TCP. TimeoutExpiration Obbligatorio
La destinazione di offload richiede un caricamento per un motivo non specificato. UploadRequested Obbligatorio
La destinazione di offload ha rilevato che troppi segmenti di trasmissione vengono eliminati sulla connessione TCP. HighDropRate Facoltativo
La destinazione di offload ha rilevato che nella connessione TCP vengono ricevuti troppi frammenti. HighFragmentation Facoltativo
La destinazione di offload ha ricevuto troppi segmenti out-of-order sulla connessione TCP. HighOutofOrderPackets Facoltativo
L'attività (invia/riceve) sulla connessione TCP è troppo bassa. LowActivity Facoltativo
Non sono presenti buffer di ricezione assurdi per la connessione TCP. NoBufferProposting Facoltativo
I buffer ricevuti inviati per la connessione TCP sono troppo piccoli. SmallIO Facoltativo
 

La destinazione di offload non deve avviare la terminazione di una connessione TCP semichiusa quando tale connessione si trova in uno degli stati seguenti:

  • FIN_WAIT1-Lo stack host locale ha chiuso la connessione TCP, ma la connessione potrebbe comunque ricevere dati dall'endpoint remoto.
  • FIN_WAIT2-L'host locale ha chiuso la connessione TCP e ha ricevuto un ACK per il segmento FIN inviato, ma la connessione disattivata potrebbe comunque ricevere dati dall'host remoto.
  • CLOSE_WAIT-L'host locale potrebbe comunque inviare dati.
Una destinazione di offload può richiedere la terminazione di tutte le connessioni TCP che sono state disattivate. Per altre informazioni, vedere NdisMOffloadEventIndicate.

Indicazione di una modifica nelle dimensioni del backlog di invio

Le dimensioni del backlog di invio possono essere una funzione del tempo di round trip (RTT) per la connessione, la larghezza di banda dell'interfaccia e altri parametri. Le variabili e l'algoritmo specifici usati dalla destinazione di offload per calcolare le dimensioni del backlog di invio sono specifiche dell'implementazione. Una destinazione di offload potrebbe, ad esempio, usare il minimo del prodotto di ritardo della larghezza di banda e la finestra di ricezione annunciata come algoritmo. Si noti tuttavia che le dimensioni del backlog di invio non variano in base al numero di byte di dati attualmente pubblicati per la trasmissione nella connessione.

La destinazione di offload deve implementare un meccanismo di limitazione per assicurarsi che, se il valore per SendBacklogSize cambia troppo spesso o per un importo troppo piccolo, la destinazione di offload non indica un evento SendBacklogSize . In questo modo si impedisce che si verifichi una tempesta di indicazioni di evento.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione ndischimney.h (includere Ndischimney.h)
IRQL DISPATCH_LEVEL

Vedi anche

Indicazione di eventi di Chimney-Specific TCP

MiniportInitiateOffload

MiniportTerminateOffload

NdisMOffloadEventIndicate

NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete

NdisTcpOffloadSendComplete

ProtocolTcpOffloadEvent

Risposta alla ricezione di un segmento FIN o RST