TCP_OFFLOAD_STATE_DELEGATED-Struktur (ndischimney.h)

[Das TCP-Schornsteinauslagerungsfeature ist veraltet und sollte nicht verwendet werden.]

Die TCP_OFFLOAD_STATE_DELEGATED-Struktur enthält die delegierten Variablen eines TCP-Verbindungszustandsobjekts.

Syntax

typedef struct _TCP_OFFLOAD_STATE_DELEGATED {
  OFFLOAD_STATE_HEADER         Header;
  TCP_OFFLOAD_CONNECTION_STATE State;
  USHORT                       Flags;
  ULONG                        RcvNxt;
  ULONG                        RcvWnd;
  ULONG                        SndUna;
  ULONG                        SndNxt;
  ULONG                        SndMax;
  ULONG                        SndWnd;
  ULONG                        MaxSndWnd;
  ULONG                        SendWL1;
  ULONG                        CWnd;
  ULONG                        SsThresh;
  USHORT                       SRtt;
  USHORT                       RttVar;
  ULONG                        TsRecent;
  ULONG                        TsRecentAge;
  ULONG                        TsTime;
  ULONG                        TotalRT;
  UCHAR                        DupAckCount;
  UCHAR                        SndWndProbeCount;
  struct {
    UCHAR ProbeCount;
    ULONG TimeoutDelta;
  } KeepAlive;
  struct {
    UCHAR Count;
    ULONG TimeoutDelta;
  } Retransmit;
  union {
    struct {
      PNET_BUFFER_LIST SendDataHead;
      PNET_BUFFER_LIST SendDataTail;
    };
    ULONG SendBacklogSize;
  };
  union {
    PNET_BUFFER_LIST BufferedData;
    ULONG            ReceiveBacklogSize;
  };
  ULONG                        DWnd;
} TCP_OFFLOAD_STATE_DELEGATED, *PTCP_OFFLOAD_STATE_DELEGATED;

Member

Header

Eine OFFLOAD_STATE_HEADER-Struktur . NDIS legt den Length-Member von Header auf die Größe der TCP_OFFLOAD_STATE_DELEGATED-Struktur in Bytes fest. Das RecognizedOptions-Element von Header ist reserviert.

State

Der aktuelle Zustand der TCP-Verbindung (siehe RFC 793) als einer der folgenden TCP_OFFLOAD_CONNECTION_STATE Werte:

TcpConnectionClosed

Kein Verbindungszustand.

TcpConnectionListen

Warten auf eine Verbindungsanforderung von einem beliebigen Remote-TCP und -Port.

TcpConnectionSynSent

Warten auf eine übereinstimmende Verbindungsanforderung, nachdem eine Verbindungsanforderung gesendet wurde.

TcpConnectionSynRcvd

Warten auf eine Bestätigung der Verbindungsanforderung, nachdem eine Verbindungsanforderung empfangen und gesendet wurde.

TcpConnectionEstablished

Eine offene Verbindung: Empfangene Daten können an den Benutzer übermittelt werden. Der normale Zustand für die Datenübertragungsphase der Verbindung

TcpConnectionFinWait1

Warten auf eine Verbindungsbeendigungsanforderung vom Remote-TCP oder auf eine Bestätigung der zuvor gesendeten Verbindungsabschlussanforderung.

TcpConnectionFinWait2

Warten auf eine Verbindungsabschlussanforderung vom Remote-TCP.

TcpConnectionCloseWait

Warten auf eine Verbindungsbeendigungsanforderung vom lokalen Benutzer.

TcpConnectionClosing

Warten auf eine Bestätigung der Verbindungsbeendigung vom Remote-TCP.

TcpConnectionLastAck

Warten auf eine Bestätigung der Verbindungsabschlussanforderung, die zuvor an das Remote-TCP gesendet wurde, einschließlich einer Bestätigung der Verbindungsbeendigungsanforderung.

TcpConnectionTimeWait

Warten Sie auf genügend Zeit, um sicherzustellen, dass das Remote-TCP die Bestätigung seiner Verbindungsabschlussanforderung erhalten hat.

Beachten Sie, dass der Hoststapel eine TCP-Verbindung auslagern kann, wenn sich die Verbindung in einem beliebigen Zustand mit Ausnahme von TcpConnectionClosed, TcpConnectionListen, TcpConnectionSynRcvd befindet.

TcpConnectionSynSent oder TcpConnectionTimeWait-Zustand . Der Hoststapel kann eine TCP-Verbindung unabhängig vom Verbindungsstatus abfragen, aktualisieren, ungültig erklären oder beenden.

Flags

Ist für das System reserviert.

RcvNxt

Die Sequenznummer für das nächste Empfangssegment (siehe RCV. WEITER in RFC 793).

RcvWnd

Die Größe des Empfangsfensters in Bytes (siehe RCV. WND in RFC 793).

SndUna

Die Sequenznummer für das erste Byte nicht bestätigter Daten (siehe SND. UNA in RFC 793). Weitere Informationen finden Sie unter Senden von Daten, die daten enthalten, die erneut ausgegeben werden sollen.

SndNxt

Die Sequenznummer für das nächste Byte, das an die Verbindung gesendet werden soll (siehe SND. NXT in RFC 793). Weitere Informationen finden Sie unter Senden von Daten, die daten enthalten, die erneut ausgegeben werden sollen.

SndMax

Die maximale Sequenznummer, die für die Verbindung gesendet wurde. Weitere Informationen finden Sie unter Senden von Daten, die daten enthalten, die erneut ausgegeben werden sollen.

SndWnd

Die Größe des Sendefensters in Bytes (siehe SND. WND in RFC 793).

MaxSndWnd

Die maximale Größe des Sendefensters in Bytes (siehe RFC 813).

SendWL1

Die Segmentsequenznummer, die für die letzte Fensteraktualisierung verwendet wurde (siehe SND. WL1 in RFC 793).

CWnd

Die Größe des Überlastungsfensters in Bytes (siehe cwnd in RFC 2581).

SsThresh

Der Schwellenwert für langsamen Start in Bytes (siehe ssthresh in RFC 2581).

SRtt

Die geglättete Roundtripzeit in Takttakten (siehe SRTT in RFCs 793 und 2988). Wird pro Verbindung verwaltet, da der Pfad, der Host und manchmal das Anwendungsverhalten berücksichtigt werden.

RttVar

Die Variation der Roundtripzeit in Takttakten (siehe RTTVAR in RFC 2988).

TsRecent

Der Zeitstempelwert, der im nächsten ACK gesendet werden soll (siehe TS. Zuletzt in RFC 1323)

TsRecentAge

Die Zeitdauer in Takttakten, seit der letzte Zeitstempel empfangen wurde (siehe RFC 1323).

TsTime

Der aktuelle Wert des angepassten Zeitstempels.

TotalRT

Die Gesamtzeit in Takttakten, die für die erneute Übertragung des aktuellen TCP-Segments aufgewendet wurde.

DupAckCount

Die Anzahl der ACKs, die für dieselbe Sequenznummer akzeptiert wurden (siehe RFC 1323).

SndWndProbeCount

Die aktuelle Sendefenster-Testrunde. Eine Beschreibung der Testrunde des Sendefensters finden Sie unter Persist Timer.

KeepAlive

Bei diesem Member handelt es sich um eine Union, die aus den folgenden Membern besteht:

KeepAlive.ProbeCount

Die Anzahl der gesendeten Keepalive-Tests, die keine Antwort erhalten haben (siehe RFC 1122).

KeepAlive.TimeoutDelta

Die verbleibende Zeit in Takten bis zum nächsten keepalive Timeout (siehe RFC 1122). Beachten Sie, dass der Wert -1 unmittelbar nach dem Ausladen der TCP-Verbindung angibt, dass der Keepalive-Timer nicht ausgeführt wurde, als die Verbindung ausgeladen wurde. Wenn der keepalive Timer des Auslagerungsziels nicht ausgeführt wird, sollte das Auslagerungsziel -1 in diesem Member zurückgeben, wenn es auf einen Aufruf der MiniportQueryOffload-Funktion oder der MiniportTerminateOffload-Funktion reagiert.

Retransmit

Bei diesem Member handelt es sich um eine Union, die aus den folgenden Membern besteht:

Retransmit.Count

Die Anzahl der gesendeten Neuübertragungen (siehe RFC 2581).

Retransmit.TimeoutDelta

Die Zeit in Takten bleibt bis zum nächsten Timeout für die erneute Übertragung (siehe RFC 2581). Beachten Sie, dass der Wert -1 unmittelbar nach dem Ausladen der TCP-Verbindung angibt, dass der Timer für die erneute Übertragung nicht ausgeführt wurde, als die Verbindung ausgeladen wurde. Der Timer für die erneute Übertragung wurde nicht ausgeführt, da beim Ausladen der Verbindung keine ausstehenden Sendedaten für die Verbindung vorhanden waren. Wenn der Timer für die Erneute Übertragung des Auslagerungsziels nicht ausgeführt wird, sollte das Auslagerungsziel -1 in diesem Member zurückgeben, wenn es auf einen Aufruf der MiniportQueryOffload-Funktion oder der MiniportTerminateOffload-Funktion reagiert.

SendDataHead

Ein Zeiger auf eine NET_BUFFER_LIST-Struktur . Diese NET_BUFFER_LIST-Struktur befindet sich in der verknüpften Liste, auf die das NetBufferListChain-Element des NDIS_MINIPORT_OFFLOAD_BLOCK_LIST Struktur, die unmittelbar vor der TCP_OFFLOAD_STATE_DELEGATED-Struktur steht. Wenn der NetBufferListChain-ZeigerNULL ist, ist SendDataHead nicht signifikant.

Der SendDataHead-Zeiger zeigt auf die erste NET_BUFFER_LIST-Struktur, deren NET_BUFFER-Struktur die zugeordneten Sendedaten gepuffert hat.

Diese Variable wird nur in einem Auslagerungs- oder Beendigungsvorgang verwendet. Weitere Informationen zur Verwendung dieser Variablen finden Sie unter Behandeln ausstehender Sendedaten während und nach einem Auslagerungsvorgang und Behandeln ausstehender Sendedaten während eines Beendigungsabladungsvorgangs.

SendDataTail

Ein Zeiger auf eine NET_BUFFER_LIST-Struktur . Diese NET_BUFFER_LIST-Struktur befindet sich in der verknüpften Liste, auf die das NetBufferListChain-Element der NDIS_MINIPORT_OFFLOAD_BLOCK_LIST-Struktur verweist, die unmittelbar vor der TCP_OFFLOAD_STATE_DELEGATED-Struktur steht. Wenn der NetBufferListChain-Zeiger NULL ist, ist SendDataTail nicht signifikant.

Der SendDataTail-Zeiger zeigt auf die letzte NET_BUFFER_LIST Struktur, deren NET_BUFFER-Struktur die zugeordneten Sendedaten gepuffert hat.

Diese Variable wird nur in einem Auslagerungs- oder Beendigungsvorgang verwendet. Weitere Informationen zur Verwendung dieser Variablen finden Sie unter Behandeln ausstehender Sendedaten während und nach einem Auslagerungsvorgang und Behandeln ausstehender Sendedaten während eines Beendigungsabladevorgangs.

SendBacklogSize

Das Auslagerungsziel gibt diesen Wert an, um die Anzahl der Datenbytes anzugeben, die der Hoststapel am Auslagerungsziel für eine optimale Leistung aufweisen sollte. (Dies ist die Anzahl der Sendebytes, die an das Auslagerungsziel übergeben wurden, aber noch nicht vom Auslagerungsziel abgeschlossen wurden.) Die spezifischen Variablen und der Algorithmus, die das Auslagerungsziel zum Berechnen der Größe des Sendebacklogs verwendet, sind implementierungsspezifisch. Die Größe des Sendebacklogs kann eine Funktion der Roundtripzeit (Roundtrip Time, RTT) für die Verbindung, die Schnittstellenbandbreite und andere Parameter sein. Ein Auslagerungsziel kann z. B. das Minimum des Bandbreiten-/Verzögerungsprodukts und das angekündigte empfangene Fenster 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 bereitgestellt werden.

Der Hoststapel kann den delegierten TCP-Zustand für die Verbindung abfragen, um die Größe des Sendebacklogs zu erhalten. Darüber hinaus kann das Auslagerungsziel eine Änderung der Größe des Sendebacklogs durch Aufrufen der NdisTcpOffloadEventHandler-Funktion .

Wenn das Auslagerungsziel die Funktion send-backlog-size nicht unterstützt, muss es den Wert 0xFFFFFFFF in SendBacklogSize schreiben, wenn der TCP-delegierte Zustand für die Verbindung abgefragt wird. Die SendBacklogSize-Variable wird im Vorgang zum Beenden des Ausladens nicht verwendet.

BufferedData

Ein Zeiger auf gepufferte Empfangsdaten. Der Hoststapel kann solche Daten beim Auslagern einer TCP-Verbindung an das Auslagerungsziel übergeben. (Weitere Informationen finden Sie unter Behandeln von gepufferten Empfangsdaten während und nach einem Auslagerungsvorgang.) Das Auslagerungsziel kann solche Daten beim Hochladen einer TCP-Verbindung an den Hoststapel übergeben. (Weitere Informationen finden Sie unter Behandeln gepufferter Empfangsdaten während eines Beendigungsabladungsvorgangs.)

ReceiveBacklogSize

Das Auslagerungsziel gibt diesen Wert an, um die Anzahl der Empfangensdatenbytes anzugeben, die im Auslagerungsziel für die ausgeladene TCP-Verbindung gepuffert werden. Der Hoststapel kann den delegierten TCP-Zustand für die Verbindung abfragen, um diesen Wert zu erhalten. Der Hoststapel verwendet diesen Wert, um eine oder mehrere Empfangsanforderungen für die Verbindung zu posten, die groß genug sind, um alle gepufferten Daten aufzunehmen.

Wenn das Auslagerungsziel das Feature "Größe des Empfangsbacklogs" nicht unterstützt, sollte es den Wert 0xFFFFFFFF in ReceiveBacklogSize schreiben.

DWnd

Hinweise

Der Hoststapel stellt Anfangswerte für die delegierten TCP-Variablen bereit, wenn er diese Variablen an das Auslagerungsziel auslädt. Nach dem Ausladen sind die delegierten TCP-Variablen im Besitz des Auslagerungsziels und werden von diesem verwaltet. Nur das Auslagerungsziel kann den Wert einer ausgeladenen delegierten TCP-Variablen ändern. Das Auslagerungsziel benachrichtigt den Hoststapel nicht über Änderungen an den Werten der ausgeladenen delegierten TCP-Variablen. Der Hoststapel kann jedoch den Wert der ausgeladenen delegierten TCP-Variablen abfragen, wodurch NDIS die MiniportQueryOffload-Funktion des Auslagerungsziels aufruft. Wenn der Hoststapel die Auslagerung des TCP-Verbindungszustandsobjekts beendet, indem NDIS die des Auslagerungsziels aufruft MiniportTerminateOffload-Funktion , das Auslagerungsziel übergibt den Wert der delegierten TCP-Variablen im beendeten TCP-Verbindungszustandsobjekt zurück an den Hoststapel.

Bei der Übergabe an ein Auslagerungsziel wird eine TCP_OFFLOAD_STATE_DELEGATED-Struktur einem zugeordnet. NDIS_MINIPORT_OFFLOAD_BLOCK_LIST-Struktur , die einen Header enthält, der als NDIS_OBJECT_HEADER-Struktur formatiert ist. Der Revisionsmember der NDIS_OBJECT_HEADER-Struktur gibt in diesem Fall die Revisionsnummer der TCP_OFFLOAD_STATE_DELEGATED-Struktur an.

Anforderungen

Anforderung Wert
Header ndischimney.h (include Ndischimney.h)

Weitere Informationen

MiniportQueryOffload

MiniportTerminateOffload

NDIS_OBJECT_HEADER

OFFLOAD_STATE_HEADER

TCP_OFFLOAD_STATE_CACHED

TCP_OFFLOAD_STATE_CONST