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


структура NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO (ndis/nblchecksum.h)

Структура NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO указывает сведения, используемые при разгрузке задач контрольной суммы из транспорта TCP/IP в сетевой адаптер. Структура NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO является частью NET_BUFFER_LIST информации (внеполосные данные), связанной со структурой NET_BUFFER_LIST .

Синтаксис

typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
  union {
    struct {
      ULONG IsIPv4 : 1;
      ULONG IsIPv6 : 1;
      ULONG TcpChecksum : 1;
      ULONG UdpChecksum : 1;
      ULONG IpHeaderChecksum : 1;
      ULONG Reserved : 11;
      ULONG TcpHeaderOffset : 10;
    } Transmit;
    struct {
      ULONG TcpChecksumFailed : 1;
      ULONG UdpChecksumFailed : 1;
      ULONG IpChecksumFailed : 1;
      ULONG TcpChecksumSucceeded : 1;
      ULONG UdpChecksumSucceeded : 1;
      ULONG IpChecksumSucceeded : 1;
      ULONG Loopback : 1;
      ULONG TcpChecksumValueInvalid : 1;
      ULONG IpChecksumValueInvalid : 1;
    } Receive;
    PVOID Value;
  };
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;

Члены

Transmit

Структура, содержащая следующие элементы:

Transmit.IsIPv4

Задается транспортом TCP/IP, чтобы указать, что отправляемый пакет содержит IPv4-адреса.

Transmit.IsIPv6

Задается транспортом TCP/IP, чтобы указать, что отправляемый пакет содержит IPv6-адреса.

Transmit.TcpChecksum

Задается транспортом TCP/IP, чтобы указать, что сетевой адаптер должен вычислять контрольную сумму TCP пакета.

Transmit.UdpChecksum

Задается транспортом TCP/IP, чтобы указать, что сетевой адаптер должен вычислять контрольную сумму UDP пакета.

Transmit.IpHeaderChecksum

Задается транспортом TCP/IP, чтобы указать, что сетевой адаптер должен вычислить контрольную сумму IP-адресов для первого заголовка IP-адреса в пакете. Если пакет содержит заголовок IP-адреса туннеля и заголовок IP транспорта, сетевой адаптер должен вычислить контрольную сумму для обоих ip-заголовков.

Transmit.Reserved

Зарезервировано для NDIS.

Transmit.TcpHeaderOffset

Смещение (в байтах) заголовка TCP от начала пакета для ПАКЕТОВ TCP. Драйверы miniport могут использовать TcpHeaderOffset для определения расположения заголовка TCP, чтобы им не нужно было анализировать заголовок MAC и IP.

Receive

Структура, содержащая следующие элементы:

Receive.TcpChecksumFailed

Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма TCP, вычисленная сетевым адаптером, не соответствует контрольной сумме в заголовке TCP для получающего пакета.

Receive.UdpChecksumFailed

Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма UDP, вычисленная сетевой картой, не соответствует контрольной сумме в заголовке UDP пакета получения.

Receive.IpChecksumFailed

Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма IP-адресов, вычисленная сетевой картой, не соответствует контрольной сумме в первом заголовке IP-адреса получающего пакета. Если пакет получения содержит как заголовок IP-адреса туннеля, так и заголовок IP транспорта, сетевой адаптер проверяет контрольную сумму для обоих ip-заголовков.

Примечание Для инкапсулированных пакетов, имеющих как туннельный (внешний) заголовок IPv4, так и транспортный (внутренний) заголовок IPv4, драйвер мини-порта должен установить этот флаг, если проверка контрольной суммы ip-заголовка завершилась сбоем.
 

Receive.TcpChecksumSucceeded

Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма TCP, вычисленная сетевым адаптером, совпадает с контрольной суммой в заголовке TCP получающего пакета.

Receive.UdpChecksumSucceeded

Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма UDP, вычисленная сетевым адаптером, совпадает с контрольной суммой в заголовке UDP пакета получения.

Receive.IpChecksumSucceeded

Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма IP-адресов, вычисленная сетевой картой, совпадает с контрольной суммой в первом заголовке IP-адреса пакета получения. Если пакет получения содержит ip-заголовок туннеля и заголовок IP транспорта, сетевой адаптер проверяет контрольную сумму для обоих ip-заголовков.

Примечание Для инкапсулированных пакетов, имеющих как туннельный (внешний) заголовок IPv4, так и транспортный (внутренний) заголовок IPv4, драйвер мини-порта должен устанавливать этот флаг только в том случае, если проверка контрольной суммы обоих IP-заголовков успешно выполнена.
 

Receive.Loopback

NDIS использует этот бит. Драйвер мини-порта не должен проверять или задавать этот бит; драйвер мини-порта должен просто игнорировать этот бит.

Receive.TcpChecksumValueInvalid

Драйвер мини-порта, поддерживающий объединение сегментов получения (RSC), устанавливает этот флаг, указывающий, что контрольная сумма заголовка TCP была проверена сетевой картой, но значение контрольной суммы заголовка TCP в пакете недопустимо. Дополнительные сведения см. в разделе Указание объединенных сегментов.

Драйверы miniport, которые не поддерживают RSC, должны установить для этого флага нулевое значение.

Примечание Этот флаг поддерживается в драйверах NDIS 6.30 и более поздних версий в Windows 8, Windows Server 2012 и более поздних версиях.
 

Receive.IpChecksumValueInvalid

Драйвер мини-порта, поддерживающий RSC, устанавливает этот флаг, чтобы указать, что для пакета IPv4 контрольная сумма ip-заголовка была проверена сетевой картой, но значение контрольной суммы заголовка IP в пакете недопустимо. Для пакета, состоящего из туннеля и транспортного IP-заголовка, этот бит применим только к ip-заголовку туннеля. Дополнительные сведения см. в разделе Указание объединенных сегментов.

Драйверы miniport, которые не поддерживают RSC, должны установить для этого флага нулевое значение.

Примечание Этот флаг поддерживается в драйверах NDIS 6.30 и более поздних версий в Windows 8, Windows Server 2012 и более поздних версиях.
 

Value

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

Комментарии

Структура NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO указывает сведения, используемые при разгрузке задач контрольной суммы из транспорта TCP/IP в сетевой адаптер. Структура NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO является частью NET_BUFFER_LIST информации (внеполосные данные), связанной со структурой NET_BUFFER_LIST .

Перед тем, как транспорт TCP/IP передает драйверу мини-порта пакет TCP/IP, в котором драйвер мини-порта будет выполнять задачи контрольной суммы, транспорт TCP/IP обновляет структуру NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO , связанную со структурой NET_BUFFER_LIST . В частности, транспорт TCP/IP устанавливает флаг IsIPv4 или IsIPv6 , чтобы указать, что отправляемый пакет является пакетом IPv4 или IPv6.

yyЕсли транспорт TCP/IP не устанавливает флаг IsIPv4 или IsIPv6 , драйвер мини-порта не должен выполнять задачи контрольной суммы для пакета. Если транспорт TCP/IP задает флаг IsIPv4 или IsIPv6 , он также задает соответствующие флаги, необходимые для указания контрольных сумм, которые драйвер минипорта должен вычислить для пакета. Для IPv4 сюда входят флаги IpHeaderChecksum, TcpChecksum или UdpChecksum . Для IPv6 сюда входят флаги TcpChecksum или UdpChecksum . Кроме того, для пакетов TCP транспорт TCP/IP задает поле TcpHeaderOffset , если установлен флаг IsIPv4 или IPv6 . Транспорт не задает это поле для пакетов UDP.

Перед указанием получения пакета TCP/IP, в котором он выполняет задачи контрольной суммы, драйвер мини-порта устанавливает соответствующие флаги XxxChecksumFailed или XxxChecksumSucceeded в структуре NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO .

Примечание Разгрузка контрольной суммы отключается, пока мини-порт не получит OID_OFFLOAD_ENCAPSULATION. После получения этого идентификатора OID мини-порту разрешается начать проверку контрольных сумм для некоторых полученных пакетов. Мини-порт не требуется для проверки контрольной суммы для каждого пакета; Если флажки XxxChecksumFailed и XxxChecksumSucceeded сняты, ОПЕРАЦИОННая система вернется к проверке контрольной суммы в программном обеспечении. Такое поведение не зависит от требований к сертификации драйверов WHCP, которые могут потребовать от мини-порта проверки контрольной суммы для всех пакетов, так как другие драйверы протокола в системе могут не иметь резервного механизма.
 
Чтобы получить структуру NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO , драйвер должен вызвать макрос NET_BUFFER_LIST_INFO с _IdTcpIpChecksumNetBufferListInfo.

Требования

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

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

Указание объединенных сегментов

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO