Получение доступа к информации о разгрузке TCP/IP NET_BUFFER_LIST
NDIS версии 6.0 и более поздние предоставляют данные разгрузки TCP/IP вне полосы (OOB) в элементе NetBufferListInfo структуры NET_BUFFER_LIST, которая задает связанный список структур NET_BUFFER. Элемент NetBufferListInfo представляет собой массив значений, содержащих сведения, общие для всех структур NET_BUFFER в списке.
Используйте следующие идентификаторы с макросом NET_BUFFER_LIST_INFO, чтобы задать и получить данные OOB-вывода TCP/IP в массиве NetBufferListInfo:
TcpIpChecksumNetBufferListInfo
Указывает сведения контрольной суммы, используемые при разгрузке задач контрольной суммы из протокола TCP/IP в мини-драйвер. При указании TcpIpChecksumNetBufferListInfoNET_BUFFER_LIST_INFO возвращает структуру NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO (а не указатель на структуру). Эта структура содержит объединение, позволяющее получать доступ к данным контрольной суммы в виде одного значения PVOID или битовых полей.
IPsecOffloadV1NetBufferListInfo
Указывает сведения о безопасности протокола Интернета (IPsec), используемые при разгрузке задач IPsec из протокола TCP/IP на мини-драйвер. При указании IPsecOffloadV1NetBufferListInfoNET_BUFFER_LIST_INFO возвращает структуру NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO.
TcpLargeSendNetBufferListInfo
Указывает сведения, используемые при разгрузке задачи сегментации большого TCP-пакета из протокола TCP/IP в минипорт-драйвер. При указании TcpLargeSendNetBufferListInfoNET_BUFFER_LIST_INFO возвращает структуру NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO (а не указатель на структуру). Эта структура содержит объединение, позволяющее получить доступ к данным в виде одного значения PVOID или битовых полей.
Ieee8021QNetBufferListInfo
Указывает сведения о пакете 802.1Q. При указании Ieee8021QNetBufferListInfoNET_BUFFER_LIST_INFO возвращает элемент значения структуры NDIS_NET_BUFFER_LIST_8021Q_INFO. Эта структура может указать сведения о приоритете 802.1p и идентификаторе виртуальной локальной сети (VLAN). Сведения о приоритете 802.1p используются для установления приоритета пакета в сетях общего носителя 802.
Если драйвер miniport сообщает о поддержке инкапсуляции NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB, он должен вставить данные Ieee8021QNetBufferListInfo в большие вытесняющие отправку версии 1 (LSOV1) и версии 2 (LSOV2) Ethernet пакеты.
TcpOffloadBytesTransferred
Указывает количество байтов данных, которые были переданы в операциях отправки, получения или отключения в TCP chimney offload.
TcpReceiveNoPush
Указывает логическое значение, представляющее режим приема запросов разгрузки TCP chimney offload. Если TRUE, запрос на получение находится в режиме без push. В противном случае запрос на получение находится в режиме push-отправки.
Для LSOV1, LSOV2, контрольных сумм и типов разгрузки IPsec драйвер минипорта выполняет разгрузку задач на основе типа данных OOB и возможностей разгрузки, которые он сообщил. Например, если драйвер протокола требует служб LSOV1 для пакета IPv4, каждый запрос на отправку, предоставляемый драйвером протокола, включает информацию из элемента LsoV1Transmit в данных OOB структуры NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Обратите внимание, что драйвер протокола должен убедиться, что драйвер минипорта поддерживает IPv4 с указанным типом инкапсуляции, прежде чем выполнять запрос на отправку.
Структура NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO содержит максимальный размер сегмента (MSS). Элемент TcpHeaderOffset указывает расположение заголовка TCP, чтобы мини-драйвер не должен анализировать заголовки IP, параметры IP или заголовки расширения IP.
Драйвер NDIS 6.0 и более поздних версий, поддерживающий LSOV2 и LSOV1, должен проверить элемент типа NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO, чтобы определить, используется ли стек драйверов LSOV2 или LSOV1, и должен выполнять соответствующую разгрузку.
Для LSOv1, прежде чем минипорт-драйвер завершит процесс отправки большого TCP-пакета, который он сегментировал на более мелкие пакеты с помощью LSO, драйвер записывает количество байт полезной нагрузки TCP, переданных в сегментированных пакетах, в член TcpPayload структуры NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO.
Если мини-драйвер задает флаг NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q в своих возможностях, драйвер может выполнять функции разгрузки задач для структур NET_BUFFER_LIST, содержащих заголовок VLAN в буферных данных. В случае полученных данных этот флаг указывает, что драйвер минипорта выполнит вычисление контрольной суммы для принятых пакетов и вставит заголовок VLAN в пакет Ethernet.
Если мини-драйвер задает флаг NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB в своих возможностях, драйвер может выполнять разгрузку в структурах NET_BUFFER_LIST, содержащих заголовок VLAN в Ieee8021QnetBufferListInfo данных OOB. При разгрузке контрольной суммы во время приема минипорт вставляет заголовок VLAN в данные OOB Ieee8021QnetBufferListInfo.