Anexando carimbos de data/hora a pacotes
Depois que o driver de miniporte relatar quais recursos de carimbo de data/hora estão presentes e habilitados no momento, o driver pode anexar os carimbos de data/hora relevantes aos pacotes usando a estrutura de NET_BUFFER_LIST (NBL).
Para obter mais informações sobre como relatar os recursos de carimbo de data/hora de hardware da NIC e os recursos de carimbo de data/hora de software do driver de miniporte para o sistema operacional, consulte Relatórios de recursos de carimbo de data/hora e configuração atual.
Os PtpV2OverUdpIPv4EventMsgReceiveHw
sinalizadores , PtpV2OverUdpIPv4AllMsgReceiveHw
, PtpV2OverUdpIPv4EventMsgTransmitHw
, PtpV2OverUdpIPv4AllMsgTransmitHw
, PtpV2OverUdpIPv6EventMsgReceiveHw
, PtpV2OverUdpIPv6AllMsgReceiveHw
PtpV2OverUdpIPv6EventMsgTransmitHw
, PtpV2OverUdpIPv6AllMsgTransmitHw
, AllTransmitHw
AllReceiveHw
e TaggedTransmitHw
na estrutura NDIS_TIMESTAMP_CAPABILITY_FLAGS indicam quais carimbos de data/hora de hardware o driver de miniporte dá suporte.
O carimbo de data/hora gerado pelo hardware NIC na recepção ou transmissão de um pacote é representado por um valor inteiro de 64 bits. Esse deve ser o valor bruto do relógio do hardware nic no ponto em que o carimbo de data/hora é capturado. O carimbo de data/hora é armazenado na matriz NetBufferListInfo da estrutura NBL.
Os drivers de miniport podem usar a estrutura NET_BUFFER_LIST_TIMESTAMP para definir o carimbo de data/hora no campo NetBufferListInfo da NBL. O driver preenche o campo Carimbo de data/hora da estrutura NET_BUFFER_LIST_TIMESTAMP com o carimbo de data/hora gerado pelo hardware e chama a função do utilitário NdisSetNblTimestampInfo , passando a estrutura.
Os drivers de miniport podem usar NdisGetNblTimestampInfo e NdisCopyNblTimestampInfo para recuperar e copiar carimbos de data/hora.
Se uma configuração de carimbo de data/hora de hardware específica estiver habilitada, mas um carimbo de data/hora que corresponda a essa funcionalidade não for gerado, o miniporto deverá definir o carimbo de data/hora que ele anexa à NBL como zero.
Observação
Ao reconhecer pacotes ptp versão 2 para gerar carimbos de data/hora de hardware, a implementação não deve restringir a geração de carimbo de data/hora a pacotes que usam os endereços multicast (IPv4 e IPv6) especificados pela especificação PTP. A implementação deve tentar reconhecer pacotes PTP de outras maneiras, por exemplo, usando o cabeçalho UDP ou o conteúdo PTP. Isso é tão que os carimbos de data/hora ainda são gerados em cenários em que uma implementação de PTP pode não usar os endereços multicast especificados na especificação PTP, por exemplo, em que endereços unicast são usados.
O hardware deve obter o carimbo de data/hora o mais próximo possível do ponto em que o hardware recebe o quadro do meio. Essa diretriz é especificada pelo padrão IEEE 1588.
Quando um pacote é recebido, o driver de miniporto deve:
Corrija o carimbo de data/hora para quaisquer atrasos existentes entre quando o hardware capturou o carimbo de data/hora e quando o hardware realmente recebeu o quadro.
Anexe o carimbo de data/hora gerado no hardware à NBL. O carimbo de data/hora corresponde ao quadro (estrutura NET_BUFFER ) contido na NBL.
Chame NdisMIndicateReceiveNetBufferLists para indicar a NBL para NDIS.
Observe que, na direção de recebimento, os drivers de miniporto para hardware Ethernet são necessários para indicar apenas uma NET_BUFFER por NBL.
O hardware deve obter o carimbo de data/hora o mais próximo possível do ponto em que o hardware transmite o quadro para o meio. Essa diretriz é especificada pelo padrão IEEE 1588.
Quando um pacote é transmitido, o driver de miniporto deve:
Corrija o carimbo de data/hora para quaisquer atrasos existentes entre quando o hardware capturou o carimbo de data/hora e quando o hardware realmente transmitiu o quadro.
Anexe o carimbo de data/hora gerado no hardware à NBL. Se a NBL contiver várias NET_BUFFERs, o carimbo de data/hora de hardware correspondente ao primeiro NET_BUFFER na NBL deverá ser anexado à NBL.
Chame NdisMSendNetBufferListsComplete para enviar a NBL completa para o NDIS.
Miniportes e hardware NIC que relatam que o TaggedTransmitHw
sinalizador de funcionalidade tem suporte e atualmente habilitado devem marcar se o NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT
sinalizador for definido no campo NblFlags de um NBL que é dado ao miniporto para transmissão. Se esse sinalizador estiver definido, isso indicará que um carimbo de data/hora de transmissão é necessário para esse NBL e um carimbo de data/hora de hardware de tempo de transmissão deve ser gerado para a NBL.
Os AllReceiveSw
sinalizadores e AllTransmitSw
TaggedTransmitSw
na estrutura NDIS_TIMESTAMP_CAPABILITY_FLAGS indicam se o miniporto dá suporte à geração de carimbos de data/hora de software.
Os carimbos de data/hora de software também são representados como valores inteiros de 64 bits e são armazenados no mesmo slot na matriz NetBufferListInfo da estrutura de NET_BUFFER (NBL) que os carimbos de data/hora de hardware.
Se os recursos de carimbo de data/hora de software estiverem presentes e habilitados, o driver de miniporte definirá o carimbo de data/hora na NBL usando o QPC (valor do contador de desempenho). O driver de miniporte deve:
Chame KeQueryPerformanceCounter para obter o QPC.
Preencha o campo Carimbo de data/hora da estrutura NET_BUFFER_LIST_TIMESTAMP com o QPC.
Defina o carimbo de data/hora na NBL chamando NdisSetNblTimestampInfo e passando o NET_BUFFER_LIST_TIMESTAMP.
Ao receber, o driver de miniporto deve capturar o QPC o mais cedo possível, mas não antes de quando o pacote chegou.
Ao transmitir, o driver de miniporto deve capturar o QPC o mais tarde possível antes que o pacote seja dado ao hardware para transmissão.
O TaggedTransmitSw
sinalizador é análogo ao TaggedTransmitHw
sinalizador, mas corresponde aos carimbos de data/hora do software. Se a funcionalidade tiver suporte e habilitada, o miniporto deverá marcar o NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT
sinalizador no campo NblFlags da NBL. Se esse sinalizador estiver definido, o miniporto deverá gerar um carimbo de data/hora do software de transmissão para a NBL.