NDIS_UDP_SEGMENTATION_OFFLOAD 구조체(ntddndis.h)

NDIS_UDP_SEGMENTATION_OFFLOAD 구조체는 NDIS_OFFLOAD 구조체에 USO(UDP 구분 오프로드) 정보를 제공합니다.

구문

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

다음 멤버를 포함하는 IPv4 정보를 지정하는 NDIS_UDP_SEGMENTATION_OFFLOAD 내의 구조체입니다.

IPv4.Encapsulation

IPv4에 대한 캡슐화 설정입니다. 이 멤버에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.

IPv4.MaxOffLoadSize

전송이 단일 패킷의 미니포트 드라이버에 전달할 수 있는 최대 사용자 데이터 바이트입니다. 전송은 MaxOffLoadSize 가 지정하는 것보다 더 많은 사용자 데이터 바이트를 포함하는 미니포트 드라이버에 패킷을 전달하지 않습니다. 이러한 패킷을 전송해야 하는 경우 전송 자체는 패킷을 더 작은 패킷으로 분할합니다.

IPv4.MinSegmentCount

전송이 분할을 위해 하드웨어로 오프로드하기 전에 큰 UDP 패킷을 나눌 수 있어야 하는 최소 세그먼트 수입니다. 미니포트 드라이버가 패킷에서 MinSegmentCount 가 지정한 만큼의 세그먼트를 만들 수 없다면 전송은 분할을 위해 미니포트 드라이버에 큰 패킷을 오프로드하지 않습니다. 큰 UDP 패킷이 최소 세그먼트 요구 사항을 충족하지 않는 경우 TCP/IP 전송 자체는 패킷을 더 작은 패킷으로 분할합니다.

IPv4.SubMssFinalSegmentSupported

미니포트 드라이버가 큰 UDP 패킷에서 파생되는 모든 세그먼트가 MSS(최대 세그먼트 크기)와 같은지 여부를 지정하는 ULONG 값입니다. 미니포트 드라이버가 SubMssFinalSegmentSupported 기능을 설정하지 않은 경우 전송에 의해 오프로드된 각 큰 UDP 패킷에는 Length % MSS == 0이 있어야 합니다. 즉, 큰 패킷은 정확히 MSS 사용자 바이트를 포함하는 각 패킷 세그먼트를 사용하여 N 패킷으로 나눌 수 있습니다. 미니포트 드라이버가 SubMssFinalSegmentSupported 기능을 설정하는 경우 전송에 대한 이 패킷 길이 다양성 조건이 적용되지 않습니다. 즉, 최종 세그먼트는 MSS보다 작을 수 있습니다.

미니포트가 UDP 송신을 분할할 수 있는 경우 드라이버가 SubMssFinalSegmentSupported 값을 NDIS_OFFLOAD_SUPPORTED 설정해야 합니다. 여기서 큰 패킷의 총 길이는 MSS로 나눌 때 0이 아닌 나머지가 있습니다. 이 플래그를 통해 미니포트 드라이버 지원이 표시되면 프로토콜 드라이버는 최종 분할된 패킷의 UDP 페이로드 길이가 MSS보다 작은 경우 큰 UDP 보내기를 발급할 수 있습니다.

자세한 내용은 UDP 분류 오프로드(USO)를 참조하세요.

IPv4.Reserved

예약되어 있습니다. 미니포트 드라이버는 이 필드를 읽거나 쓸 수 없습니다.

IPv6

다음 멤버를 포함하는 IPv6 정보를 지정하는 NDIS_UDP_SEGMENTATION_OFFLOAD 내의 구조체입니다.

IPv6.Encapsulation

IPv6에 대한 캡슐화 설정입니다. 이 멤버에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.

IPv6.MaxOffLoadSize

전송이 단일 패킷의 미니포트 드라이버에 전달할 수 있는 최대 사용자 데이터 바이트입니다. 전송은 MaxOffLoadSize 가 지정하는 것보다 더 많은 사용자 데이터 바이트를 포함하는 미니포트 드라이버에 패킷을 전달하지 않습니다. 이러한 패킷을 전송해야 하는 경우 전송 자체는 패킷을 더 작은 패킷으로 분할합니다.

IPv6.MinSegmentCount

전송이 분할을 위해 하드웨어로 오프로드하기 전에 큰 UDP 패킷을 나눌 수 있어야 하는 최소 세그먼트 수입니다. 미니포트 드라이버가 패킷에서 MinSegmentCount 가 지정한 만큼의 세그먼트를 만들 수 없다면 전송은 분할을 위해 미니포트 드라이버에 큰 패킷을 오프로드하지 않습니다. 큰 UDP 패킷이 최소 세그먼트 요구 사항을 충족하지 않는 경우 TCP/IP 전송 자체는 패킷을 더 작은 패킷으로 분할합니다.

IPv6.SubMssFinalSegmentSupported

미니포트 드라이버가 큰 UDP 패킷에서 파생되는 모든 세그먼트가 MSS(최대 세그먼트 크기)와 같은지 여부를 지정하는 ULONG 값입니다. 미니포트 드라이버가 SubMssFinalSegmentSupported 기능을 설정하지 않은 경우 전송에 의해 오프로드된 각 큰 UDP 패킷에는 Length % MSS == 0이 있어야 합니다. 즉, 큰 패킷은 정확히 MSS 사용자 바이트를 포함하는 각 패킷 세그먼트를 사용하여 N 패킷으로 나눌 수 있습니다. 미니포트 드라이버가 SubMssFinalSegmentSupported 기능을 설정하는 경우 전송에 대한 이 패킷 길이 다양성 조건이 적용되지 않습니다. 즉, 최종 세그먼트는 MSS보다 작을 수 있습니다.

미니포트가 UDP 송신을 분할할 수 있는 경우 드라이버가 SubMssFinalSegmentSupported 값을 NDIS_OFFLOAD_SUPPORTED 설정해야 합니다. 여기서 큰 패킷의 총 길이는 MSS로 나눌 때 0이 아닌 나머지가 있습니다. 이 플래그를 통해 미니포트 드라이버 지원이 표시되면 프로토콜 드라이버는 최종 분할된 패킷의 UDP 페이로드 길이가 MSS보다 작은 경우 큰 UDP 보내기를 발급할 수 있습니다.

자세한 내용은 UDP 분류 오프로드(USO)를 참조하세요.

IPv6.Reserved1

예약되어 있습니다. 미니포트 드라이버는 이 필드를 읽거나 쓸 수 없습니다.

IPv6.IpExtensionHeadersSupported

미니포트 어댑터가 IP 헤더에 IPv6 확장 헤더가 포함된 큰 UDP 패킷을 분할할 수 있음을 나타내기 위해 미니포트 드라이버가 설정하는 ULONG 값입니다.

IPv6.Reserved2

예약되어 있습니다. 미니포트 드라이버는 이 필드를 읽거나 쓸 수 없습니다.

설명

미니포트 드라이버는 이 구조체의 필드 및 캡슐화 요구 사항의 값을 NDIS_TCP_LARGE_SEND_OFFLOAD_V2 구조체와 유사하게 설정해야 합니다.

NDIS_UDP_SEGMENTATION_OFFLOAD 구조체는 NDIS_OFFLOAD 구조체의 UdpSegmentation 멤버에 사용됩니다. NDIS_UDP_SEGMENTATION_OFFLOAD 미니포트 어댑터가 큰 UDP 패킷을 더 작은 패킷으로 분할하기 위해 제공하는 현재 또는 지원되는 서비스를 지정합니다.

NDIS_OFFLOADNDIS_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
RFC 1483에 설명된 대로 라우트된 프로토콜에 대한 LLC(논리 링크 제어) 캡슐화를 지정합니다. 이 플래그는 이더넷 LLC/SNAP 캡슐화를 나타내는 데도 사용됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 버전 1912
머리글 ntddndis.h

추가 정보

UDP 구분 오프로드(USO)