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.
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:- Nello stato interno della connessione contrassegnare la connessione come interrotta.
-
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.
- 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 .
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.
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
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete