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 封包都必須具有 Length % 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 封包都必須具有 Length % MSS == 0。 也就是說,大型封包會分割成 N 個 封包,每個封包區段包含完全 MSS 使用者位元組。 如果迷你埠驅動程式設定 SubMssFinalSegmentSupported 功能,則傳輸上的這個封包長度可除性條件不適用。 換句話說,最終區段可以小於 MSS 。
如果迷你埠能夠分割 UDP 傳送,則驅動程式應將 SubMssFinalSegmentSupported 的值設定為 NDIS_OFFLOAD_SUPPORTED,其中大型封包的總長度在除以 MSS時,會有非零的餘數。 當迷你連接埠驅動程式支援透過這個旗標指出時,允許通訊協定驅動程式發出大型 UDP 傳送,其中最終區段封包的 UDP 承載長度小於 MSS。
如需詳細資訊,請參閱 UDP 分割卸除 (USO)。
IPv6.Reserved1
保留。 迷你埠驅動程式不得讀取或寫入此欄位。
IPv6.IpExtensionHeadersSupported
迷你埠驅動程式設定的 ULONG 值,表示迷你埠配接器可以分割 IP 標頭包含 IPv6 擴充功能標頭的大型 UDP 封包。
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
指定 IEEE 802.3p 和 IEEE 802.3q 封裝設定是在每個NET_BUFFER_LIST 結構的 NetBufferListInfo 成員中指定。
NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED
指定路由通訊協議的邏輯連結控件 (LLC) 封裝,如 RFC 1483 中所述。 此旗標也用來指出乙太網路 LLC/SNAP 封裝。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 10 版本 1912 |
標頭 | ntddndis.h |