NDIS_TCP_OFFLOAD_EVENT_INDICATE funzione di callback (ndischimney.h)
[La funzionalità offload del camino TCP è deprecata e non deve essere usata.]
Una destinazione di 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 NdisOffloadHandle membro del NDIS_MINIPORT_OFFLOAD_BLOCK_LIST struttura associata allo stato della connessione.
[in] EventType
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 di invio che lo stack host deve avere in sospeso nella destinazione di offload.
Valore restituito
Nessuno
Osservazioni
che indica 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 indicare sulla connessione.
Si noti che una disconnessione normale arresta solo la metà della connessione. Non arresta la metà dell'invio della connessione.
che indica una disconnessione interrotta
Quando una destinazione offload riceve un segmento RST accettabile su una connessione TCP, deve:- Nello stato interno della connessione contrassegnare la connessione come interrotta.
-
Chiamare la funzione di NdisTcpOffloadEventHandlerEvent Type di 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 nella 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 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 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 (facoltativo). Nei casi obbligatori, una destinazione offload non continua a elaborare la connessione offloaded. Nei casi facoltativi, una destinazione di offload deve essere in grado di continuare l'elaborazione sulla 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 | Opzionale |
La destinazione di offload ha rilevato che nella connessione TCP vengono ricevuti troppi frammenti. | HighFragmentation | Opzionale |
La destinazione di offload ha ricevuto troppi segmenti non ordinati sulla connessione TCP. | HighOutofOrderPackets | Opzionale |
L'attività (invia/riceve) sulla connessione TCP è troppo bassa. | LowActivity | Opzionale |
Non sono presenti buffer di ricezione assurdi per la connessione TCP. | NoBufferProposting | Opzionale |
I buffer ricevuti registrati per la connessione TCP sono troppo piccoli. | SmallIO | Opzionale |
La destinazione di offload non deve avviare la chiusura 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 offloaded potrebbe comunque ricevere dati dall'host remoto.
- CLOSE_WAIT: l'host locale potrebbe comunque inviare dati.
indicante una modifica delle 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 specifici dell'implementazione. Una destinazione di offload potrebbe, ad esempio, usare almeno il prodotto con 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 registrati per la trasmissione sulla connessione.La destinazione di offload deve implementare un meccanismo di limitazione per garantire che, se il valore per SendBacklogSize modifiche troppo frequenti o troppo piccole, la destinazione di offload non indica un evento sendBacklogSize . In questo modo si impedisce che si verifichi una tempesta di indicazioni di evento.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | ndischimney.h (include Ndischimney.h) |
IRQL | DISPATCH_LEVEL |
Vedere anche
che indica eventi TCP Chimney-Specific
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete