TCP_OFFLOAD_STATE_DELEGATED structure (ndischimney.h)

[La fonctionnalité de déchargement de cheminée TCP est déconseillée et ne doit pas être utilisée.]

La structure TCP_OFFLOAD_STATE_DELEGATED contient les variables déléguées d’un objet d’état de connexion TCP.

Syntaxe

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;

Membres

Header

Structure OFFLOAD_STATE_HEADER . NDIS définit le membre Length de Header sur la taille, en octets, de la structure TCP_OFFLOAD_STATE_DELEGATED. Le membre RecognizedOptions de Header est réservé.

State

État actuel de la connexion TCP (voir RFC 793) comme l’une des valeurs de TCP_OFFLOAD_CONNECTION_STATE suivantes :

TcpConnectionClosed

Aucun état de connexion.

TcpConnectionListen

En attente d’une demande de connexion à partir d’un port et d’un port TCP distants.

TcpConnectionSynSent

Attente d’une demande de connexion correspondante après avoir envoyé une demande de connexion.

TcpConnectionSynRcvd

Attente d’un accusé de réception de demande de connexion de confirmation après avoir reçu et envoyé une demande de connexion.

TcpConnectionEstablished

Une connexion ouverte : les données reçues peuvent être remises à l’utilisateur. État normal pour la phase de transfert de données de la connexion.

TcpConnectionFinWait1

Attente d’une demande d’arrêt de connexion à partir du protocole TCP distant ou d’un accusé de réception de la demande d’arrêt de connexion précédemment envoyée.

TcpConnectionFinWait2

En attente d’une demande d’arrêt de connexion à partir du protocole TCP distant.

TcpConnectionCloseWait

En attente d’une demande d’arrêt de connexion de la part de l’utilisateur local.

TcpConnectionClosing

Attente d’un accusé de réception de demande d’arrêt de connexion à partir du tcp distant.

TcpConnectionLastAck

Attente d’un accusé de réception de la demande d’arrêt de connexion précédemment envoyée au tcp distant, qui inclut un accusé de réception de sa demande d’arrêt de connexion.

TcpConnectionTimeWait

Attendre suffisamment de temps pour s’assurer que le tcp distant a reçu l’accusé de réception de sa demande d’arrêt de connexion.

Notez que la pile hôte peut décharger une connexion TCP lorsque la connexion est dans n’importe quel état à l’exception de TcpConnectionClosed, TcpConnectionListen, TcpConnectionSynRcvd,

TcpConnectionSynSent, ou TcpConnectionTimeWait , état. La pile d’hôtes peut interroger, mettre à jour, invalider ou arrêter une connexion TCP, quel que soit l’état de la connexion.

Flags

Réservé pour le système.

RcvNxt

Numéro de séquence du segment de réception suivant (voir RCV. SUIVANT dans RFC 793).

RcvWnd

Taille de la fenêtre de réception, en octets (voir RCV. WND dans RFC 793).

SndUna

Numéro de séquence du premier octet de données non reconnues (voir SND. UNA in RFC 793). Pour plus d’informations, consultez Envoyer des données qui contiennent des données à retransmettre.

SndNxt

Numéro de séquence de l’octet suivant à envoyer sur la connexion (voir SND. NXT dans RFC 793). Pour plus d’informations, consultez Envoyer des données qui contiennent des données à retransmettre.

SndMax

Numéro de séquence maximal qui a été envoyé sur la connexion. Pour plus d’informations, consultez Envoyer des données qui contiennent des données à retransmettre.

SndWnd

Taille de la fenêtre d’envoi, en octets (voir SND. WND dans RFC 793).

MaxSndWnd

Taille maximale de la fenêtre d’envoi, en octets (voir RFC 813).

SendWL1

Numéro de séquence de segment utilisé pour la dernière mise à jour de la fenêtre (voir SND. WL1 dans RFC 793).

CWnd

Taille de la fenêtre de congestion, en octets (voir cwnd dans RFC 2581).

SsThresh

Seuil de démarrage lent, en octets (voir ssthresh dans RFC 2581).

SRtt

Durée d’aller-retour lissée, en cycles d’horloge (voir SRTT dans RFC 793 et 2988). Géré par connexion, car il prend en compte le comportement du chemin d’accès, de l’hôte et parfois de l’application.

RttVar

Variation du temps aller-retour, en cycles d’horloge (voir RTTVAR dans RFC 2988).

TsRecent

Valeur d’horodatage à envoyer dans l’ACK suivant (voir TS. Récent dans RFC 1323)

TsRecentAge

Durée, en cycles d’horloge, depuis la réception de l’horodatage le plus récent (voir RFC 1323).

TsTime

Valeur actuelle de l’horodatage ajusté.

TotalRT

Durée totale, en cycles d’horloge, passée à retransmettre le segment TCP actuel.

DupAckCount

Nombre de kits ACL acceptés pour le même numéro de séquence (voir RFC 1323).

SndWndProbeCount

Tour de sonde de la fenêtre d’envoi actuel. Pour obtenir une description du tour de sonde de la fenêtre d’envoi, consultez Persist Timer.

KeepAlive

Ce membre est une union qui se compose des membres suivants :

KeepAlive.ProbeCount

Nombre de sondes keepalive qui ont été envoyées et qui n’ont pas reçu de réponse (voir RFC 1122).

KeepAlive.TimeoutDelta

Temps restant, en horloge, jusqu’au prochain délai d’attente (voir RFC 1122). Notez qu’une valeur de -1 immédiatement après le déchargement de la connexion TCP indique que le minuteur keepalive n’était pas en cours d’exécution lorsque la connexion a été déchargée. Si le minuteur keepalive de la cible de déchargement n’est pas en cours d’exécution, la cible de déchargement doit retourner -1 dans ce membre lors d’un appel à la fonction MiniportQueryOffload ou à la fonction MiniportTerminateOffload.

Retransmit

Ce membre est une union qui se compose des membres suivants :

Retransmit.Count

Nombre de retransmettres qui ont été envoyées (voir RFC 2581).

Retransmit.TimeoutDelta

Heure, en horloge, restant jusqu’au prochain délai de retransmite (voir RFC 2581). Notez qu’une valeur de -1 immédiatement après le déchargement de la connexion TCP indique que le minuteur de retransmettre n’était pas en cours d’exécution lorsque la connexion a été déchargée. Le minuteur de retransmite n’était pas en cours d’exécution, car il n’y avait pas de données d’envoi en attente sur la connexion lors du déchargement de la connexion. Si le minuteur de retransmite de la cible de déchargement n’est pas en cours d’exécution, la cible de déchargement doit retourner -1 dans ce membre lors d’un appel à la fonction MiniportQueryOffload ou à la fonction MiniportTerminateOffload.

SendDataHead

Pointeur vers une structure NET_BUFFER_LIST . Cette structure NET_BUFFER_LIST se trouve dans la liste liée vers laquelle pointe le membre NetBufferListChain du NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure qui précède immédiatement la structure TCP_OFFLOAD_STATE_DELEGATED. Si le pointeur NetBufferListChain a la valeur NULL, SendDataHead n’est pas significatif.

Le pointeur SendDataHead pointe vers la première structure NET_BUFFER_LIST dont NET_BUFFER structure a mis en mémoire tampon les données d’envoi qui lui sont associées.

Cette variable est utilisée uniquement dans une opération de lancement de déchargement ou d’arrêt du déchargement. Pour plus d’informations sur l’utilisation de cette variable, consultez Gestion des données d’envoi en attente pendant et après une opération de déchargement et Gestion des données d’envoi en attente pendant une opération de déchargement d’arrêt.

SendDataTail

Pointeur vers une structure NET_BUFFER_LIST . Cette structure NET_BUFFER_LIST figure dans la liste liée vers laquelle pointe le membre NetBufferListChain de la structure NDIS_MINIPORT_OFFLOAD_BLOCK_LIST qui précède immédiatement la structure TCP_OFFLOAD_STATE_DELEGATED. Si le pointeur NetBufferListChain a la valeur NULL, SendDataTail n’est pas significatif.

Le pointeur SendDataTail pointe vers la dernière structure NET_BUFFER_LIST dont NET_BUFFER structure a mis en mémoire tampon les données d’envoi qui lui sont associées.

Cette variable est utilisée uniquement dans une opération de lancement de déchargement ou d’arrêt du déchargement. Pour plus d’informations sur l’utilisation de cette variable, consultez Gestion des données d’envoi en attente pendant et après une opération de déchargement et Gestion des données d’envoi en attente pendant une opération de déchargement d’arrêt

SendBacklogSize

