Condividi tramite


OID_TIMESTAMP_GET_CROSSTIMESTAMP

Un driver overlying genera una richiesta di query OID (Object Identifier) di OID_TIMESTAMP_GET_CROSSTIMESTAMP per ottenere un timestamp incrociato dall'hardware della scheda di interfaccia di rete. Un timestamp incrociato è il set di timestamp hardware della scheda di interfaccia di rete e timestamp di sistema ottenuto molto vicino l'uno all'altro. Le applicazioni PTP (Precision Time Protocol) versione 2 usano le informazioni fornite in questo OID per stabilire una relazione tra l'orologio hardware della scheda di interfaccia di rete e un orologio di sistema.

Il driver miniport deve supportare questo OID se imposta il campo CrossTimestamp su TRUE nella struttura NDIS_TIMESTAMP_CAPABILITIES come parte della configurazione corrente. Per altre informazioni sulla creazione di report sulla configurazione corrente, vedere l'indicazione dello stato NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG . Se la capacità di timestamp incrociata è disabilitata, l'OID deve essere completato con un codice di errore appropriato, ad esempio NDIS_STATUS_NOT_SUPPORTED.

Il membro RequestType della struttura NDIS_OID_REQUEST sarà NdisRequestQueryInformation.

Quando un driver miniport riceve la richiesta OID di OID_TIMESTAMP_GET_CROSSTIMESTAMP, il driver completa l'OID riempiendo InformationBuffer nella QUERY_INFORMATION con una struttura NDIS_HARDWARE_CROSSTIMESTAMP . Il campo Tipo nel campo Intestazione della struttura NDIS_HARDWARE_CROSSTIMESTAMP deve essere impostato su NDIS_OBJECT_TYPE_DEFAULT e il campo Revisione su NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. Il driver deve riempire i campi SystemTimestamp1, HardwareClockTimestamp e SystemTimestamp2 con i timestamp seguenti presi tra loro il più vicino possibile e nell'ordine seguente:

  1. SystemTimestamp1: valore del contatore delle prestazioni ottenuto chiamando KeQueryPerformanceCounter.

  2. HardwareClockTimestamp: valore corrente dell'orologio hardware della scheda di interfaccia di rete. Questo deve essere il valore dell'orologio hardware non elaborato della scheda di interfaccia di rete.

  3. SystemTimestamp2: un altro valore del contatore delle prestazioni ottenuto chiamando KeQueryPerformanceCounter.

Ecco un esempio di come un driver miniport gestisce OID_TIMESTAMP_GET_CROSSTIMESTAMP:

{
. . .
    NDIS_HARDWARE_CROSSTIMESTAMP crossTimestamp;
    LARGE_INTEGER timeStamp;

    RtlZeroMemory(&crossTimestamp, sizeof(crossTimestamp));

    timeStamp = KeQueryPerformanceCounter(NULL);
    crossTimestamp.SystemTimestamp1 = timeStamp.QuadPart;
    crossTimestamp.HardwareClockTimestamp = FunctionToRetrieveHardwareTimestampFromNetworkCard();
    timeStamp = KeQueryPerformanceCounter(NULL);
    crossTimestamp.SystemTimestamp2 = timeStamp.QuadPart;
    crossTimestamp.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
    crossTimestamp.Header.Size = NDIS_SIZEOF_HARDWARE_CROSSTIMESTAMP_REVISION_1;
    crossTimestamp.Header.Revision = NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1;

// Complete the OID by filling the query information buffer with the crossTimestamp
}

Il campo Flag nella struttura NDIS_HARDWARE_CROSSTIMESTAMP è riservato per l'uso futuro. Il driver miniport non deve modificare il valore.

Il driver miniport e l'hardware sono liberi di ottimizzare la raccolta di questi timestamp a seconda delle funzionalità hardware avanzate. Tuttavia, i valori SystemTimestamp1 e SystemTimestamp2 restituiti al completamento dell'OID devono corrispondere con precisione al valore del contatore delle prestazioni (QPC) al momento dell'acquisizione. HardwareClockTimestamp deve corrispondere al valore dell'orologio hardware della scheda di interfaccia di rete al punto di acquisizione. Se un'implementazione specifica può determinare in modo più accurato due timestamp anziché tre (ad esempio un timestamp di sistema e il timestamp dell'orologio hardware NIC corrispondente), dovrebbe impostare il campo SystemTimestamp2 sullo stesso valore di SystemTimestamp1.

Il driver miniport non deve impostare i valori SystemTimestamp1, HardwareClockTimestamp o SystemTimestamp2 su zero.

Codici di stato restituiti

Il driver miniport restituisce uno dei codici di stato seguenti per la richiesta di query OID di OID_TIMESTAMP_GET_CROSSTIMESTAMP.

Codice di stato Descrizione
NDIS_STATUS_SUCCESS La richiesta OID è stata completata correttamente.
NDIS_STATUS_NOT_SUPPORTED Il driver miniport non supporta il timestamp incrociato o la capacità di timestamp incrociato è disabilitata.
NDIS_STATUS_FAILURE La richiesta non è riuscita per altri motivi.

Requisiti

Requisito Valore
Client minimo supportato Windows 11
Server minimo supportato Windows Server 2022
Versione NDIS NDIS 6.82 e versioni successive
Intestazione Ntddndis.h (include Ndis.h)

Vedi anche

NDIS_STATUS_TIMESTAMP_CAPABILITY

OID_TIMESTAMP_CURRENT_CONFIG

OID_TIMESTAMP_CAPABILITY

NDIS_OID_REQUEST