Freigeben über


NDIS_TCP_OFFLOAD_EVENT_INDICATE Rückruffunktion (ndischimney.h)

[Das TCP-Schornstein-Offload-Feature ist veraltet und sollte nicht verwendet werden.]

Ein Offload-Ziel ruft die NdisTcpOffloadEventHandler--Funktion auf, um ein Ereignis anzugeben, das sich auf eine entladene 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, mit dem die entladene TCP-Verbindung identifiziert wird, auf der die Angabe erfolgt. Beim Entladen der Verbindung wurde dieser Handle im NdisOffloadHandle- Mitglied 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 Verbindung initiiert hat, indem ein FIN-Segment an die Verbindung gesendet wird.

TcpIndicateRetrieve

Gibt an, dass das Offload-Ziel den Hoststapel anfordert, die Auslagerung einer TCP-Verbindung zu beenden.

TcpIndicateAbort

Gibt an, dass der Remotehost eine abgebrochene Verbindung initiiert hat, indem ein akzeptables RST-Segment für die Verbindung gesendet wird.

TcpIndicateSendBacklogChange

Gibt eine Änderung der bevorzugten Größe des Sendebackprotokolls an.

[in] EventSpecificInformation

Gibt zusätzliche Informationen zum 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 Offload-Ziel aufweisen soll.

Rückgabewert

Nichts

Bemerkungen

zurück, der eine ordnungsgemäße Verbindung angibt

Ein Offloadziel sollte nur dann auf eine ordnungsgemäße Trennung hinweisen, wenn:
  • Es hat ein FIN-Segment vom Remotehost erhalten.
  • Alle daten, die vor dem Empfang des FIN-Segments über die Verbindung empfangen wurden, wurden von der Clientanwendung genutzt (d. h., es gibt keine Empfangendaten, die für die Verbindung angegeben werden sollen).
Das Offloadziel darf die Ressourcen für die Verbindung erst freigeben, wenn der Hoststapel die Auslagerung der Verbindung beendet.

Beachten Sie, dass eine ordnungsgemäße Verbindung nur die Hälfte der Verbindung heruntergefahren wird. Die Sendehälfte der Verbindung wird nicht beendet.

zurück, der eine abgebrochene Verbindung angibt

Wenn ein Offloadziel ein akzeptables RST-Segment für eine TCP-Verbindung empfängt, muss folgendes erfolgen:
  1. Markieren Sie in ihrem internen Zustand für die Verbindung die Verbindung als abgebrochen.
  2. Rufen Sie die NdisTcpOffloadEventHandler--Funktion mit einer EventType- von TcpIndicateAbortauf.
    Hinweis Wenn der Miniport das TcpIndicateAbort Ereignis angibt, beendet der Host-TCP/IP-Stapel die Auslagerung der Verbindung. Das Offload-Ziel ist frei, um die TcpIndicateAbort Ereignis anzugeben, sobald das RST-Segment eintrifft.
     
  3. Schließen Sie alle ausstehenden Sendeanforderungen ab und trennen Sie Anforderungen für die Verbindung mit NDIS_STATUS_REQUEST_ABORTED. Das Offloadziel schreibt diesen Statuswert in das Status Member jeder NET_BUFFER_LIST Struktur in der verknüpften Liste, die an die verknüpfte Liste übergeben wird. NdisTcpOffloadSendComplete--Funktion oder zur NdisTcpOffloadDisconnectComplete Funktion.
Das Offloadziel darf die Ressourcen für die Verbindung erst freigeben, wenn der Hoststapel die Auslagerung der Verbindung beendet.

anfordern, dass eine TCP-Verbindung beendet wird

Das Offload-Ziel gibt den Grund für die Beendigungsanforderung als TCP_UPLOAD_REASON Wert im EventSpecificInformation Parameter an, der an die NdisTcpOffloadEventHandler--Funktion übergeben wird. Als Reaktion ruft der Hoststapel die MiniportTerminateOffload Funktion des Offload-Ziels auf.

Das Offload-Ziel kann nur die Beendigung einer TCP-Verbindung pro Aufruf an NdisTcpOffloadEventHandleranfordern. Das Offloadziel kann die Beendigung eines Benachbarten Zustandsobjekts oder eines Pfadstatusobjekts nicht anfordern. Nur der Hoststapel kann die Beendigung eines Benachbarten- oder Pfadstatusobjekts initiieren.

In der folgenden Tabelle werden Ereignisse oder Umstände beschrieben, die dazu führen können, dass ein Offloadziel die Beendigung des Offloads einer TCP-Verbindung anfordert.

Die spalte mit der rechten Maustaste gibt für jede TCP_UPLOAD_REASONan, ob der Hoststapel immer die Verbindung hochlädt (obligatorisch) oder die Verbindung (optional) hochladen kann oder nicht. In den obligatorischen Fällen setzt ein Offloadziel die Verarbeitung der entladenen Verbindung nicht fort. In den optionalen Fällen muss ein Offloadziel in der Lage sein, die Verarbeitung für die entladene Verbindung fortzusetzen, wenn der Hoststapel die Auslagerung dieser Verbindung nicht beendet.

Ereignis/Umstände TCP_UPLOAD_REASON Beendigung der TCP-Verbindung durch den Hoststapel
Der Hardwarezustand, der zum Nachverfolgen der Verbindung verwendet wird, ist beschädigt. HardwareFailure- Obligatorisch
Das Offload-Ziel hat versucht, Daten in einer TCP-Verbindung zu senden, die von einem ungültigen Zustandsobjekt abhängt. InvalidState- Obligatorisch
Das Offload-Ziel empfängt ein Segment mit dem URG-Bit im TCP-Header. Beachten Sie, dass das Offload-Ziel keine ACK sendet, um die dringenden Daten zu bestätigen. ReceivedUrgentData- Obligatorisch
Timeout für die TCP-Verbindung. TimeoutExpiration- Obligatorisch
Das Offload-Ziel fordert einen Upload aus einem nicht angegebenen Grund an. UploadRequested- Obligatorisch
Das Offloadziel hat festgestellt, dass zu viele Übertragungssegmente in der TCP-Verbindung abgelegt werden. HighDropRate- Wahlfrei
Das Offloadziel hat festgestellt, dass zu viele Fragmente in der TCP-Verbindung empfangen werden. HighFragmentation- Wahlfrei
Das Offload-Ziel hat zu viele Out-of-Order-Segmente für die TCP-Verbindung erhalten. HighOutofOrderPackets Wahlfrei
Die Aktivität (sendet/empfängt) für die TCP-Verbindung ist zu niedrig. LowActivity- Wahlfrei
Für die TCP-Verbindung gibt es keine vorab bereitgestellten Empfangspuffer. NoBufferProposting Wahlfrei
Die empfangenen Puffer für die TCP-Verbindung sind zu klein. SmallIO- Wahlfrei
 

Das Offload-Ziel 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, die Verbindung empfängt jedoch 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– Möglicherweise sendet der lokale Host weiterhin Daten.
Ein Offloadziel kann die Beendigung aller TCP-Verbindungen anfordern, die in das Ziel geladen wurden. Weitere Informationen finden Sie unter NdisMOffloadEventIndicate.

zurück, der eine Änderung in der Größe des Senderücksprotokolls angibt

Die Größe des Sende-Backlogs kann eine Funktion der Roundtripzeit (Roundtrip Time, RTT) für die Verbindung, die Schnittstellenbandbreite und andere Parameter sein. Die spezifischen Variablen und Algorithmus, die das Offloadziel zum Berechnen der Größe des Senderücks verwendet, sind implementierungsspezifisch. Ein Offloadziel könnte z. B. mindestens das Bandbreitenverzögerungsprodukt und das angekündigte Empfangsfenster als Algorithmus verwenden. Beachten Sie jedoch, dass die Größe des Sende-Backlogs nicht je nach Anzahl der Datenbytes variiert, die zurzeit für die Übertragung in der Verbindung bereitgestellt werden.

Das Offloadziel sollte einen Einschränkungsmechanismus implementieren, um sicherzustellen, dass, wenn sich der Wert für SendBacklogSize zu häufig oder zu klein ändert, das Offloadziel keine SendBacklogSize Ereignis angibt. Dadurch wird verhindert, dass ein Sturm von Ereignisanzeigen auftritt.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- ndischimney.h (include Ndischimney.h)
IRQL- DISPATCH_LEVEL

Siehe auch

angibt, dass TCP-Chimney-Specific-Ereignisse

MiniportInitiateOffload-

MiniportTerminateOffload-

NdisMOffloadEventIndicate

NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete

NdisTcpOffloadSendComplete

ProtocolTcpOffloadEvent-

Reaktion auf den Empfang eines FIN- oder RST-Segments