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).
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 :- 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.
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.
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
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete