Поддержка NVGRE в разгрузке большой отправки (LSO)
В NDIS 6.30 (Windows Server 2012) представлена виртуализация сети с использованием универсальной инкапсуляции маршрутизации (NVGRE). Драйверы мини-портов, протоколов и фильтров NDIS, а также сетевые адаптеры, выполняющие разгрузку большой отправки (LSO) версии 2 (LSOV2), должны делать это таким образом, чтобы поддерживать NVGRE.
Примечание На этой странице предполагается, что вы знакомы со сведениями, приведенными в разделе Разгрузка сегментации больших ПАКЕТОВ TCP.
Если NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket имеет значение TRUE , а данные TcpIpChecksumNetBufferListInfo (OOB) допустимы. Это означает, что требуется поддержка NVGRE, а сетевой адаптер должен выполнять разгрузку LSOV2 в пакете в формате NVGRE со следующими условиями:
- Только значения в NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Структура LsoV2Transmit допустима. Сетевой адаптер и драйвер мини-порта не должны ссылаться на значения в NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Структура LsoV1Transmit .
- NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. Элемент TcpHeaderOffset не имеет правильного значения смещения и не должен использоваться сетевым адаптером или драйвером мини-порта.
Для поддержки NVGRE в LSOV2 драйверы протоколов и фильтров должны внести следующие изменения:
- Уменьшите значение MSS в NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Структура LsoV2Transmit для учета нового заголовка GRE.
- Отправьте длину полезных данных TCP, которая не может быть точно кратна уменьшенного значения MSS .
- Измените значения InnerFrameOffset, TransportIpHeaderRelativeOffset и TcpHeaderRelativeOffset в структуре NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO с учетом заголовка GRE.
Сетевые адаптеры и драйверы мини-портов могут использовать значения InnerFrameOffset, TransportIpHeaderRelativeOffset и TcpHeaderRelativeOffset , указанные в структуре NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . Драйвер сетевого адаптера или мини-порта может выполнять любые необходимые проверки заголовков для заголовка туннеля (внешнего) IP-адреса или последующих заголовков, чтобы проверить эти смещения.
Драйверы минипорта должны обрабатывать ситуации , когда NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset может находиться в списке с точечным сбором, отличном от начала пакета. Драйвер протокола гарантирует, что все добавленные заголовки инкапсуляции (ETH, IP, GRE) будут физически непрерывными и будут находиться в первом MDL пакета.
Драйверы протоколов и фильтров не гарантируют, что общая длина полезных данных TCP точно кратна уменьшенного значения MSS . По этой причине драйверы и сетевые адаптеры мини-портов должны обновлять заголовок IP-адреса туннеля (внешнего). Сетевые адаптеры должны создавать как можно больше полноразмерных сегментов на основе уменьшенного значения MSS в NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit Сведения об OOB. Для каждой отправки LSOv2 может быть создан только один вложенный сегмент MSS .
Драйверы мини-портов должны выполнять следующие действия:
- Вычисление контрольной суммы для заголовка ТУннеля (внешнего) IP-адреса.
- Приумножение значения идентификатора IP(IP ID) заголовка IP-адреса туннеля (внешнего) для каждого пакета. Первый пакет должен использовать идентификатор IP-адреса в исходном (внешнем) ip-заголовке туннеля.
- Увеличивает идентификатор IP-адреса транспортного (внутреннего) IP-заголовка для каждого пакета. Первый пакет должен использовать идентификатор IP-адреса в исходном транспортном (внутреннем) IP-заголовке.
- Вычисление контрольной суммы для заголовка TCP и транспортного (внутреннего) IP-заголовка.
- Убедитесь, что полные заголовки, включая заголовки туннеля инкапсуляции (внешние), добавляются к каждому созданному пакету.