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

次のメンバー 含む IPv4 情報を指定する NDIS_UDP_SEGMENTATION_OFFLOAD 内の構造体。

IPv4.Encapsulation

IPv4 のカプセル化設定。 このメンバーの詳細については、次の「解説」セクションを参照してください。

IPv4.MaxOffLoadSize

トランスポートが 1 つのパケットでミニポート ドライバーに渡すことができるユーザー データの最大バイト数。 トランスポートは、 MaxOffLoadSize が指定したよりも多くのユーザー データ バイトを含むミニポート ドライバーにパケットを渡しません。 このようなパケットを送信する必要がある場合、トランスポート自体はパケットをより小さなパケットにセグメント化します。

IPv4.MinSegmentCount

トランスポートがセグメント化のためにハードウェアにオフロードする前に、大きな UDP パケットを割り切ることができる必要があるセグメントの最小数。 ミニポート ドライバーが パケットから MinSegmentCount が指定した数以上のセグメントを作成できない限り、トランスポートはセグメント化のために大きなパケットをミニポート ドライバーにオフロードしません。 大きな UDP パケットが最小セグメント要件を満たしていない場合、TCP/IP トランスポート自体はパケットをより小さなパケットにセグメント化します。

IPv4.SubMssFinalSegmentSupported

ミニポート ドライバーが大きな UDP パケットから派生するすべてのセグメントが同じ最大セグメント サイズ (MSS) である必要があるかどうかを指定する ULONG 値。 ミニポート ドライバーが SubMssFinalSegmentSupported 機能を設定していない場合、トランスポートによってオフロードされる各大きな UDP パケットには 、長さ % MSS == 0 が必要です。 つまり、大きなパケットは N 個のパケットに割り切れ、各パケット セグメントには正確な MSS ユーザー バイトが含まれます。 ミニポート ドライバーが 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

トランスポートが 1 つのパケットでミニポート ドライバーに渡すことができるユーザー データの最大バイト数。 トランスポートは、 MaxOffLoadSize が指定したよりも多くのユーザー データ バイトを含むミニポート ドライバーにパケットを渡しません。 このようなパケットを送信する必要がある場合、トランスポート自体はパケットをより小さなパケットにセグメント化します。

IPv6.MinSegmentCount

トランスポートがセグメント化のためにハードウェアにオフロードする前に、大きな UDP パケットを割り切ることができる必要があるセグメントの最小数。 ミニポート ドライバーが パケットから MinSegmentCount が指定した数以上のセグメントを作成できない限り、トランスポートはセグメント化のために大きなパケットをミニポート ドライバーにオフロードしません。 大きな UDP パケットが最小セグメント要件を満たしていない場合、TCP/IP トランスポート自体はパケットをより小さなパケットにセグメント化します。

IPv6.SubMssFinalSegmentSupported

ミニポート ドライバーが大きな UDP パケットから派生するすべてのセグメントが同じ最大セグメント サイズ (MSS) である必要があるかどうかを指定する ULONG 値。 ミニポート ドライバーが SubMssFinalSegmentSupported 機能を設定していない場合、トランスポートによってオフロードされる各大きな UDP パケットには 、長さ % MSS == 0 が必要です。 つまり、大きなパケットは N 個のパケットに割り切れ、各パケット セグメントには正確な MSS ユーザー バイトが含まれます。 ミニポート ドライバーが SubMssFinalSegmentSupported 機能を設定する場合、トランスポートに対するこのパケット長の割り切り条件は適用されません。 つまり、最終的なセグメントは MSS より小さくすることができます。

ドライバーは、ミニポートが UDP 送信をセグメント化できる場合に 、subMssFinalSegmentSupported の値を NDIS_OFFLOAD_SUPPORTED に設定する必要があります。この場合、大きなパケットの合計長が MSS で除算されたときに 0 以外の剰余が含まれます。 ミニポート ドライバーのサポートがこのフラグを使用して示されている場合、プロトコル ドライバーは、最終的なセグメント化されたパケットの UDP ペイロードの長さが MSS より小さい場合に、大きな UDP 送信を発行することが許可されます。

詳細については、「 UDP セグメント化オフロード (USO)」を参照してください。

IPv6.Reserved1

予約済み。 ミニポート ドライバーは、このフィールドに対して読み取りまたは書き込みを行う必要があります。

IPv6.IpExtensionHeadersSupported

ミニポート アダプターが IPv6 拡張ヘッダーを含む IP ヘッダーを持つ大きな UDP パケットをセグメント化できることを示すためにミニポート ドライバーが設定する ULONG 値。

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
RFC 1483 で説明されているように、ルーティング プロトコルの論理リンク制御 (LLC) カプセル化を指定します。 このフラグは、イーサネット LLC/SNAP カプセル化を示すためにも使用されます。

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 1912
Header ntddndis.h

こちらもご覧ください

UDP セグメント化オフロード (USO)