NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体 (ndis/nblchecksum.h)

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体は、TCP/IP トランスポートから NIC へのチェックサム タスクのオフロードに使用される情報を指定します。 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体は、NET_BUFFER_LIST構造体に関連付けられているNET_BUFFER_LIST情報 (帯域外データ) の一部です。

構文

typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
  union {
    struct {
      ULONG IsIPv4 : 1;
      ULONG IsIPv6 : 1;
      ULONG TcpChecksum : 1;
      ULONG UdpChecksum : 1;
      ULONG IpHeaderChecksum : 1;
      ULONG Reserved : 11;
      ULONG TcpHeaderOffset : 10;
    } Transmit;
    struct {
      ULONG TcpChecksumFailed : 1;
      ULONG UdpChecksumFailed : 1;
      ULONG IpChecksumFailed : 1;
      ULONG TcpChecksumSucceeded : 1;
      ULONG UdpChecksumSucceeded : 1;
      ULONG IpChecksumSucceeded : 1;
      ULONG Loopback : 1;
      ULONG TcpChecksumValueInvalid : 1;
      ULONG IpChecksumValueInvalid : 1;
    } Receive;
    PVOID Value;
  };
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;

メンバー

Transmit

次のメンバーを含む構造体。

Transmit.IsIPv4

送信パケットに IPv4 アドレスが含まれていることを示すように TCP/IP トランスポートによって設定されます。

Transmit.IsIPv6

送信パケットに IPv6 アドレスが含まれていることを示す TCP/IP トランスポートによって設定されます。

Transmit.TcpChecksum

TCP/IP トランスポートによって設定され、NIC がパケットの TCP チェックサムを計算する必要があることを示します。

Transmit.UdpChecksum

TCP/IP トランスポートによって設定され、NIC がパケットの UDP チェックサムを計算する必要があることを示します。

Transmit.IpHeaderChecksum

TCP/IP トランスポートによって設定され、NIC がパケット内の最初の IP ヘッダーの IP チェックサムを計算する必要があることを示します。 パケットにトンネル IP ヘッダーとトランスポート IP ヘッダーの両方が含まれている場合、NIC は両方の IP ヘッダーのチェックサムを計算する必要があります。

Transmit.Reserved

NDIS 用に予約されています。

Transmit.TcpHeaderOffset

TCP パケットのパケットの先頭からの TCP ヘッダーのオフセット (バイト単位)。 ミニポート ドライバーは、 TCPHeaderOffset を使用して、MAC ヘッダーと IP ヘッダーを解析する必要がないように、TCP ヘッダーの場所を決定できます。

Receive

次のメンバーを含む構造体。

Receive.TcpChecksumFailed

NIC によって計算された TCP チェックサムが受信パケットの TCP ヘッダーのチェックサムと一致しなかったことを示すようにミニポート ドライバーによって設定されます。

Receive.UdpChecksumFailed

NIC によって計算された UDP チェックサムが受信パケットの UDP ヘッダーのチェックサムと一致しなかったことを示すようにミニポート ドライバーによって設定されます。

Receive.IpChecksumFailed

NIC によって計算された IP チェックサムが、受信パケットの最初の IP ヘッダーのチェックサムと一致しなかったことを示すようにミニポート ドライバーによって設定されます。 受信パケットにトンネル IP ヘッダーとトランスポート IP ヘッダーの両方が含まれている場合、NIC は両方の IP ヘッダーのチェックサムを検証します。

メモ トンネル (外側) IPv4 ヘッダーとトランスポート (内部) IPv4 ヘッダーの両方を持つカプセル化されたパケットの場合、ミニポート ドライバーは、いずれかの IP ヘッダー チェックサム検証に失敗した場合にこのフラグを設定する必要があります。
 

Receive.TcpChecksumSucceeded

NIC によって計算された TCP チェックサムが受信パケットの TCP ヘッダーのチェックサムと一致することを示すようにミニポート ドライバーによって設定されます。

Receive.UdpChecksumSucceeded

NIC によって計算された UDP チェックサムが受信パケットの UDP ヘッダーのチェックサムと一致することを示すようにミニポート ドライバーによって設定されます。

Receive.IpChecksumSucceeded

NIC によって計算された IP チェックサムが、受信パケットの最初の IP ヘッダーのチェックサムと一致することを示すようにミニポート ドライバーによって設定されます。 受信パケットにトンネル IP ヘッダーとトランスポート IP ヘッダーの両方が含まれている場合、NIC は両方の IP ヘッダーのチェックサムを検証します。

メモ トンネル (外側) IPv4 ヘッダーとトランスポート (内部) IPv4 ヘッダーの両方を持つカプセル化されたパケットの場合、ミニポート ドライバーは、両方の IP ヘッダー チェックサム検証が成功した場合にのみ、このフラグを設定する必要があります。
 

Receive.Loopback

NDIS では、このビットが使用されます。 ミニポート ドライバーは、このビットを調べたり設定したりすることはできません。ミニポート ドライバーは、このビットを無視する必要があります。

Receive.TcpChecksumValueInvalid

受信セグメント結合 (RSC) をサポートするミニポート ドライバーは、TCP ヘッダー チェックサムが NIC によって検証されたが、パケット内の TCP ヘッダー チェックサム値が無効であることを示すように、このフラグを設定します。 詳細については、「 結合セグメントの指定」を参照してください。

RSC をサポートしていないミニポート ドライバーは、このフラグを 0 に設定する必要があります。

メモこのフラグは、WINDOWS 8、Windows Server 2012、以降の NDIS 6.30 以降のミニポート ドライバーでサポートされています。
 

Receive.IpChecksumValueInvalid

RSC をサポートするミニポート ドライバーは、IPv4 パケットの場合、IP ヘッダー チェックサムが NIC によって検証されたが、パケット内の IP ヘッダー チェックサム値が無効であることを示すように、このフラグを設定します。 トンネルとトランスポート IP ヘッダーの両方で構成されるパケットの場合、このビットはトンネル IP ヘッダーにのみ適用されます。 詳細については、「 結合セグメントの指定」を参照してください。

RSC をサポートしていないミニポート ドライバーは、このフラグを 0 に設定する必要があります。

メモこのフラグは、WINDOWS 8、Windows Server 2012、以降の NDIS 6.30 以降のミニポート ドライバーでサポートされています。
 

Value

チェックサム情報の PVOID バージョン。 ミニポート ドライバーは、このメンバーを使用して、特定のフィールドではなく生の情報にアクセスできます。

注釈

NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体は、TCP/IP トランスポートから NIC へのチェックサム タスクのオフロードに使用される情報を指定します。 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体は、NET_BUFFER_LIST構造体に関連付けられているNET_BUFFER_LIST情報 (帯域外データ) の一部です。

TCP/IP トランスポートは、ミニポート ドライバーがチェックサム タスクを実行する TCP/IP パケットをミニポート ドライバーに渡す前に、TCP/IP トランスポートは、NET_BUFFER_LIST構造体に関連付けられているNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体を更新します。 具体的には、TCP/IP トランスポートは、送信パケットが IPv4 または IPv6 パケットであることを示す IsIPv4 または IsIPv6 フラグを設定します。

yy TCP/IP トランスポートで IsIPv4 フラグまたは IsIPv6 フラグが設定されていない場合、ミニポート ドライバーはパケットに対してチェックサム タスクを実行しないでください。 TCP/IP トランスポートが IsIPv4 または IsIPv6 フラグを設定する場合は、ミニポート ドライバーがパケットに対して計算する必要があるチェックサムを示すために必要な適切なフラグも設定します。 IPv4 の場合、これには IpHeaderChecksumTcpChecksum、または UdpChecksum フラグが 含まれます。 IPv6 の場合、これには TcpChecksum または UdpChecksum フラグが 含まれます。 さらに、TCP パケットの場合、ISIPv4 または IPv6 フラグが設定されている場合、TCP/IP トランスポートによって TcpHeaderOffset フィールドが設定されます。 トランスポートでは、UDP パケットに対してこのフィールドは設定されません。

チェックサム タスクを実行する受信 TCP/IP パケットを示す前に、ミニポート ドライバーは、適切な XxxChecksumFailed または XxxChecksumSucceeded フラグ をNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 構造体に設定します。

メモ チェックサム オフロードは、ミニポートが OID_OFFLOAD_ENCAPSULATIONを受信するまで無効になります。 この OID を受信すると、ミニポートは、受信したパケットのチェックサムの検証を開始できます。 ミニポートは、すべてのパケットのチェックサムを検証する必要はありません。XxxChecksumFailed フラグと XxxChecksumSucceeded フラグの両方がクリアされている場合、OS はソフトウェアでチェックサムを検証するためにフォールバックします。 この動作は WHCP ドライバー認定要件とは無関係です。この要件では、システム上の他のプロトコル ドライバーにフォールバック メカニズムがない可能性があるため、ミニポートがすべてのパケットのチェックサムを検証する必要がある場合があります。
 
NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO構造体を取得するには、ドライバーは TcpIpChecksumNetBufferListInfoの_Idを使用してNET_BUFFER_LIST_INFO マクロを呼び出す必要があります。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
Header ndis/nblchecksum.h (ndis.h を含む)

こちらもご覧ください

結合されたセグメントの表示

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO