структура NDIS_UDP_SEGMENTATION_OFFLOAD (ntddndis.h)
Структура NDIS_UDP_SEGMENTATION_OFFLOAD предоставляет сведения о разгрузке сегментации UDP (USO) в структуре NDIS_OFFLOAD .
Синтаксис
typedef struct _NDIS_UDP_SEGMENTATION_OFFLOAD {
struct {
ULONG Encapsulation;
ULONG MaxOffLoadSize;
ULONG MinSegmentCount : 6;
ULONG SubMssFinalSegmentSupported : 1;
#if ...
ULONG Reserved : 25;
#else
ULONG Reserved : 26;
#endif
} IPv4;
struct {
ULONG Encapsulation;
ULONG MaxOffLoadSize;
ULONG MinSegmentCount : 6;
ULONG SubMssFinalSegmentSupported : 1;
#if ...
ULONG Reserved1 : 25;
#else
ULONG Reserved1 : 26;
#endif
ULONG IpExtensionHeadersSupported : 2;
ULONG Reserved2 : 30;
} IPv6;
} NDIS_UDP_SEGMENTATION_OFFLOAD, *PNDIS_UDP_SEGMENTATION_OFFLOAD;
Члены
IPv4
Структура в NDIS_UDP_SEGMENTATION_OFFLOAD , указывающая сведения IPv4, содержащая следующие элементы:
IPv4.Encapsulation
Параметры инкапсуляции для IPv4. Дополнительные сведения об этом члене см. в следующем разделе Примечаний.
IPv4.MaxOffLoadSize
Максимальное количество байтов пользовательских данных, которые транспорт может передать драйверу мини-порта в одном пакете. Транспорт не передает пакет драйверу мини-порта, который содержит больше байтов пользовательских данных, чем указано в MaxOffLoadSize . Если такой пакет должен быть передан, транспорт сам сегментирует пакет на пакеты меньшего размера.
IPv4.MinSegmentCount
Минимальное количество сегментов, на которое должен быть разделен большой UDP-пакет, прежде чем транспорт сможет выгрузить его на оборудование для сегментации. Транспорт не будет разгружать большой пакет в драйвер мини-порта для сегментации, если драйвер мини-порта не может создать по крайней мере столько сегментов, сколько MinSegmentCount указывает из пакета. Если большой UDP-пакет не соответствует требованию к минимальному сегменту, транспорт TCP/IP разделяет пакет на пакеты меньшего размера.
IPv4.SubMssFinalSegmentSupported
Значение ULONG, указывающее, должны ли все сегменты, производные драйвера мини-порта от большого пакета UDP, иметь одинаковый максимальный размер сегмента (MSS). Если драйвер мини-порта не задает возможность SubMssFinalSegmentSupported , то каждый большой UDP-пакет, отгруженный транспортом, должен иметь длину % MSS == 0. То есть большой пакет делится на N пакетов, каждый сегмент пакета содержит ровно байты пользователя MSS . Если драйвер мини-порта задает возможность SubMssFinalSegmentSupported , это условие делимости длины пакетов к транспорту не применяется. Другими словами, конечный сегмент может быть меньше MSS.
Драйвер должен задать для subMssFinalSegmentSupported значение NDIS_OFFLOAD_SUPPORTED если мини-порт способен сегментировать UDP-отправки, где общая длина большого пакета имеет ненулевой остаток при делении на MSS. Если поддержка драйвера мини-порта указана с помощью этого флага, драйверу протокола разрешено выдавать большие UDP-отправки, в которых длина полезных данных UDP окончательного сегментированного пакета меньше MSS.
Дополнительные сведения см. в разделе Разгрузка сегментации UDP (USO).
IPv4.Reserved
Зарезервировано. Драйверы мини-порта не должны выполнять чтение и запись в это поле.
IPv6
Структура в NDIS_UDP_SEGMENTATION_OFFLOAD , указывающая сведения IPv6, содержащая следующие элементы:
IPv6.Encapsulation
Параметры инкапсуляции для IPv6. Дополнительные сведения об этом члене см. в следующем разделе Примечаний.
IPv6.MaxOffLoadSize
Максимальное количество байтов пользовательских данных, которые транспорт может передать драйверу мини-порта в одном пакете. Транспорт не передает пакет драйверу мини-порта, который содержит больше байтов пользовательских данных, чем указано в MaxOffLoadSize . Если такой пакет должен быть передан, транспорт сам сегментирует пакет на пакеты меньшего размера.
IPv6.MinSegmentCount
Минимальное количество сегментов, на которое должен быть разделен большой UDP-пакет, прежде чем транспорт сможет выгрузить его на оборудование для сегментации. Транспорт не будет разгружать большой пакет в драйвер мини-порта для сегментации, если драйвер мини-порта не может создать по крайней мере столько сегментов, сколько MinSegmentCount указывает из пакета. Если большой UDP-пакет не соответствует требованию к минимальному сегменту, транспорт TCP/IP разделяет пакет на пакеты меньшего размера.
IPv6.SubMssFinalSegmentSupported
Значение ULONG, указывающее, должны ли все сегменты, производные драйвера мини-порта от большого пакета UDP, иметь одинаковый максимальный размер сегмента (MSS). Если драйвер мини-порта не задает возможность SubMssFinalSegmentSupported , то каждый большой UDP-пакет, отгруженный транспортом, должен иметь длину % MSS == 0. То есть большой пакет делится на N пакетов, каждый сегмент пакета содержит ровно байты пользователя MSS . Если драйвер мини-порта задает возможность SubMssFinalSegmentSupported , это условие делимости длины пакетов к транспорту не применяется. Другими словами, конечный сегмент может быть меньше MSS.
Драйвер должен задать для subMssFinalSegmentSupported значение NDIS_OFFLOAD_SUPPORTED если мини-порт способен сегментировать UDP-отправки, где общая длина большого пакета имеет ненулевой остаток при делении на MSS. Если поддержка драйвера мини-порта указана с помощью этого флага, драйверу протокола разрешено выдавать большие UDP-отправки, в которых длина полезных данных UDP окончательного сегментированного пакета меньше MSS.
Дополнительные сведения см. в разделе Разгрузка сегментации UDP (USO).
IPv6.Reserved1
Зарезервировано. Драйверы мини-порта не должны выполнять чтение и запись в это поле.
IPv6.IpExtensionHeadersSupported
Значение ULONG, заданное драйвером мини-порта, указывает, что адаптер мини-порта может сегментировать большой UDP-пакет, IP-заголовок которого содержит заголовки расширения IPv6.
IPv6.Reserved2
Зарезервировано. Драйверы мини-порта не должны выполнять чтение и запись в это поле.
Комментарии
Драйверы мини-портов должны задавать значения полей и требований к инкапсуляции этой структуры аналогично NDIS_TCP_LARGE_SEND_OFFLOAD_V2 структуре.
Структура NDIS_UDP_SEGMENTATION_OFFLOAD используется в элементе UdpSegmentationструктуры NDIS_OFFLOAD . NDIS_UDP_SEGMENTATION_OFFLOAD указывает текущие или поддерживаемые службы, предоставляемые адаптером мини-порта для сегментирования больших пакетов UDP на пакеты меньшего размера.
NDIS_OFFLOAD используется в структуре NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES , структуре NDIS_BIND_PARAMETERS , структуре NDIS_FILTER_ATTACH_PARAMETERS , OID_TCP_OFFLOAD_CURRENT_CONFIG OID и указании состояния NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG .
Для OID_TCP_OFFLOAD_CURRENT_CONFIG структура NDIS_OFFLOAD определяет возможности разгрузки задач, поддерживаемые адаптером мини-порта. Если текущие возможности разгрузки изменяются, драйвер мини-порта сообщает о новых возможностях в NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG состоянии.
Элементы инкапсуляцииNDIS_UDP_SEGMENTATION_OFFLOAD определяют параметры инкапсуляции UDP для адаптера мини-порта.
В ответ на запрос OID_TCP_OFFLOAD_CURRENT_CONFIG запрос NDIS предоставляет побитовое ИЛИ флагов инкапсуляции, которые указывают поддерживаемые параметры инкапсуляции в каждом из членов инкапсуляции . Драйверы miniport должны обеспечивать инкапсуляцию Ethernet (NDIS_ENCAPSULATION_IEEE_802_3). Другие типы инкапсуляции являются необязательными.
Для указания состояния NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG драйвер мини-порта предоставляет побитовое ИЛИ флагов инкапсуляции, которые указывают текущие возможности в каждом из членов инкапсуляции .
Для членов инкапсуляции определены следующие флаги:
NDIS_ENCAPSULATION_NOT_SUPPORTED
Указывает, что разгрузка инкапсуляции не поддерживается.
NDIS_ENCAPSULATION_NULL
Задает инкапсуляцию NULL.
NDIS_ENCAPSULATION_IEEE_802_3
Указывает инкапсуляцию IEEE 802.3.
NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q
Указывает инкапсуляцию IEEE 802.3p и IEEE 802.3q.
NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB
Указывает, что параметры инкапсуляции IEEE 802.3p и IEEE 802.3q указаны в элементе NetBufferListInfo каждой структуры NET_BUFFER_LIST.
NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED
Указывает инкапсуляцию элемента управления логическими ссылками (LLC) для маршрутизируемых протоколов, как описано в документе RFC 1483. Этот флаг также используется для обозначения инкапсуляции Ethernet LLC/SNAP.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10, версия 1912 |
Верхняя часть | ntddndis.h |