NDIS_UDP_SEGMENTATION_OFFLOAD 結構 (ntddndis.h)
NDIS_UDP_SEGMENTATION_OFFLOAD 結構提供NDIS_OFFLOAD結構中的 UDP 分割卸載 (USO) 資訊。
語法
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。
如果迷你埠能夠分割 UDP 傳送,則驅動程式應該將 SubMssFinalSegmentSupported 的值設定為 NDIS_OFFLOAD_SUPPORTED ,其中大型封包的總長度在除以 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。
如果迷你埠能夠分割 UDP 傳送,則驅動程式應該將 SubMssFinalSegmentSupported 的值設定為 NDIS_OFFLOAD_SUPPORTED ,其中大型封包的總長度在除以 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結構用於NDIS_OFFLOAD結構的 UdpSegmentation 成員中。 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 會提供封裝旗標的位 OR,指出每個 封裝 成員中支援的封裝設定。 迷你埠驅動程序必須提供乙太網路封裝 (NDIS_ENCAPSULATION_IEEE_802_3) 。 其他類型的封裝是選擇性的。
針對 NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 狀態指示,迷你埠驅動程式會提供一個位 OR,指出每個 封裝 成員中的目前功能。
下列旗標是針對 封裝 成員所定義的:
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
指定在每個NET_BUFFER_LIST結構的 NetBufferListInfo 成員中指定 IEEE 802.3p 和 IEEE 802.3q 封裝設定。
NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED
指定路由通訊協議的邏輯連結控制 (LLC) 封裝,如 RFC 1483 中所述。 此旗標也用來指出乙太網路 LLC/SNAP 封裝。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 版本 1912 |
標頭 | ntddndis.h |