Возможности объединения пакетов отчетов
Во время инициализации сетевого адаптера драйверы miniport регистрируют следующие возможности с помощью NDIS:
Возможности объединения пакетов, поддерживаемые сетевым адаптером.
Возможности объединения пакетов, которые в настоящее время включены в сетевом адаптере.
Возможности фильтрации приема пакетов, объединенные в данный момент в сетевом адаптере.
Примечание В драйвере мини-порта можно включить или отключить поддержку объединения пакетов с помощью параметра *PacketCoalescing INF ключевое слово. Этот параметр отображается на странице свойств Дополнительно для сетевого адаптера. Дополнительные сведения о параметре INF-файла объединения пакетов см. в разделе Стандартизированные ключевые слова INF для объединения пакетов.
Драйвер мини-порта сообщает о возможностях объединения пакетов и фильтрации базового сетевого адаптера через структуру NDIS_RECEIVE_FILTER_CAPABILITIES . Если параметр *PacketCoalescing ключевое слово в реестре имеет значение 1, объединение пакетов включено, а драйвер мини-порта инициализирует структуру NDIS_RECEIVE_FILTER_CAPABILITIES следующим образом:
Драйвер мини-порта инициализирует элемент Header . Драйвер задает элемент Typeзаголовка NDIS_OBJECT_TYPE_DEFAULT.
Если драйвер поддерживает объединение пакетов, он задает для элемента Revisionзаголовка значение NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2, а для элемента Size — значение NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.
Драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE в элементе SupportedQueueProperties .
Если этот флаг установлен, сетевой адаптер должен поддерживать фильтрацию полученных многоадресных пакетов на оборудовании. Эта фильтрация основана на адресах многоадресной рассылки, которые NDIS разгружает сетевому адаптеру, отправляя его OID_802_3_MULTICAST_LIST запросы на набор OID.
Примечание Драйверы протоколов также могут изменять содержимое списка адресов многоадресной рассылки, отправляя запросы OID_802_3_ADD_MULTICAST_ADDRESS и OID_802_3_DELETE_MULTICAST_ADDRESS . NDIS объединяет эти запросы в OID_802_3_MULTICAST_LIST запросы на набор OID.
Примечание Адаптер должен отклонять любой входящий пакет многоадресной рассылки, mac-адрес которого не соответствует ни одному из адресов многоадресной рассылки, указанных в этих запросах на набор OID.
Драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED в элементе EnabledFilterTypes .
Примечание Если драйвер задает этот флаг, он также должен установить флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE в элементе SupportedQueueProperties . В противном случае NDIS завершится ошибкой вызова NdisMSetMiniportAttributes , возвращая NDIS_STATUS_BAD_CHARACTERISTICS.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен поддерживать все критерии проверки фильтра получения. Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedFilterTests :
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedFilterTests равным нулю.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер мини-порта должен поддерживать фильтрацию данных в различных полях заголовков управления доступом к мультимедиа (MAC), IP версии 4 (IPv4) и IP версии 6 (IPv6). Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedHeaders :
NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedHeaders равным нулю.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер мини-порта должен поддерживать фильтрацию данных в заголовке управления доступом к мультимедиа (MAC) полученного пакета. Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedMacHeaderFields :
NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedMacHeaderFields равным нулю.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер мини-порта должен поддерживать фильтрацию данных в заголовке полученного пакета ARP. Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedARPHeaderFields :
NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedARPHeaderFields равным нулю.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер мини-порта должен поддерживать фильтрацию данных в заголовке OsI уровня 3 (L3) полученного пакета IP-адреса версии 4 (IPv4). Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedIPv4HeaderFields :
- NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedIPv4HeaderFields равным нулю.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер мини-порта должен поддерживать фильтрацию данных в заголовке L3 полученного пакета IP-адреса версии 6 (IPv6). Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedIPv6HeaderFields :
- NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedIPv6HeaderFields равным нулю.
Если драйвер мини-порта устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер мини-порта должен поддерживать фильтрацию данных в заголовке OSI уровня 4 (L4) полученного пакета UDP. Драйвер объявляет эту поддержку, устанавливая следующие флаги в элементе SupportedIUdpHeaderFields :
- NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED
Примечание Если полученный UDP-пакет содержит параметры IPv4 или заголовки расширения IPv6, сетевой адаптер может обработать пакет так, как если бы он не прошел проверку фильтра UDP. Таким образом, адаптер может автоматически удалить полученный пакет.
Примечание Если драйвер мини-порта не устанавливает флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, драйвер должен задать элемент SupportedIUdpHeaderFields равным нулю.
Драйвер мини-порта должен сообщить о максимальном количестве тестов в полях заголовков пакетов, которые можно указать для одного фильтра объединения пакетов. Драйвер задает это значение в элементе MaxFieldTestsPerPacketCoalescingFilter .
Примечание Сетевые адаптеры, поддерживающие объединение пакетов, должны поддерживать пять или более полей заголовков пакетов, которые можно указать для одного фильтра объединения пакетов. Если адаптер не поддерживает объединение пакетов, драйвер минипорта должен задать для этого значения ноль.
Драйвер мини-порта должен сообщить о максимальном количестве фильтров объединения пакетов, поддерживаемых сетевым адаптером. Драйвер задает это значение в элементе MaxPacketCoalescingFilters .
Примечание Сетевые адаптеры, поддерживающие объединение пакетов, должны поддерживать десять или более фильтров объединения пакетов. Если адаптер не поддерживает объединение пакетов, драйвер минипорта должен задать для этого значения ноль.
Когда NDIS вызывает функцию MiniportInitializeEx драйвера miniport , драйвер сообщает о возможностях объединения пакетов и фильтрации базового сетевого адаптера, выполнив следующие действия:
Драйвер мини-порта инициализирует структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
Если параметр *PacketCoalescing ключевое слово в реестре имеет значение 1, драйвер мини-порта устанавливает член HardwareReceiveFilterCapabilities в указатель на ранее инициализированную структуру NDIS_RECEIVE_FILTER_CAPABILITIES.
Если параметр *PacketCoalescing ключевое слово в реестре имеет нулевое значение, драйвер мини-порта не объявляет поддержку объединения пакетов. Он должен задать для члена HardwareReceiveFilterCapabilities значение NULL.
Драйвер вызывает NdisMSetMiniportAttributes и задает параметру MiniportAttributes указатель на структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
Метод, используемый драйверами мини-порта для создания отчетов о возможностях объединения пакетов и фильтрации базового сетевого адаптера, основан на методе NDIS 6.20 для создания отчетов о возможностях управления питанием. Дополнительные сведения об этом методе см. в статье Возможности управления питанием в отчетах.
Дополнительные сведения о процессе инициализации адаптера см. в разделе Инициализация адаптера miniport.