структура 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-заголовков.
Receive.TcpChecksumSucceeded
Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма TCP, вычисленная сетевым адаптером, совпадает с контрольной суммой в заголовке TCP получающего пакета.
Receive.UdpChecksumSucceeded
Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма UDP, вычисленная сетевым адаптером, совпадает с контрольной суммой в заголовке UDP пакета получения.
Receive.IpChecksumSucceeded
Устанавливается драйвером мини-порта, чтобы указать, что контрольная сумма IP-адресов, вычисленная сетевой картой, совпадает с контрольной суммой в первом заголовке IP-адреса пакета получения. Если пакет получения содержит ip-заголовок туннеля и заголовок IP транспорта, сетевой адаптер проверяет контрольную сумму для обоих ip-заголовков.
Receive.Loopback
NDIS использует этот бит. Драйвер мини-порта не должен проверять или задавать этот бит; драйвер мини-порта должен просто игнорировать этот бит.
Receive.TcpChecksumValueInvalid
Драйвер мини-порта, поддерживающий объединение сегментов получения (RSC), устанавливает этот флаг, указывающий, что контрольная сумма заголовка TCP была проверена сетевой картой, но значение контрольной суммы заголовка TCP в пакете недопустимо. Дополнительные сведения см. в разделе Указание объединенных сегментов.
Драйверы miniport, которые не поддерживают RSC, должны установить для этого флага нулевое значение.
Receive.IpChecksumValueInvalid
Драйвер мини-порта, поддерживающий RSC, устанавливает этот флаг, чтобы указать, что для пакета IPv4 контрольная сумма ip-заголовка была проверена сетевой картой, но значение контрольной суммы заголовка IP в пакете недопустимо. Для пакета, состоящего из туннеля и транспортного IP-заголовка, этот бит применим только к ip-заголовку туннеля. Дополнительные сведения см. в разделе Указание объединенных сегментов.
Драйверы miniport, которые не поддерживают RSC, должны установить для этого флага нулевое значение.
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 .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Верхняя часть | ndis/nblchecksum.h (включая ndis.h) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по