Поделиться через


NDIS_STATUS_TIMESTAMP_CAPABILITY

Драйверы мини-порта используют индикатор состояния NDIS_STATUS_TIMESTAMP_CAPABILITY , чтобы сообщить о возможностях аппаратной метки времени сетевой карты и возможностях программной метки времени драйвера мини-порта в NDIS и драйверах overlying.

Это указание состояния представляет возможности меток времени для оборудования и драйвера мини-порта, а не того, какая возможность в настоящее время включена или отключена. Дополнительные сведения о текущей конфигурации метки времени см. в разделе NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG.

Комментарии

Во время инициализации драйвер мини-порта должен указать возможности аппаратных и программных меток времени в функции MiniportInitializeEx . Драйвер должен:

  1. Инициализируйте структуру NDIS_TIMESTAMP_CAPABILITIES с помощью аппаратных и программных возможностей метки времени сетевой карты. Драйвер задает элементы структуры NDIS_TIMESTAMP_CAPABILITIES следующим образом:

    • Драйвер использует поле TimestampFlags для указания аппаратных и программных возможностей меток времени.

    Примечание

    Реализация должна поддерживать аппаратные метки времени и перекрестные метки времени. Поддержка программных меток времени является необязательной.

    • Драйвер должен задать для поля CrossTimestamp значение TRUE.

    • Поле HardwareClockFrequencyHz должно содержать номинальную рабочую частоту аппаратных часов, используемых для метки времени сетевой картой. Эти данные могут использоваться для отображения номинальной частоты часов конечным пользователям в информационных целях.

    • Поле Тип в поле Заголовок должно иметь значение NDIS_OBJECT_TYPE_DEFAULT , а для параметра Редакция— значение NDIS_TIMESTAMP_CAPABILITIES_REVISION_1.

  2. Создайте NDIS_STATUS_TIMESTAMP_CAPABILITY индикатор состояния, вызвав NdisMIndicateStatusEx , чтобы сообщить о возможностях меток времени. Поле StatusBuffer структуры NDIS_STATUS_INDICATION должно указывать на инициализированную структуру NDIS_TIMESTAMP_CAPABILITIES .

Драйвер мини-порта также должен создавать индикатор состояния NDIS_STATUS_TIMESTAMP_CAPABILITY всякий раз, когда обнаруживает изменения в базовых возможностях оборудования.

Вот как драйвер мини-порта может указать поддерживаемые возможности меток времени:

// 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);
. . .
}

Требования

Требование Значение
Минимальная версия клиента Windows 11
Минимальная версия сервера Windows Server 2022
Версия NDIS NDIS 6.82 и более поздних версий
Заголовок Ntddndis.h (включая Ndis.h)

См. также раздел

Возможности создания меток времени отчетов и текущая конфигурация

NDIS_TIMESTAMP_CAPABILITIES

NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

MiniportInitializeEx

NdisMIndicateStatusEx

NDIS_STATUS_INDICATION