Partager via


Attachement d’horodatages aux paquets

Une fois que le pilote miniport indique quelles fonctionnalités d’horodatage sont présentes et actuellement activées, le pilote peut attacher les horodatages appropriés aux paquets à l’aide de la structure NET_BUFFER_LIST (NBL).

Pour plus d’informations sur le signalement des fonctionnalités d’horodatage matériel de la carte réseau et des fonctionnalités d’horodatage logiciel du pilote miniport au système d’exploitation, consultez Fonctionnalités d’horodatage des rapports et configuration actuelle.

Horodatages matériels

Les PtpV2OverUdpIPv4EventMsgReceiveHwindicateurs , PtpV2OverUdpIPv4AllMsgReceiveHw, PtpV2OverUdpIPv4EventMsgTransmitHw, PtpV2OverUdpIPv6EventMsgReceiveHwPtpV2OverUdpIPv4AllMsgTransmitHw, PtpV2OverUdpIPv6AllMsgReceiveHwPtpV2OverUdpIPv6EventMsgTransmitHw, PtpV2OverUdpIPv6AllMsgTransmitHw, , AllReceiveHw, AllTransmitHw et TaggedTransmitHw dans la structure NDIS_TIMESTAMP_CAPABILITY_FLAGS indiquent les horodatages matériels pris en charge par le pilote miniport.

L’horodatage généré par le matériel de carte réseau lors de la réception ou de la transmission d’un paquet est représenté par une valeur entière 64 bits. Il doit s’agir de la valeur brute de l’horloge du matériel de carte réseau au moment où l’horodatage est capturé. L’horodatage est stocké dans le tableau NetBufferListInfo de la structure NBL.

Les pilotes Miniport peuvent utiliser la structure NET_BUFFER_LIST_TIMESTAMP pour définir l’horodatage dans le champ NetBufferListInfo du NBL. Le pilote remplit le champ Timestamp de la structure NET_BUFFER_LIST_TIMESTAMP avec l’horodatage généré par le matériel et appelle la fonction utilitaire NdisSetNblTimestampInfo , en passant la structure.

Les pilotes Miniport peuvent utiliser NdisGetNblTimestampInfo et NdisCopyNblTimestampInfo pour récupérer et copier les horodatages.

Si un paramètre d’horodatage matériel particulier est activé, mais qu’un horodatage correspondant à cette fonctionnalité n’est pas généré, le miniport doit définir l’horodatage qu’il attache au NBL sur zéro.

Notes

Lors de la reconnaissance des paquets PTP version 2 pour générer des horodatages matériels, l’implémentation ne doit pas limiter la génération d’horodatage aux paquets qui utilisent les adresses de multidiffusion (À la fois IPv4 et IPv6) spécifiées par la spécification PTP. L’implémentation doit essayer de reconnaître les paquets PTP d’autres façons, par exemple à l’aide de l’en-tête UDP ou de la charge utile PTP. Ainsi, les horodatages sont toujours générés dans les scénarios où une implémentation PTP peut ne pas utiliser les adresses de multidiffusion spécifiées dans la spécification PTP, par exemple lorsque des adresses de monodiffusion sont utilisées.

Horodatage côté réception

Le matériel doit obtenir l’horodatage aussi près que possible du point où le matériel reçoit l’image du support. Cette directive est spécifiée par la norme IEEE 1588.

Lorsqu’un paquet est reçu, le pilote miniport doit :

  1. Corrigez l’horodatage pour tous les retards qui existent entre le moment où le matériel a capturé l’horodatage et le moment où le matériel a effectivement reçu l’image.

  2. Attachez l’horodatage généré dans le matériel au NBL. L’horodatage correspond à l’image (structure NET_BUFFER ) contenue dans le NBL.

  3. Appelez NdisMIndicateReceiveNetBufferLists pour indiquer le NBL à NDIS.

Notez que dans le sens de réception, les pilotes miniport pour le matériel Ethernet sont requis pour indiquer un seul NET_BUFFER par NBL.

Horodatage côté transmission

Le matériel doit obtenir l’horodatage aussi près que possible du point où le matériel transmet l’image au support. Cette directive est spécifiée par la norme IEEE 1588.

Lorsqu’un paquet est transmis, le pilote miniport doit :

  1. Corrigez l’horodatage pour tous les retards qui existent entre le moment où le matériel a capturé l’horodatage et le moment où le matériel a effectivement transmis l’image.

  2. Attachez l’horodatage généré dans le matériel au NBL. Si le NBL contient plusieurs NET_BUFFER, l’horodatage matériel correspondant au premier NET_BUFFER du NBL doit être attaché au NBL.

  3. Appelez NdisMSendNetBufferListsComplete pour envoyer le NBL complet à NDIS.

Les miniports et le matériel de carte réseau qui signalent que l’indicateur TaggedTransmitHw de capacité est pris en charge et actuellement activé doivent case activée si l’indicateur NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT est défini dans le champ NblFlags d’un NBL donné au miniport pour la transmission. Si cet indicateur est défini, cela indique qu’un horodatage de l’heure de transmission est nécessaire pour ce NBL et qu’un horodatage matériel de transmission doit être généré pour le NBL.

Horodatages logiciels

Les AllReceiveSwindicateurs et AllTransmitSw dans TaggedTransmitSw la structure NDIS_TIMESTAMP_CAPABILITY_FLAGS indiquent si le miniport prend en charge la génération d’horodatages logiciels.

Les horodatages logiciels sont également représentés sous forme de valeurs entières 64 bits et sont stockés dans le même emplacement dans le tableau NetBufferListInfo de la structure NET_BUFFER (NBL) que les horodatages matériels.

Si des fonctionnalités d’horodatage logiciel sont présentes et activées, le pilote miniport définit l’horodatage dans le NBL à l’aide de la valeur du compteur de performances (QPC). Le pilote miniport doit :

  1. Appelez KeQueryPerformanceCounter pour obtenir la QPC.

  2. Remplissez le champ Timestamp de la structure NET_BUFFER_LIST_TIMESTAMP avec la QPC.

  3. Définissez l’horodatage dans le NBL en appelant NdisSetNblTimestampInfo et en passant le NET_BUFFER_LIST_TIMESTAMP.

Lors de la réception, le pilote miniport doit capturer la QPC le plus tôt possible, mais pas plus tôt que lorsque le paquet est arrivé.

Lors de la transmission, le pilote miniport doit capturer la QPC le plus tard possible avant que le paquet ne soit remis au matériel pour la transmission.

L’indicateur TaggedTransmitSw est analogue à l’indicateur TaggedTransmitHw , mais correspond aux horodatages logiciels. Si la fonctionnalité est prise en charge et activée, le miniport doit case activée l’indicateur NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT dans le champ NblFlags du NBL. Si cet indicateur est défini, le miniport doit générer un horodatage logiciel de transmission pour le NBL.