W_TCP_OFFLOAD_SEND_HANDLER funzione di callback (ndischimney.h)
[La funzionalità di offload del camino TCP è deprecata e non deve essere usata.]
NDIS chiama la funzione MiniportTcpOffloadSend per trasmettere i dati su una connessione TCP offloaded.
Sintassi
W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;
NDIS_STATUS WTcpOffloadSendHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
Parametri
[in] MiniportAdapterContext
Handle in un'area di contesto allocata di destinazione offload in cui la destinazione di offload gestisce le informazioni sullo stato relative a questa istanza dell'adattatore. La destinazione di offload ha fornito questo handle a NDIS quando viene chiamato NdisMSetMiniportAttributes da Funzione MiniportInitializeEx .
[in] MiniportOffloadContext
Puntatore a una posizione di memoria contenente un valore PVOID. Questo valore PVOID fa riferimento al contesto di offload miniport che contiene l'oggetto stato per la connessione TCP su cui trasmettere i dati. La destinazione di offload ha fornito questo valore PVOID quando ha scaricato l'oggetto stato della connessione TCP.
[in] NetBufferList
Puntatore a una struttura NET_BUFFER_LIST . Questa struttura può essere una struttura autonoma o la prima struttura in un elenco collegato di strutture NET_BUFFER_LIST. Ogni struttura NET_BUFFER_LIST nell'elenco descrive un elenco di strutture NET_BUFFER . Ogni struttura NET_BUFFER nell'elenco è mappata a una catena di elenchi di descrittori di memoria (MDLs). Gli ELENCHI di dati contengono i dati da trasmettere. Le NET_BUFFER_LIST e le strutture associate sono bloccate in modo che rimangano residenti nella memoria fisica. Tuttavia, non vengono mappati alla memoria di sistema.
Valore restituito
NDIS_STATUS_PENDING è l'unico valore restituito consentito. Una destinazione offload completa sempre una richiesta di invio in modo asincrono chiamando NdisTcpOffloadSendComplete.
Commenti
Una destinazione di offload deve trasmettere i dati prima in ordine FIFO (First Out). L'ordine dell'elenco collegato di NET_BUFFER_LIST strutture passate da NDIS in NetBufferList rappresenta l'ordine in cui la destinazione di offload deve trasmettere i dati di rete. Inoltre, una destinazione di offload deve inviare i dati ricevuti da più chiamate a MiniportTcpOffloadSend nell'ordine in cui sono stati pubblicati i dati.
Una destinazione offload deve accettare tutte le richieste inviate alla relativa funzione MiniportTcpOffloadSend . Se una destinazione di offload non può completare immediatamente una richiesta di invio, la destinazione di offload deve accodare la richiesta fino a quando non può completarla. La destinazione di offload deve usare il membro MiniportReserved di una struttura NET_BUFFER_LIST per accodare le richieste. Mentre una richiesta di invio è in sospeso, la destinazione di offload mantiene la proprietà delle strutture NET_BUFFER_LIST e di tutte le risorse associate alle strutture NET_BUFFER_LIST.
Lo stack host serializza le richieste di invio per ogni connessione. Lo stack non genererà una richiesta di invio su una connessione mentre è in corso un'altra richiesta di invio su tale connessione. Ciò garantisce che la destinazione di offload riceva sempre le richieste di invio nell'ordine corretto.
Si noti, tuttavia, che lo stack host può chiamare la funzione MiniportTcpOffloadSend su una connessione prima che la destinazione di offload abbia completato una o più chiamate precedenti alla funzione MiniportTcpOffloadSend sulla stessa connessione. Si noti anche che lo stack host può chiamare la funzione MiniportTcpOffloadSend di una destinazione offload su una connessione mentre una o più chiamate alla funzione MiniportTcpOffloadSend sono in corso su un'altra connessione.
La funzione MiniportTcpOffloadSend deve sincronizzare l'accesso alle code interne dei dati di rete con le altre funzioni MiniportXxx della destinazione offload che accedono alle stesse code. Una destinazione di offload può usare blocchi spin per sincronizzare l'accesso alle code.
La destinazione di offload deve (ma non è necessaria) impostare il bit PSH in ogni limite di NET_BUFFER_LIST. Il modo consigliato per eseguire questa operazione consiste nell'impostare il bit PSH nell'ultimo segmento creato dai dati associati a ogni struttura di NET_BUFFER_LIST, ovvero i dati descritti dalle strutture NET_BUFFER associate alla struttura NET_BUFFER_LIST. In alternativa, la destinazione di offload può impostare il bit PSH nell'ultimo segmento rimanente nella coda di invio prima che la coda di invio venga svuotata.
Lo stack host non richiederà la destinazione di offload per inviare dati urgenti.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | ndischimney.h (include Ndischimney.h) |
IRQL | Qualsiasi livello |