Adjuntar marcas de tiempo a paquetes

Después de que el controlador de miniporte informa de qué funcionalidades de marca de tiempo están presentes y habilitadas actualmente, el controlador puede adjuntar las marcas de tiempo pertinentes a los paquetes mediante la estructura de NET_BUFFER_LIST (NBL).

Para obtener más información sobre cómo notificar las funcionalidades de marca de tiempo de hardware de la NIC y las funcionalidades de marca de tiempo del controlador de miniporte para el sistema operativo, consulte Informes de funcionalidades de marca de tiempo y configuración actual.

Marcas de tiempo de hardware

Las PtpV2OverUdpIPv4EventMsgReceiveHwmarcas , , PtpV2OverUdpIPv4AllMsgReceiveHw, PtpV2OverUdpIPv6EventMsgReceiveHwPtpV2OverUdpIPv6EventMsgTransmitHwPtpV2OverUdpIPv6AllMsgTransmitHwAllTransmitHwPtpV2OverUdpIPv6AllMsgReceiveHwPtpV2OverUdpIPv4AllMsgTransmitHwAllReceiveHwPtpV2OverUdpIPv4EventMsgTransmitHwy TaggedTransmitHw de la estructura NDIS_TIMESTAMP_CAPABILITY_FLAGS indican qué marcas de tiempo de hardware admite el controlador de minipuerto.

La marca de tiempo que genera el hardware NIC en la recepción o transmisión de un paquete se representa mediante un valor entero de 64 bits. Debe ser el valor sin procesar del reloj del hardware NIC en el momento en que se captura la marca de tiempo. La marca de tiempo se almacena en la matriz NetBufferListInfo de la estructura NBL.

Los controladores de minipuerto pueden usar la estructura NET_BUFFER_LIST_TIMESTAMP para establecer la marca de tiempo en el campo NetBufferListInfo del NBL. El controlador rellena el campo Timestamp de la estructura de NET_BUFFER_LIST_TIMESTAMP con la marca de tiempo generada por el hardware y llama a la función de utilidad NdisSetNblTimestampInfo , pasando la estructura.

Los controladores miniport pueden usar NdisGetNblTimestampInfo y NdisCopyNblTimestampInfo para recuperar y copiar marcas de tiempo.

Si se habilita una configuración de marca de tiempo de hardware determinada, pero una marca de tiempo que corresponde a esa funcionalidad no se genera, el miniporte debe establecer la marca de tiempo que adjunta al NBL en cero.

Nota

Al reconocer paquetes PTP versión 2 para generar marcas de tiempo de hardware, la implementación no debe restringir la generación de marca de tiempo a los paquetes que usan las direcciones de multidifusión (tanto IPv4 como IPv6) especificadas por la especificación PTP. La implementación debe intentar reconocer paquetes PTP de otras maneras, por ejemplo, mediante el encabezado UDP o la carga PTP. Esto es así que las marcas de tiempo se siguen generando en escenarios en los que una implementación de PTP podría no usar las direcciones de multidifusión especificadas en la especificación PTP, por ejemplo, donde se usan direcciones de unidifusión.

Marcas de tiempo del lado de recepción

El hardware debe obtener la marca de tiempo lo más cerca posible del punto cuando el hardware recibe el marco del medio. Esta guía se especifica mediante el estándar IEEE 1588.

Cuando se recibe un paquete, el controlador de minipuerto debe:

  1. Corrija la marca de tiempo de los retrasos que existen entre cuando el hardware capturó la marca de tiempo y cuando el hardware recibió realmente el fotograma.

  2. Adjunte la marca de tiempo generada en hardware al NBL. La marca de tiempo corresponde al marco (NET_BUFFER estructura) contenido en el NBL.

  3. Llame a NdisMIndicateReceiveNetBufferLists para indicar el NBL a NDIS.

Tenga en cuenta que, en la dirección de recepción, se requieren controladores de minipuerto para el hardware Ethernet para indicar solo una NET_BUFFER por NBL.

Transmitir marca de tiempo lateral

El hardware debe obtener la marca de tiempo lo más cercana posible al punto en que el hardware transmite el marco al medio. Esta guía se especifica mediante el estándar IEEE 1588.

Cuando se transmite un paquete, el controlador de minipuerto debe:

  1. Corrija la marca de tiempo de los retrasos que existen entre cuando el hardware capturó la marca de tiempo y cuando el hardware realmente transmitía el fotograma.

  2. Adjunte la marca de tiempo generada en hardware al NBL. Si el NBL contiene varias NET_BUFFERs, la marca de tiempo de hardware correspondiente al primer NET_BUFFER del NBL debe estar conectada al NBL.

  3. Llame a NdisMSendNetBufferListsComplete para enviar el NBL a NDIS.

Miniports y hardware NIC que informan de que se admite la TaggedTransmitHw marca de funcionalidad y que actualmente está habilitada deben comprobar si la NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT marca está establecida en el campo NblFlags de un NBL que se proporciona al miniporte para la transmisión. Si se establece esta marca, esto indica que se necesita una marca de tiempo de transmisión para ese NBL y se debe generar una marca de tiempo de hardware de transmisión para el NBL.

Marcas de tiempo de software

Las AllReceiveSwmarcas , AllTransmitSw y TaggedTransmitSw de la estructura NDIS_TIMESTAMP_CAPABILITY_FLAGS indican si el miniporte admite la generación de marcas de tiempo de software.

Las marcas de tiempo de software también se representan como valores enteros de 64 bits y se almacenan en la misma ranura de la matriz NetBufferListInfo de la estructura NET_BUFFER (NBL) que las marcas de tiempo de hardware.

Si las funcionalidades de marca de tiempo de software están presentes y habilitadas, el controlador de minipuerto establece la marca de tiempo en el NBL mediante el valor del contador de rendimiento (QPC). El controlador de minipuerto debe:

  1. Llame a KeQueryPerformanceCounter para obtener el QPC.

  2. Rellene el campo Marca de tiempo de la estructura NET_BUFFER_LIST_TIMESTAMP con el QPC.

  3. Establezca la marca de tiempo en el NBL llamando a NdisSetNblTimestampInfo y pasando el NET_BUFFER_LIST_TIMESTAMP.

Al recibir el controlador de minipuerto debe capturar el QPC lo antes posible, pero no antes de cuando llegó el paquete.

Al transmitir el controlador de minipuerto debe capturar el QPC lo más tarde posible antes de que el paquete se entrete al hardware para su transmisión.

La TaggedTransmitSw marca es análoga a la TaggedTransmitHw marca, pero corresponde a las marcas de tiempo de software. Si se admite y habilita la funcionalidad, el miniporte debe comprobar la NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT marca en el campo NblFlags del NBL . Si se establece esta marca, el miniporte debe generar una marca de tiempo de transmisión de software de tiempo para el NBL.