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 relatif à 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 membre NdisOffloadHandle du NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure associée à l’état de connexion.
[in] EventType
L’événement est 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 d’arrêter 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
Non significatif.
TcpIndicateRetrieve
Indique la raison de la demande de chargement en tant que valeur TCP_UPLOAD_REASON . Pour plus d'informations, consultez la section Notes.
TcpIndicateAbort
Non significatif.
TcpIndicateSendBacklogChange
Spécifie le nombre optimal d’octets de données d’envoi que la pile hôte doit avoir en attente au niveau de la cible de déchargement.
Valeur de retour
None
Remarques
Indication d’une déconnexion normale
Une cible de déchargement doit indiquer une déconnexion normale uniquement dans les cas suivants :- 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 ne doit être 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 l’envoi de la moitié de la connexion.
Indication d’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 étant abandonnée.
-
Appelez la fonction NdisTcpOffloadEventHandler avec un EventType de TcpIndicateAbort.Note Lorsque le 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 libre d’indiquer l’événement TcpIndicateAbort dès que le segment RST arrive.
- Terminez toutes les demandes d’envoi et de déconnexion en suspens sur la connexion avec NDIS_STATUS_REQUEST_ABORTED. La cible de déchargement écrit cette valeur status dans le membre Status de chaque structure NET_BUFFER_LIST dans la liste liée qu’elle transmet à la Fonction NdisTcpOffloadSendComplete ou à la 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 voisin ou d’un objet d’état de chemin d’accès.
Le tableau suivant décrit les événements ou les circonstances qui peuvent amener une cible de déchargement à 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 charger ou non la connexion (facultatif). 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 n’arrête pas le déchargement de cette connexion.
Événement/circonstance | TCP_UPLOAD_REASON | Arrêt de la connexion TCP par la pile d’hôtes |
---|---|---|
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 | Facultatif |
La cible de déchargement a détecté qu’un trop grand nombre de fragments sont reçus sur la connexion TCP. | HighFragmentation | Facultatif |
La cible de déchargement a reçu trop de segments en désordre sur la connexion TCP. | HighOutofOrderPackets | Facultatif |
L’activité (envois/réceptions) sur la connexion TCP est trop faible. | LowActivity | Facultatif |
Il n’existe aucune mémoire tampon de réception prépostée pour la connexion TCP. | NoBufferProposting | Facultatif |
Les mémoires tampons reçues publiées pour la connexion TCP sont trop petites. | SmallIO | Facultatif |
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 d’hôtes locale a fermé la connexion TCP, mais la connexion reçoit toujours des données 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 fonction du temps d’aller-retour (RTT) de la connexion, de la bande passante de l’interface et d’autres paramètres. 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. Une cible de déchargement peut, par exemple, utiliser un minimum du produit à retard 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 d’une quantité trop faible, la cible de déchargement n’indique pas d’événement SendBacklogSize . Cela empêchera une tempête d’indications d’événement de se produire.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | ndischimney.h (inclure Ndischimney.h) |
IRQL | DISPATCH_LEVEL |
Voir aussi
Indication d’événements de Chimney-Specific TCP
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete