Condividi tramite


Collegamento di timestamp ai pacchetti

Dopo che il driver miniport segnala le funzionalità di timestamp presenti e attualmente abilitate, il driver può collegare i timestamp pertinenti ai pacchetti usando la struttura NET_BUFFER_LIST (NBL).

Per altre informazioni sulla creazione di report sulle funzionalità di timestamp hardware della scheda di interfaccia di rete e sulle funzionalità di timestamp software del driver miniport al sistema operativo, vedere Creazione di report sulle funzionalità di timestamp e configurazione corrente.

Timestamp hardware

PtpV2OverUdpIPv4AllMsgTransmitHwPtpV2OverUdpIPv4EventMsgTransmitHwPtpV2OverUdpIPv4AllMsgReceiveHwPtpV2OverUdpIPv6EventMsgReceiveHwAllReceiveHwTaggedTransmitHwPtpV2OverUdpIPv6AllMsgReceiveHwPtpV2OverUdpIPv6EventMsgTransmitHwPtpV2OverUdpIPv6AllMsgTransmitHwAllTransmitHw La PtpV2OverUdpIPv4EventMsgReceiveHwstruttura NDIS_TIMESTAMP_CAPABILITY_FLAGS indica quali timestamp hardware supportano il driver miniport.

Il timestamp generato dall'hardware della scheda di interfaccia di rete sulla ricezione o la trasmissione di un pacchetto è rappresentato da un valore intero a 64 bit. Questo deve essere il valore non elaborato dell'orologio dell'hardware della scheda di interfaccia di rete al momento dell'acquisizione del timestamp. Il timestamp viene archiviato nella matrice NetBufferListInfo della struttura NBL.

I driver Miniport possono usare la struttura di NET_BUFFER_LIST_TIMESTAMP per impostare il timestamp nel campo NetBufferListInfo di NBL . Il driver riempie il campo Timestamp della struttura NET_BUFFER_LIST_TIMESTAMP con il timestamp generato dall'hardware e chiama la funzione di utilità NdisSetNblTimestampInfo passando la struttura.

I driver Miniport possono usare NdisGetNblTimestampInfo e NdisCopyNblTimestampInfo per recuperare e copiare i timestamp .

Se un'impostazione di timestamp hardware specifica è abilitata, ma un timestamp corrispondente a tale funzionalità non viene generato, il miniport deve impostare il timestamp collegato a NBL su zero.

Nota

Quando si riconosce i pacchetti PTP versione 2 per generare timestamp hardware, l'implementazione non deve limitare la generazione del timestamp ai pacchetti che usano gli indirizzi multicast (sia IPv4 che IPv6) specificati dalla specifica PTP. L'implementazione deve provare a riconoscere i pacchetti PTP in altri modi, ad esempio usando l'intestazione UDP o il payload PTP. In questo modo i timestamp vengono comunque generati negli scenari in cui un'implementazione PTP potrebbe non usare gli indirizzi multicast specificati nella specifica PTP, ad esempio in cui vengono usati gli indirizzi unicast.

Ricezione del timestamp lato

L'hardware deve ottenere il timestamp il più vicino possibile al punto in cui l'hardware riceve il frame dal supporto. Questa linea guida è specificata dallo standard IEEE 1588.

Quando viene ricevuto un pacchetto, il driver miniport deve:

  1. Correggere il timestamp per eventuali ritardi che esistono tra quando l'hardware ha acquisito il timestamp e quando l'hardware ha effettivamente ricevuto il frame.

  2. Collegare il timestamp generato nell'hardware alla NBL. Il timestamp corrisponde al frame (struttura NET_BUFFER ) contenuto nella NBL.

  3. Chiamare NdisMIndicateReceiveNetBufferLists per indicare l'NBL a NDIS.

Si noti che nella direzione di ricezione, i driver miniport per l'hardware Ethernet sono necessari per indicare solo una NET_BUFFER per NBL.

Trasmettere timestamp lato

L'hardware deve ottenere il timestamp il più vicino possibile al punto in cui l'hardware trasmette il frame al supporto. Questa linea guida è specificata dallo standard IEEE 1588.

Quando viene trasmesso un pacchetto, il driver miniport deve:

  1. Correggere il timestamp per eventuali ritardi che esistono tra quando l'hardware ha acquisito il timestamp e quando l'hardware ha effettivamente trasmesso il frame.

  2. Collegare il timestamp generato nell'hardware alla NBL. Se nBL contiene più NET_BUFFERs, il timestamp hardware corrispondente al primo NET_BUFFER nel NBL deve essere collegato alla NBL.

  3. Chiamare NdisMSendNetBufferListsComplete per inviare il NBL completo a NDIS.

Miniport e hardware della scheda di interfaccia di rete che segnalano che il flag di funzionalità è supportato e attualmente abilitato deve verificare se il TaggedTransmitHwNDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT flag è impostato nel campo NblFlags di un NBL assegnato al miniport per la trasmissione. Se questo flag è impostato, questo indica che è necessario un timestamp di trasmissione per tale timestamp NBL e un timestamp hardware di trasmissione deve essere generato per la NBL.

Timestamp software

I AllReceiveSwflag e TaggedTransmitSw nella struttura NDIS_TIMESTAMP_CAPABILITY_FLAGS indicano se il miniport supporta la generazione di timestamp AllTransmitSw software.

I timestamp software sono rappresentati anche come valori integer a 64 bit e vengono archiviati nello stesso slot nella matrice NetBufferListInfo della struttura NET_BUFFER (NBL) come timestamp hardware.

Se le funzionalità di timestamp software sono presenti e abilitate, il driver miniport imposta il timestamp nel NBL usando il valore del contatore delle prestazioni (QPC). Il driver miniport deve:

  1. Chiamare KeQueryPerformanceCounter per ottenere il QPC.

  2. Compilare il campo Timestamp della struttura NET_BUFFER_LIST_TIMESTAMP con QPC.

  3. Impostare il timestamp nella NBL chiamando NdisSetNblTimestampInfo e passando il NET_BUFFER_LIST_TIMESTAMP.

In ricezione il driver miniport deve acquisire il QPC il prima possibile, ma non prima di quando il pacchetto è arrivato.

Nel trasmettere il driver miniport deve acquisire il QPC il più tardi possibile prima che il pacchetto venga assegnato all'hardware per la trasmissione.

Il TaggedTransmitSw flag è analogo al TaggedTransmitHw flag, ma corrisponde ai timestamp software. Se la funzionalità è supportata e abilitata, il miniport deve controllare il NDIS_NBL_FLAGS_CAPTURE_TIMESTAMP_ON_TRANSMIT flag nel campo NblFlags del NBL . Se questo flag è impostato, il miniport deve generare un timestamp software di trasmissione per NBL.