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.
NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventIndicate;
void NdisTcpOffloadEventIndicate(
[in] IN NDIS_HANDLE NdisOffloadHandle,
[in] IN ULONG EventType,
[in] IN ULONG EventSpecificInformation
)
{...}
[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 :
Indique que l’hôte distant a lancé une déconnexion normale en envoyant un segment FIN sur la connexion.
Indique que la cible de déchargement demande à la pile hôte de terminer le déchargement d’une connexion TCP.
Indique que l’hôte distant a lancé une déconnexion abandonnée en envoyant un segment RST acceptable sur la connexion.
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 :
Pas significatif.
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.
Pas significatif.
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.
Aucun
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).
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.
Lorsqu’une cible de déchargement reçoit un segment RST acceptable sur une connexion TCP, elle doit :- Dans son état interne pour la connexion, marquez la connexion comme abandonnée.
-
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.
- 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 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.
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.
Exigence | Valeur |
---|---|
plateforme cible | Universel |
d’en-tête | ndischimney.h (include Ndischimney.h) |
IRQL | DISPATCH_LEVEL |
indiquant les événements TCP Chimney-Specific
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete