структура NDIS_RECEIVE_FILTER_FIELD_PARAMETERS (ntddndis.h)

Структура NDIS_RECEIVE_FILTER_FIELD_PARAMETERS определяет критерий проверки фильтра для поля в заголовке сетевого пакета.

Фильтры получения NDIS используются в следующих интерфейсах NDIS:

Синтаксис

typedef struct _NDIS_RECEIVE_FILTER_FIELD_PARAMETERS {
  NDIS_OBJECT_HEADER       Header;
  ULONG                    Flags;
  NDIS_FRAME_HEADER        FrameHeader;
  NDIS_RECEIVE_FILTER_TEST ReceiveFilterTest;
  union {
    NDIS_MAC_HEADER_FIELD  MacHeaderField;
    NDIS_ARP_HEADER_FIELD  ArpHeaderField;
    NDIS_IPV4_HEADER_FIELD IPv4HeaderField;
    NDIS_IPV6_HEADER_FIELD IPv6HeaderField;
    NDIS_UDP_HEADER_FIELD  UdpHeaderField;
  } HeaderField;
  _HEADER_FIELD            _HEADER_FIELD;
  union {
    UCHAR   FieldByteValue;
    USHORT  FieldShortValue;
    ULONG   FieldLongValue;
    ULONG64 FieldLong64Value;
    UCHAR   FieldByteArrayValue[16];
  } FieldValue;
  _FIELD_VALUE             _FIELD_VALUE;
  union {
    UCHAR   ResultByteValue;
    USHORT  ResultShortValue;
    ULONG   ResultLongValue;
    ULONG64 ResultLong64Value;
    UCHAR   ResultByteArrayValue[16];
  } ResultValue;
  _RESULT_VALUE            _RESULT_VALUE;
} NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, *PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS;

Члены

Header

Структура NDIS_OBJECT_HEADER для структуры NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . Драйвер задает элемент Type структуры, указанной в заголовке , для NDIS_OBJECT_TYPE_DEFAULT.

Чтобы указать версию структуры NDIS_RECEIVE_FILTER_FIELD_PARAMETERS , драйвер задает для члена Revision одно из следующих значений:

Значение Значение
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
Добавлены дополнительные члены в объединение HeaderField для NDIS 6.30.

Драйвер задает для элемента Sizeзначение NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
Исходная версия для NDIS 6.20.

Драйвер задает для элемента Sizeзначение NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1.

Flags

Побитовое ИЛИ флагов. Следующие флаги допустимы для OID_RECEIVE_FILTER_SET_FILTER OID.

Значение Значение
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
Если этот флаг установлен, сетевой адаптер должен указывать только полученные пакеты, которые соответствуют следующим критериям:
  • Mac-адрес пакета соответствует указанному тесту поля заголовка MAC.
  • Пакет либо не содержит тег виртуальной локальной сети, либо имеет тег виртуальной локальной сети с нулевым идентификатором.
Дополнительные сведения об этом флаге см. в разделе Примечания.
Примечание Если драйвер overlying задает фильтр MAC-адресов и фильтр идентификатора виртуальной локальной сети с запросом OID OID_RECEIVE_FILTER_SET_FILTER, он не устанавливает этот флаг ни в том из полей фильтра. В этом случае драйвер мини-порта должен указывать пакеты, соответствующие как указанному MAC-адресу, так и идентификатору виртуальной локальной сети. То есть драйвер мини-порта не должен указывать пакеты с соответствующим MAC-адресом, которые имеют нулевой идентификатор виртуальной локальной сети или являются пакетами без меток.
 

FrameHeader

Тип заголовка в кадре сетевых данных.

ReceiveFilterTest

Тип теста, выполняемого для фильтра получения.

HeaderField

Тип поля в заголовке. Тип поля (например, NDIS_MAC_HEADER_FIELD) соответствует типу заголовка, указанному в элементе FrameHeader .

Это объединение содержит следующие элементы:

HeaderField.MacHeaderField

Тип поля в заголовке MAC.

HeaderField.ArpHeaderField

Тип поля в заголовке ARP.

HeaderField.IPv4HeaderField

Значение перечисления NDIS_IPV4_HEADER_FIELD , указывающее тип поля в заголовке IP версии 4 (IPv4).

HeaderField.IPv6HeaderField

Значение перечисления NDIS_IPV6_HEADER_FIELD , указывающее тип поля в заголовке IP-адреса версии 6 (IPv6).

HeaderField.UdpHeaderField

Тип поля в заголовке UDP.

_HEADER_FIELD

FieldValue

Значение, которое адаптер мини-порта сравнивает со значением соответствующего поля заголовка во входящих пакетах. Расположение значения поля заголовка определяется типом поля, указанным в элементе HeaderField .

Дополнительные сведения см. в разделе «Примечания».

Это объединение содержит следующие элементы:

FieldValue.FieldByteValue

Значение UCHAR для сравнения с полем в сетевом пакете.

Примечание Если элемент MacHeaderField задает значение перечисления NdisMacHeaderFieldPacketType , этот элемент содержит значение перечисления NDIS_MAC_PACKET_TYPE .
 

FieldValue.FieldShortValue

Значение USHORT для сравнения с полем в сетевом пакете.

FieldValue.FieldLongValue

Значение ULONG для сравнения с полем в сетевом пакете.

FieldValue.FieldLong64Value

Значение ULONG64 для сравнения с полем в сетевом пакете.

FieldValue.FieldByteArrayValue[16]

Массив UCHAR для сравнения с полем в сетевом пакете.

_FIELD_VALUE

ResultValue

Объединение, содержащее значение результата теста.

Если для элемента ReceiveFilterTest задано значение NdisReceiveFilterTestMaskEqual, сетевой адаптер сначала вычисляет результат на основе значения в элементе FieldValue и значения поля заголовка, как указано в элементе HeaderField . Затем адаптер сравнивает вычисляемый результат с ResultValue.

Дополнительные сведения см. в разделе «Примечания».

Это объединение содержит следующие элементы:

ResultValue.ResultByteValue

Значение UCHAR для сравнения с результатом теста.

ResultValue.ResultShortValue

Значение USHORT для сравнения с результатом теста.

ResultValue.ResultLongValue

Значение ULONG для сравнения с результатом теста.

ResultValue.ResultLong64Value

Значение ULONG64 для сравнения с результатом теста.

ResultValue.ResultByteArrayValue[16]

Массив UCHAR для сравнения с результатом теста.

_RESULT_VALUE

Комментарии

Структура NDIS_RECEIVE_FILTER_FIELD_PARAMETERS определяет критерий проверки фильтра для одного поля в возможном массиве тестов полей, который можно указать с помощью NDIS_RECEIVE_FILTER_PARAMETERS структура.

В следующей таблице описывается, как сетевой адаптер использует элементы ReceiveFilterTest, FieldValue и ResultValue для выполнения проверки фильтра по указанному значению поля заголовка полученного пакета.

Значение ReceiveFilterTest Проверка фильтра, выполняемая сетевым адаптером
NdisReceiveFilterTestEqual (<значение поля заголовка> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<значение поля заголовка> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<значение поля заголовка> != FieldValue)
 
Примечание Все многобайтовые значения полей и результирующих значений, такие как элементы FieldShortValue и ResultLong64Value , должны быть указаны в сетевом порядке байтов (big-endian).
 
Если флаг NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO не задан и фильтр идентификатора виртуальной локальной сети, настроенный запросом на набор OID OID_RECEIVE_FILTER_SET_FILTER, драйвер мини-порта должен выполнить одно из следующих действий:
  • Для NDIS 6.20 драйвер мини-порта должен вернуть состояние сбоя для запроса OID OID_RECEIVE_FILTER_SET_FILTER.
  • Начиная с NDIS 6.30, если флаг NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO не задан и фильтр идентификаторов виртуальной локальной сети не настроен запросом метода OID_RECEIVE_FILTER_SET_FILTER , драйвер мини-порта должен выполнить одно из следующих действий:
    • Драйвер мини-порта должен возвращать состояние сбоя для запроса метода OID_RECEIVE_FILTER_SET_FILTER .
    • Драйвер мини-порта должен настроить сетевой адаптер для проверки и фильтрации указанных полей MAC-адресов. Если тег виртуальной ЛС присутствует в полученном пакете, сетевой адаптер должен удалить его из данных пакета. Драйвер мини-порта должен поместить тег виртуальной локальной сети в NDIS_NET_BUFFER_LIST_8021Q_INFO , связанный со структурой NET_BUFFER_LIST пакета.
Начиная с версии NDIS 6.30, если флаг NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO не задан и существует фильтр идентификаторов виртуальной локальной сети, настроенный запросом на набор OID OID_RECEIVE_FILTER_SET_FILTER, драйвер мини-порта должен выполнить следующие действия:
  • Драйвер мини-порта должен настроить сетевой адаптер для проверки и фильтрации указанных полей MAC-адреса и идентификатора виртуальной локальной сети.

    Если тег виртуальной ЛС присутствует в полученном пакете, сетевой адаптер должен удалить его из данных пакета. Драйвер мини-порта должен поместить тег виртуальной локальной сети в NDIS_NET_BUFFER_LIST_8021Q_INFO , связанный со структурой NET_BUFFER_LIST пакета.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.20 и более поздних версиях.
Верхняя часть ntddndis.h (включая Ndis.h)

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

NDIS_ARP_HEADER_FIELD

NDIS_FRAME_HEADER

NDIS_IPV4_HEADER_FIELD

NDIS_IPV6_HEADER_FIELD

NDIS_MAC_HEADER_FIELD

NDIS_MAC_PACKET_TYPE

NDIS_OBJECT_HEADER

NDIS_RECEIVE_FILTER_PARAMETERS

NDIS_RECEIVE_FILTER_TEST

NDIS_UDP_HEADER_FIELD

OID_RECEIVE_FILTER_SET_FILTER