Lire en anglais

Partager via


NDIS_TCP_OFFLOAD_EVENT_INDICATE fonction de rappel (ndischimney.h)

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

Une cible de déchargement appelle la fonction NdisTcpOffloadEventHandler pour indiquer un événement qui se rapporte à une connexion TCP déchargée.

Syntaxe

NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventIndicate;

void NdisTcpOffloadEventIndicate(
  [in] IN NDIS_HANDLE NdisOffloadHandle,
  [in] IN ULONG EventType,
  [in] IN ULONG EventSpecificInformation
)
{...}

Paramètres

[in] NdisOffloadHandle

Handle qui identifie la connexion TCP déchargée sur laquelle l’indication est effectuée. Lorsque la connexion a été déchargée, ce handle a été fourni dans le NdisOffloadHandle membre du NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure associée à l’état de connexion.

[in] EventType

L’événement indiqué comme l’une des valeurs de TCP_OFFLOAD_EVENT_TYPE suivantes :

TcpIndicateDisconnect

Indique que l’hôte distant a lancé une déconnexion normale en envoyant un segment FIN sur la connexion.

TcpIndicateRetrieve

Indique que la cible de déchargement demande à la pile hôte de terminer le déchargement d’une connexion TCP.

TcpIndicateAbort

Indique que l’hôte distant a lancé une déconnexion abandonnée en envoyant un segment RST acceptable sur la connexion.

TcpIndicateSendBacklogChange

Indique une modification de la taille de backlog d’envoi préférée.

[in] EventSpecificInformation

Spécifie des informations supplémentaires sur l’événement indiqué comme suit :

TcpIndicateDisconnect

Pas significatif.

TcpIndicateRetrieve

Indique la raison de la demande de chargement sous la forme d’une valeur TCP_UPLOAD_REASON. Pour plus d’informations, consultez la section Remarques.

TcpIndicateAbort

Pas significatif.

TcpIndicateSendBacklogChange

Spécifie le nombre optimal d’octets d’envoi de données que la pile hôte doit avoir en attente au niveau de la cible de déchargement.

Valeur de retour

Aucun

Remarques

indiquant une déconnexion appropriée

Une cible de déchargement doit indiquer une déconnexion normale uniquement quand :
  • Il a reçu un segment FIN de l’hôte distant.
  • Toutes les données reçues sur la connexion avant la réception du segment FIN ont été consommées par l’application cliente (autrement dit, aucune donnée de réception n’est indiquée sur la connexion).
La cible de déchargement ne doit pas libérer les ressources de la connexion tant que la pile hôte n’a pas terminé le déchargement de la connexion.

Notez qu’une déconnexion normale arrête uniquement la moitié de réception de la connexion. Il n’arrête pas la moitié d’envoi de la connexion.

indiquant une déconnexion abandonnée

Lorsqu’une cible de déchargement reçoit un segment RST acceptable sur une connexion TCP, elle doit :
  1. Dans son état interne pour la connexion, marquez la connexion comme abandonnée.
  2. Appelez la fonction NdisTcpOffloadEventHandler avec un EventType de TcpIndicateAbort.
    Remarque Lorsque la miniport indique l’événement TcpIndicateAbort, la pile TCP/IP hôte met fin au déchargement de la connexion. La cible de déchargement est gratuite pour indiquer l’événement TcpIndicateAbort dès que le segment RST arrive.
     
  3. Effectuez toutes les demandes d’envoi en attente et déconnectez les demandes sur la connexion avec NDIS_STATUS_REQUEST_ABORTED. La cible de déchargement écrit cette valeur d’état dans le Status membre de chaque structure de NET_BUFFER_LIST dans la liste liée qu’elle passe à l’état fonction ndisTcpOffloadSendComplete ou au fonction ndisTcpOffloadDisconnectComplete.
La cible de déchargement ne doit pas libérer les ressources de la connexion tant que la pile hôte n’a pas terminé le déchargement de la connexion.

demande d’arrêt d’une connexion TCP

La cible de déchargement spécifie la raison de la demande d’arrêt en tant que valeur TCP_UPLOAD_REASON dans le paramètre EventSpecificInformation qu’elle transmet à la fonction NdisTcpOffloadEventHandler. En réponse, la pile hôte appelle la fonction MiniportTerminateOffload de la cible de déchargement.

La cible de déchargement peut demander l’arrêt d’une seule connexion TCP par appel à NdisTcpOffloadEventHandler. La cible de déchargement ne peut pas demander l’arrêt d’un objet d’état voisin ou d’un objet d’état de chemin d’accès. Seule la pile hôte peut lancer l’arrêt d’un objet d’état voisin ou de chemin d’accès.

Le tableau suivant décrit les événements ou les circonstances qui peuvent entraîner une cible de déchargement pour demander l’arrêt du déchargement d’une connexion TCP.

La colonne la plus à droite indique, pour chaque TCP_UPLOAD_REASON, si la pile hôte charge toujours la connexion (obligatoire) ou peut ou non charger la connexion (facultative). Dans les cas obligatoires, une cible de déchargement ne continue pas à traiter la connexion déchargée. Dans les cas facultatifs, une cible de déchargement doit être en mesure de poursuivre le traitement sur la connexion déchargée si la pile hôte ne termine pas le déchargement de cette connexion.

Événement/circonstance TCP_UPLOAD_REASON Arrêt de la pile d’hôtes de la connexion TCP
L’état matériel utilisé pour suivre la connexion est endommagé. HardwareFailure Obligatoire
La cible de déchargement a tenté d’envoyer des données sur une connexion TCP qui dépend d’un objet d’état invalidé. InvalidState Obligatoire
La cible de déchargement reçoit un segment avec le bit URG défini dans l’en-tête TCP. Notez que la cible de déchargement n’envoie pas d’ACK pour accuser réception des données urgentes. ReceivedUrgentData Obligatoire
Un délai d’expiration s’est produit sur la connexion TCP. TimeoutExpiration Obligatoire
La cible de déchargement demande un chargement pour une raison non spécifiée. uploadRequested Obligatoire
La cible de déchargement a détecté qu’un trop grand nombre de segments de transmission sont supprimés sur la connexion TCP. HighDropRate Optionnel
La cible de déchargement a détecté qu’un trop grand nombre de fragments sont reçus sur la connexion TCP. highFragmentation Optionnel
La cible de déchargement a reçu trop de segments hors ordre sur la connexion TCP. HighOutofOrderPackets Optionnel
L’activité (envois/réceptions) sur la connexion TCP est trop faible. LowActivity Optionnel
Il n’existe aucune mémoire tampon de réception prépostée pour la connexion TCP. NoBufferProposting Optionnel
Les mémoires tampons reçues publiées pour la connexion TCP sont trop petites. SmallIO Optionnel
 

La cible de déchargement ne doit pas lancer l’arrêt d’une connexion TCP semi-fermée lorsque cette connexion se trouve dans l’un des états suivants :

  • FIN_WAIT1-La pile hôte locale a fermé la connexion TCP, mais la connexion peut toujours recevoir des données à partir du point de terminaison distant.
  • FIN_WAIT2--L’hôte local a fermé la connexion TCP et reçu un ACK pour le segment FIN qu’il a envoyé, mais la connexion déchargée peut toujours recevoir des données de l’hôte distant.
  • CLOSE_WAIT- L’hôte local peut toujours envoyer des données.
Une cible de déchargement peut demander l’arrêt de toutes les connexions TCP qui ont été déchargées. Pour plus d’informations, consultez NdisMOffloadEventIndicate.

indiquant une modification de la taille du backlog d’envoi

La taille du backlog d’envoi peut être une fonction du temps d’aller-retour (RTT) pour la connexion, la bande passante de l’interface et d’autres paramètres. Les variables et algorithmes spécifiques que la cible de déchargement utilise pour calculer la taille du backlog d’envoi sont spécifiques à l’implémentation. Une cible de déchargement peut, par exemple, utiliser au minimum le produit de délai de bande passante et la fenêtre de réception annoncée comme algorithme. 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 la transmission sur la connexion.

La cible de déchargement doit implémenter un mécanisme de limitation pour s’assurer que, si la valeur de SendBacklogSize change trop fréquemment ou par trop petite quantité, la cible de déchargement n’indique pas de SendBacklogSize événement. Cela empêchera la survenue d’une tempête d’indications d’événements.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête ndischimney.h (include Ndischimney.h)
IRQL DISPATCH_LEVEL

Voir aussi

indiquant les événements TCP Chimney-Specific

MiniportInitiateOffload

MiniportTerminateOffload

NdisMOffloadEventIndicate

NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete

NdisTcpOffloadSendComplete

ProtocolTcpOffloadEvent

répondre à la réception d’un segment FIN ou RST