La cible de déchargement spécifie cette valeur pour indiquer le nombre d’octets de données que la pile hôte doit avoir en attente au niveau de la cible de déchargement pour des performances optimales. (Il s’agit du nombre d’octets d’envoi qui ont été passés à la cible de déchargement, mais qui n’ont pas encore été terminés par la cible de déchargement.) Les variables et l’algorithme spécifiques que la cible de déchargement utilise pour calculer la taille du backlog d’envoi sont spécifiques à l’implémentation. La taille du backlog d’envoi peut être fonction du temps d’aller-retour (RTT) pour la connexion, la bande passante de l’interface et d’autres paramètres. Une cible de déchargement peut, par exemple, utiliser le produit de bande passante/délai minimal et la fenêtre de réception annoncée. Notez toutefois que la taille du backlog d’envoi ne varie pas en fonction du nombre d’octets de données actuellement publiés pour transmission sur la connexion.

La pile hôte peut interroger l’état délégué TCP pour la connexion afin d’obtenir la taille du backlog d’envoi. En outre, la cible de déchargement peut indiquer une modification de la taille du backlog d’envoi en appelant le Fonction NdisTcpOffloadEventHandler .

Si la cible de déchargement ne prend pas en charge la fonctionnalité send-backlog-size, elle doit écrire une valeur de 0xFFFFFFFF dans SendBacklogSize lorsque l’état délégué TCP pour la connexion est interrogé. La variable SendBacklogSize n’est pas utilisée dans l’opération de déchargement d’arrêt.

BufferedData

Pointeur vers les données de réception mises en mémoire tampon. La pile hôte peut transmettre ces données à la cible de déchargement lors du déchargement d’une connexion TCP. (Pour plus d’informations, consultez Gestion des données de réception mises en mémoire tampon pendant et après une opération de déchargement.) La cible de déchargement peut transmettre ces données à la pile hôte lors du chargement d’une connexion TCP. (Pour plus d’informations, consultez Gestion des données de réception mises en mémoire tampon pendant une opération de déchargement d’arrêt.)

ReceiveBacklogSize

La cible de déchargement spécifie cette valeur pour indiquer le nombre d’octets de données de réception qui sont mis en mémoire tampon dans la cible de déchargement pour la connexion TCP déchargée. La pile hôte peut interroger l’état délégué TCP pour la connexion afin d’obtenir cette valeur. La pile hôte utilise cette valeur pour publier sur la connexion une ou plusieurs demandes de réception suffisamment volumineuses pour contenir toutes les données mises en mémoire tampon.

Si la cible de déchargement ne prend pas en charge la fonctionnalité de taille du backlog de réception, elle doit écrire une valeur de 0xFFFFFFFF dans ReceiveBacklogSize .

DWnd

Remarques

La pile hôte fournit des valeurs initiales pour les variables déléguées TCP lorsqu’elle décharge ces variables vers la cible de déchargement. Une fois déchargées, les variables déléguées TCP sont détenues et gérées par la cible de déchargement. Seule la cible de déchargement peut modifier la valeur d’une variable déléguée TCP déchargée. La cible de déchargement n’informe pas la pile hôte des modifications apportées aux valeurs des variables déléguées TCP déchargées. Toutefois, la pile hôte peut interroger la valeur des variables déléguées TCP déchargées, ce qui amène NDIS à appeler la fonction MiniportQueryOffload de la cible de déchargement. Lorsque la pile de l’hôte met fin au déchargement de l’objet d’état de connexion TCP, ce qui entraîne l’appel de NDIS de la cible de déchargement Fonction MiniportTerminateOffload , la cible de déchargement transmet la valeur des variables déléguées TCP dans l’objet d’état de connexion TCP terminée à la pile hôte.

Lorsqu’elle est passée à une cible de déchargement, une structure TCP_OFFLOAD_STATE_DELEGATED est associée à une NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure, qui contient un en-tête mis en forme en tant que structure de NDIS_OBJECT_HEADER . Dans ce cas, le membre Revision de la structure NDIS_OBJECT_HEADER spécifie le numéro de révision de la structure TCP_OFFLOAD_STATE_DELEGATED.

Configuration requise

Condition requise Valeur
En-tête ndischimney.h (inclure Ndischimney.h)

Voir aussi

MiniportQueryOffload

MiniportTerminateOffload

NDIS_OBJECT_HEADER

OFFLOAD_STATE_HEADER

TCP_OFFLOAD_STATE_CACHED

TCP_OFFLOAD_STATE_CONST