NDIS_TCP_OFFLOAD_EVENT_INDICATE Rückruffunktion (ndischimney.h)
[Das TCP-Schornsteinauslagerungsfeature ist veraltet und sollte nicht verwendet werden.]
Ein Auslagerungsziel ruft die NdisTcpOffloadEventHandler-Funktion auf, um ein Ereignis anzugeben, das sich auf eine ausgeladene TCP-Verbindung bezieht.
Syntax
NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventIndicate;
void NdisTcpOffloadEventIndicate(
[in] IN NDIS_HANDLE NdisOffloadHandle,
[in] IN ULONG EventType,
[in] IN ULONG EventSpecificInformation
)
{...}
Parameter
[in] NdisOffloadHandle
Ein Handle, das die ausgeladene TCP-Verbindung identifiziert, für die die Angabe erfolgt. Wenn die Verbindung entladen wurde, wurde dieses Handle im NdisOffloadHandle-Element des NDIS_MINIPORT_OFFLOAD_BLOCK_LIST Struktur, die dem Verbindungsstatus zugeordnet war.
[in] EventType
Das Ereignis, das als einer der folgenden TCP_OFFLOAD_EVENT_TYPE-Werte angegeben wird:
TcpIndicateDisconnect
Gibt an, dass der Remotehost eine ordnungsgemäße Trennung initiiert hat, indem er ein FIN-Segment für die Verbindung sendet.
TcpIndicateRetrieve
Gibt an, dass das Auslagerungsziel den Hoststapel anfordert, die Auslagerung einer TCP-Verbindung zu beenden.
TcpIndicateAbort
Gibt an, dass der Remotehost eine abgebrochene Trennung initiiert hat, indem ein akzeptables RST-Segment für die Verbindung gesendet wird.
TcpIndicateSendBacklogChange
Gibt eine Änderung der bevorzugten Größe des Sendebacklogs an.
[in] EventSpecificInformation
Gibt zusätzliche Informationen zu dem Ereignis an, das wie folgt angegeben wird:
TcpIndicateDisconnect
Nicht sinnvoll.
TcpIndicateRetrieve
Gibt den Grund für die Uploadanforderung als TCP_UPLOAD_REASON Wert an. Weitere Informationen finden Sie im Abschnitt Hinweise.
TcpIndicateAbort
Nicht sinnvoll.
TcpIndicateSendBacklogChange
Gibt die optimale Anzahl von Sendedatenbytes an, die der Hoststapel am Auslagerungsziel ausstehen soll.
Rückgabewert
Keine
Bemerkungen
Hinweis auf eine ordnungsgemäße Trennung
Ein Auslagerungsziel sollte nur dann auf eine ordnungsgemäße Trennung hinweisen, wenn:- Es hat ein FIN-Segment vom Remotehost empfangen.
- Alle Daten, die vor dem Empfang des FIN-Segments über die Verbindung empfangen wurden, wurden von der Clientanwendung genutzt (d. h., es sind keine Empfangsdaten in der Verbindung anzugeben).
Beachten Sie, dass bei einer ordnungsgemäßen Trennung nur die Empfangshälfte der Verbindung heruntergefahren wird. Die Sendehälfte der Verbindung wird nicht beendet.
Hinweis auf eine abbruchende Trennung
Wenn ein Auslagerungsziel ein akzeptables RST-Segment für eine TCP-Verbindung empfängt, muss folgendes erforderlich sein:- Markieren Sie in ihrem internen Zustand für die Verbindung die Verbindung als abgebrochen.
-
Rufen Sie die NdisTcpOffloadEventHandler-Funktion mit einem EventType von TcpIndicateAbort auf.Hinweis Wenn der Miniport das TcpIndicateAbort-Ereignis angibt, beendet der TCP/IP-Stapel des Hosts die Auslagerung der Verbindung. Das Auslagerungsziel kann das TcpIndicateAbort-Ereignis angeben, sobald das RST-Segment eintrifft.
- Schließen Sie alle ausstehenden Sendeanforderungen ab, und trennen Sie die Verbindungsanforderungen mit NDIS_STATUS_REQUEST_ABORTED. Das Auslagerungsziel schreibt diesen status Wert in den Status-Member jeder NET_BUFFER_LIST-Struktur in der verknüpften Liste, die an die NdisTcpOffloadSendComplete-Funktion oder NdisTcpOffloadDisconnectComplete-Funktion .
Anfordern der Beendigung einer TCP-Verbindung
Das Auslagerungsziel gibt den Grund für die Beendigungsanforderung als TCP_UPLOAD_REASON Wert im EventSpecificInformation-Parameter an, den es an die NdisTcpOffloadEventHandler-Funktion übergibt. Als Antwort ruft der Hoststapel die MiniportTerminateOffload-Funktion des Auslagerungsziels auf.Das Auslagerungsziel kann nur die Beendigung einer TCP-Verbindung pro Aufruf von NdisTcpOffloadEventHandler anfordern. Das Auslagerungsziel kann nicht die Beendigung eines benachbarten Zustandsobjekts oder eines Pfadzustandsobjekts anfordern. Nur der Hoststapel kann die Beendigung eines Nachbar- oder Pfadzustandsobjekts initiieren.
In der folgenden Tabelle werden Ereignisse oder Umstände beschrieben, die dazu führen können, dass ein Auslagerungsziel die Beendigung der Auslagerung einer TCP-Verbindung angibt.
Die Spalte ganz rechts gibt für jede TCP_UPLOAD_REASON an, ob der Hoststapel die Verbindung immer hochlädt (obligatorisch) oder ob die Verbindung hochgeladen werden kann (optional). In den obligatorischen Fällen setzt ein Auslagerungsziel die Verarbeitung der ausgeladenen Verbindung nicht fort. In den optionalen Fällen muss ein Auslagerungsziel in der Lage sein, die Verarbeitung für die ausgeladene Verbindung fortzusetzen, wenn der Hoststapel die Auslagerung dieser Verbindung nicht beendet.
Ereignis/Umstand | TCP_UPLOAD_REASON | Beenden der TCP-Verbindung durch den Hoststapel |
---|---|---|
Der Hardwarezustand, der zum Nachverfolgen der Verbindung verwendet wird, ist beschädigt. | HardwareFailure | Obligatorisch. |
Das Ziel hat versucht, Daten über eine TCP-Verbindung zu senden, die von einem ungültigen Zustandsobjekt abhängt. | InvalidState | Obligatorisch. |
Das Auslagerungsziel empfängt ein Segment, in dem das URG-Bit im TCP-Header festgelegt ist. Beachten Sie, dass das Auslagerungsziel keine ACK sendet, um die dringenden Daten zu bestätigen. | ReceivedUrgentData | Obligatorisch. |
Für die TCP-Verbindung ist ein Timeout aufgetreten. | TimeoutExpiration | Obligatorisch. |
Das Auslagerungsziel fordert aus einem nicht angegebenen Grund einen Upload an. | UploadRequested | Obligatorisch. |
Das Auslagerungsziel hat erkannt, dass zu viele Übertragungssegmente auf der TCP-Verbindung abgelegt werden. | HighDropRate | Optional |
Das Auslagerungsziel hat erkannt, dass zu viele Fragmente für die TCP-Verbindung empfangen werden. | HighFragmentation | Optional |
Das Auslagerungsziel hat zu viele Out-of-Order-Segmente für die TCP-Verbindung empfangen. | HighOutofOrderPackets | Optional |
Die Aktivität (sendet/empfängt) für die TCP-Verbindung ist zu niedrig. | LowActivity | Optional |
Es gibt keine vorab bereitgestellten Empfangspuffer für die TCP-Verbindung. | NoBufferProposting | Optional |
Die empfangenen Puffer, die für die TCP-Verbindung bereitgestellt werden, sind zu klein. | SmallIO | Optional |
Das Auslagerungsziel darf die Beendigung einer halb geschlossenen TCP-Verbindung nicht initiieren, wenn sich diese Verbindung in einem der folgenden Zustände befindet:
- FIN_WAIT1: Der lokale Hoststapel hat die TCP-Verbindung geschlossen, aber die Verbindung empfängt möglicherweise weiterhin Daten vom Remoteendpunkt.
- FIN_WAIT2: Der lokale Host hat die TCP-Verbindung geschlossen und einen ACK für das gesendete FIN-Segment empfangen, aber die entladene Verbindung empfängt möglicherweise weiterhin Daten vom Remotehost.
- CLOSE_WAIT: Der lokale Host sendet möglicherweise weiterhin Daten.
Angeben einer Änderung der Größe des Sendebacklogs
Die Größe des Sendebacklogs kann eine Funktion der Roundtripzeit (RTT) für die Verbindung, die Schnittstellenbandbreite und andere Parameter sein. Die spezifischen Variablen und der Algorithmus, die das Auslagerungsziel verwendet, um die Größe des Sendebacklogs zu berechnen, sind implementierungsspezifisch. Ein Auslagerungsziel könnte beispielsweise das Minimum des Bandbreitenverzögerungsprodukts und das angekündigte Empfangsfenster als Algorithmus verwenden. Beachten Sie jedoch, dass die Größe des Sendebacklogs nicht abhängig von der Anzahl der Datenbytes variiert, die derzeit für die Übertragung über die Verbindung gebucht werden.Das Auslagerungsziel sollte einen Drosselungsmechanismus implementieren, um sicherzustellen, dass das Auslagerungsziel kein SendBacklogSize-Ereignis angibt, wenn sich der Wert für SendBacklogSize zu häufig oder zu klein ändert. Dadurch wird verhindert, dass ein Sturm von Ereignisanzeigen auftritt.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | ndischimney.h (include Ndischimney.h) |
IRQL | DISPATCH_LEVEL |
Weitere Informationen
Angeben von TCP-Chimney-Specific-Ereignissen
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete