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


Доступ к сведениям о разгрузке TCP/IP NET_BUFFER_LIST

NDIS версии 6.0 и более поздних предоставляют данные разгрузки TCP/IP внеполосного канала (OOB) в элементе NetBufferListInfo структуры NET_BUFFER_LIST , которая задает связанный список NET_BUFFER структур. Элемент NetBufferListInfo — это массив значений, содержащий сведения, общие для всех NET_BUFFER структур в списке.

Используйте следующие идентификаторы с макросом NET_BUFFER_LIST_INFO , чтобы задать и получить данные об разгрузке TCP/IP в массиве NetBufferListInfo :

TcpIpChecksumNetBufferListInfo
Указывает сведения о контрольной сумме, используемые при разгрузке задач контрольной суммы из протокола TCP/IP в драйвер мини-порта. При указании TcpIpChecksumNetBufferListInfo NET_BUFFER_LIST_INFO возвращает структуру NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO (не указатель на структуру). Эта структура содержит объединение, позволяющее получать доступ к данным контрольной суммы в виде одного значения PVOID или в виде битовых полей.

IPsecOffloadV1NetBufferListInfo
Указывает сведения о разгрузке IPsec, которые используются при разгрузке задач IPsec с протокола TCP/IP в драйвер мини-порта. При указании IPsecOffloadV1NetBufferListInfo NET_BUFFER_LIST_INFO возвращает структуру NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO .

TcpLargeSendNetBufferListInfo
Указывает сведения, используемые при разгрузке сегментации большого TCP-пакета из протокола TCP/IP в драйвер мини-порта. При указании TcpLargeSendNetBufferListInfo NET_BUFFER_LIST_INFO возвращает структуру NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO (не указатель на структуру). Эта структура содержит объединение, позволяющее получить доступ к информации в виде одного значения PVOID или в виде битовых полей.

Ieee8021QNetBufferListInfo
Указывает сведения 802.1Q о пакете. При указании Ieee8021QNetBufferListInfo NET_BUFFER_LIST_INFO возвращает элемент Valueструктуры NDIS_NET_BUFFER_LIST_8021Q_INFO . Эта структура может указывать сведения о приоритете 802.1p и идентификаторе виртуальной локальной сети (VLAN). Сведения о приоритете 802.1p используются для определения приоритета пакетов в сетях 802 shared-media.

Если драйвер мини-порта сообщает о поддержке инкапсуляции NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB, он должен вставить данные Ieee8021QNetBufferListInfo в большие пакеты разгрузки отправки версии 1 (LSOV1) и большой разгрузки отправки версии 2 (LSOV2).

TcpOffloadBytesTransferred
Указывает количество байтов данных, которые были переданы при отправке, получении или отключении разгрузки tcp-канала.

TcpReceiveNoPush
Задает логическое значение, представляющее режим отправки запроса получения разгрузки tcp chimney. Если задано значение TRUE, запрос на получение находится в режиме без отправки. В противном случае запрос на получение находится в режиме принудительной отправки.

Для типов разгрузки LSOV1, LSOV2, контрольной суммы и IPsec драйвер мини-порта выполняет разгрузку задачи в зависимости от типа данных OOB и возможностей разгрузки, о чем он сообщил. Например, если драйверу протокола требуются службы LSOV1 для пакета IPv4, каждый запрос на отправку, предоставляемый драйвером протокола, включает сведения от члена LsoV1Transmit в NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO данных OOB. Обратите внимание, что драйвер протокола должен убедиться, что драйвер мини-порта поддерживает протокол IPv4 с указанным типом инкапсуляции, прежде чем отправлять запрос.

Структура NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO содержит максимальный размер сегмента (MSS). Элемент TcpHeaderOffset указывает расположение заголовка TCP, чтобы драйверу мини-порта не нужно было анализировать заголовки IP-адресов, параметры IP-адресов или заголовки расширений IP-адресов.

Драйвер мини-порта NDIS 6.0 и более поздних версий, поддерживающий LSOV2 и LSOV1, должен проверка элемент TypeNDIS_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 структур, содержащих заголовок виртуальной локальной сети в данных буфера. В случае полученных данных этот флаг указывает, что драйвер мини-порта выполнит вычисление контрольной суммы получения и поместит заголовок виртуальной ЛС в пакет Ethernet.

Если драйвер мини-порта указывает флаг NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB в своих возможностях, драйвер может выполнять разгрузку NET_BUFFER_LIST структур, содержащих заголовок виртуальной локальной сети в данных OOB Ieee8021QnetBufferListInfo . В случае разгрузки контрольной суммы получения мини-порт вставляет заголовок виртуальной ЛС в данные OOB Ieee8021QnetBufferListInfo .