Поддержка NVGRE в разгрузке сегментации UDP (USO)
В NDIS 6.85 реализована виртуализация сети с использованием универсальной инкапсуляции маршрутизации (NVGRE) с разгрузкой сегментации UDP (USO). Драйверы мини-портов, протоколов и фильтров NDIS, а также сетевые адаптеры, которые выполняют USO, должны поддерживать инкапсуляции NVGRE и VXLAN.
Примечание. В этой статье предполагается, что вы знакомы со сведениями в разделе Разгрузка сегментации UDP (USO).
Если NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket имеет значение TRUE , а сведения UdpSegmentationOffloadInfo вне диапазона (OOB) допустимы, требуется поддержка NVGRE и VXLAN. Сетевой адаптер должен выполнять разгрузку USO в инкапсулированном пакете NVGRE/VXLAN со следующим условием:
- NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Передача. Член UdpHeaderOffset не имеет правильного значения смещения и не должен использоваться сетевым адаптером или драйвером мини-порта.
Для поддержки NVGRE в USO драйверы протоколов и фильтров должны:
- Настройте значения InnerFrameOffset, TransportIpHeaderRelativeOffset и TcpHeaderRelativeOffset в структуре NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO с учетом заголовка инкапсуляции. TcpHeaderRelativeOffset ссылается на заголовок UDP.
Сетевые адаптеры и драйверы мини-портов могут использовать значения 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/VXLAN) будут физически смежными и будут находиться в первом MDL пакета.
Драйверы протоколов и фильтров не гарантируют, что общая длина полезных данных UDP точно кратна уменьшенного значения MSS , если UdpSegmentation.SubMssFinalSegmentSupported задано в NDIS_OFFLOAD возможностей. По этой причине драйверы мини-порта и сетевые адаптеры с SubMssFinalSegmentSupported должны обновить заголовок IP-адреса туннеля (внешнего). Сетевые адаптеры должны создавать как можно больше полноразмерных сегментов на основе уменьшенного значения MSS в NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Передачи Сведения об объекте. Для каждой отправки LSOv2 может быть создан только один вложенный сегмент MSS .
Драйверы минипорта должны:
- Вычислить контрольную сумму для заголовка IP-адреса туннеля (внешнего).
- Увеличьте значение идентификатора IP-адреса для заголовка IP-адреса туннеля (внешнего) для каждого пакета. Первый пакет должен использовать идентификатор IP-адреса в исходном (внешнем) ip-заголовке туннеля.
- Увеличьте идентификатор IP-адреса транспортного (внутреннего) IP-заголовка для каждого пакета. Первый пакет должен использовать идентификатор IP-адреса в исходном транспортном (внутреннем) IP-заголовке.
- Вычислить контрольную сумму для заголовка UDP и транспортного (внутреннего) IP-заголовка.
- Убедитесь, что полные заголовки, включая заголовки туннеля инкапсуляции (внешние), добавляются к каждому созданному пакету.