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) |