Condividi tramite


NDIS_STATUS_TIMESTAMP_CAPABILITY

I driver Miniport usano l'indicazione di stato NDIS_STATUS_TIMESTAMP_CAPABILITY per segnalare le funzionalità di timestamp hardware della scheda di interfaccia di rete e le funzionalità di timestamp software del driver miniport a NDIS e driver sovrapponitori.

Questa indicazione di stato rappresenta le funzionalità di timestamp del driver hardware e miniport, non quale funzionalità è attualmente abilitata o disabilitata. Per altre informazioni sulla creazione di report sulla configurazione di timestamp corrente, vedere NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG.

Osservazioni

Durante l'inizializzazione, il driver miniport deve indicare le relative funzionalità di timestamp hardware e software dall'interno della relativa funzione miniportInitializeEx. Il driver deve:

  1. Inizializzare una struttura NDIS_TIMESTAMP_CAPABILITIES con le funzionalità di timestamp hardware e software della scheda di interfaccia di rete. Il driver imposta i membri della struttura NDIS_TIMESTAMP_CAPABILITIES come segue:

    • Il driver usa il campo TimestampFlags per indicare le funzionalità di timestamp hardware e software.

    Nota

    Un'implementazione deve supportare timestamp hardware e timestamp incrociati. Il supporto dei timestamp software è facoltativo.

    • Il driver deve impostare il campo CrossTimestamp su TRUE.

    • Il campo HardwareClockFrequencyHz deve contenere la frequenza operativa nominale dell'orologio hardware usato per il timestamp dalla scheda di interfaccia di rete. Questi dati possono essere usati per visualizzare la frequenza di clock nominale agli utenti finali a scopo informativo.

    • Il campo Tipo nel campo intestazione deve essere impostato su NDIS_OBJECT_TYPE_DEFAULT e il revisione su NDIS_TIMESTAMP_CAPABILITIES_REVISION_1.

  2. Generare un'indicazione di stato NDIS_STATUS_TIMESTAMP_CAPABILITY chiamando NdisMIndicateStatusEx per segnalare le funzionalità di timestamp. Il campo StatusBuffer della struttura NDIS_STATUS_INDICATION deve puntare alla struttura NDIS_TIMESTAMP_CAPABILITIES inizializzata.

Il driver miniport deve anche generare l'indicazione di stato NDIS_STATUS_TIMESTAMP_CAPABILITY ogni volta che rileva una modifica delle funzionalità hardware sottostanti.

Ecco come un driver miniport potrebbe indicare le funzionalità di timestamp supportate:

// From within its initialization routine, the miniport in this 
// example indicates that it supports the following capabilities:
// - PtpV2OverUdpIPv4EventMsgReceiveHw
// - PtpV2OverUdpIPv6EventMsgReceiveHw
// - TaggedTransmitHw
// - CrossTimestamp

NDIS_STATUS MiniportInitializeEx(
    _In_ NDIS_HANDLE MiniportAdapterHandle,
    _In_ NDIS_HANDLE MiniportDriverContext,
    _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
)
{
. . .
    NDIS_TIMESTAMP_CAPABILITIES timeStampCapabilities;
    NDIS_STATUS_INDICATION timeStampStatus;
. . .

    // Initialize an NDIS_TIMESTAMP_CAPABILITIES structure

    RtlZeroMemory(&timeStampCapabilities, sizeof(timeStampCapabilities));
    RtlZeroMemory(&timeStampStatus, sizeof(timeStampStatus));

    timeStampCapabilities.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
    timeStampCapabilities.Header.Size = sizeof(timeStampCapabilities);
    timeStampCapabilities.Header.Revision = NDIS_TIMESTAMP_CAPABILITIES_REVISION_1;

    timeStampCapabilities.CrossTimestamp = TRUE;
    timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv4EventMsgReceiveHw = TRUE;
    timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv6EventMsgReceiveHw = TRUE;
    timeStampCapabilities.TimestampFlags.TaggedTransmitHw = TRUE;

    timeStampCapabilities.HardwareClockFrequencyHz = 150000;

    timeStampStatus.Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION;
    timeStampStatus.Header.Revision = NDIS_STATUS_INDICATION_REVISION_1;
    timeStampStatus.Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1;

    timeStampStatus.SourceHandle = MiniportAdapterHandle;
    timeStampStatus.StatusBuffer = &timeStampCapabilities;
    timeStampStatus.StatusBufferSize = sizeof(timeStampCapabilities);
    timeStampStatus.StatusCode = NDIS_STATUS_TIMESTAMP_CAPABILITY;

    // Generate an NDIS_STATUS_TIMESTAMP_CAPABILITY status indication
    NdisMIndicateStatusEx(MiniportAdapterHandle, &timeStampStatus);
. . .
}

Fabbisogno

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)

Vedere anche

Funzionalità di timestamp per la creazione di report e di configurazione corrente

NDIS_TIMESTAMP_CAPABILITIES

NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

MiniportInitializeEx

NdisMIndicateStatusEx

NDIS_STATUS_INDICATION