次の方法で共有


RSS ハッシュの種類

概要

RSS ハッシュの種類は、NIC が RSS ハッシュ値の計算に使用する必要がある受信ネットワーク データの部分を指定します。

基になるドライバーは、ハッシュの種類、関数、および間接参照テーブルを設定します。 基になるドライバーセットのハッシュ型は、ミニポート ドライバーがサポートできる型のサブセットにすることができます。 詳細については、「 RSS 構成」を参照してください。

ハッシュ型は、次のフラグの有効な組み合わせの OR です。

  • NDIS_HASH_IPV4
  • NDIS_HASH_TCP_IPV4
  • NDIS_HASH_UDP_IPV4
  • NDIS_HASH_IPV6
  • NDIS_HASH_TCP_IPV6
  • NDIS_HASH_UDP_IPV6
  • NDIS_HASH_IPV6_EX
  • NDIS_HASH_TCP_IPV6_EX
  • NDIS_HASH_UDP_IPV6_EX

有効なフラグの組み合わせのセットを次に示します。

  • IPv4 (NDIS_HASH_IPV4、NDIS_HASH_TCP_IPV4、およびNDIS_HASH_UDP_IPV4の組み合わせ)
  • IPv6 (NDIS_HASH_IPV6、NDIS_HASH_TCP_IPV6、およびNDIS_HASH_UDP_IPV6の組み合わせ)
  • IPv6 と拡張ヘッダー (NDIS_HASH_IPV6_EX、NDIS_HASH_TCP_IPV6_EX、およびNDIS_HASH_UDP_IPV6_EXの組み合わせ)

NIC は、IPv4 セットの組み合わせのいずれかをサポートする必要があります。 その他のセットと組み合わせは省略可能です。 NIC では、一度に複数のセットをサポートできます。 この場合、受信したデータの種類によって、NIC で使用されるハッシュの種類が決まります。

一般に、NIC が受信したデータを正しく解釈できない場合は、ハッシュ値を計算しないでください。 たとえば、NIC が IPv4 のみをサポートし、正しく解釈できない IPv6 パケットを受信する場合、ハッシュ値を計算することはできません。 NIC がサポートしていないトランスポートの種類のパケットを受信する場合は、ハッシュ値を計算しないでください。 たとえば、TCP パケットのハッシュ値を計算する場合に、NIC が UDP パケットを受信する場合は、ハッシュ値を計算しないでください。 この場合、パケットは RSS 以外の場合と同様に処理されます。 RSS 以外の受信処理の詳細については、「非 RSS 受信処理」を参照してください。

IPv4 ハッシュ型の組み合わせ

IPv4 セットの有効なハッシュ型の組み合わせは次のとおりです。

NDIS_HASH_IPV4

このフラグのみを設定すると、NIC は次の IPv4 ヘッダー フィールドでハッシュ値を計算する必要があります。

  • ソース-IPv4-Address
  • 宛先 -IPv4-Address

NIC が IP ヘッダーと TCP ヘッダーの両方を持つパケットを受信する場合、NDIS_HASH_TCP_IPV4は常に使用する必要はありません。 フラグメント化された IP パケットの場合は、NDIS_HASH_IPV4を使用する必要があります。 これには、IP ヘッダーと TCP ヘッダーの両方を含む最初のフラグメントが含まれます。

NDIS_HASH_TCP_IPV4

このフラグだけを設定すると、NIC は受信したデータを解析して、TCP セグメントを含む IPv4 パケットを識別する必要があります。

NIC は、存在する IP オプションを識別してスキップする必要があります。 NIC が IP オプションをスキップできない場合は、ハッシュ値を計算しないでください。

NIC は、次のフィールドに対してハッシュ値を計算する必要があります。

  • ソース-IPv4-Address
  • 宛先 -IPv4-Address
  • ソース TCP ポート
  • 宛先 TCP ポート

NDIS_HASH_UDP_IPV4

このフラグだけを設定すると、NIC は受信したデータを解析して、UDP データグラムを含む IPv4 パケットを識別する必要があります。

NIC は、存在する IP オプションを識別してスキップする必要があります。 NIC が IP オプションをスキップできない場合は、ハッシュ値を計算しないでください。

NIC は、次のフィールドに対してハッシュ値を計算する必要があります。

  • ソース-IPv4-Address
  • 宛先 -IPv4-Address
  • ソース UDP ポート
  • 宛先 UDP ポート

NDIS_HASH_TCP_IPV4 |NDIS_HASH_IPV4

このフラグの組み合わせが設定されている場合、NIC は、NDIS_HASH_TCP_IPV4の場合に指定されたハッシュ計算を実行する必要があります。 ただし、パケットに TCP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV4の場合に指定されたハッシュ値を計算する必要があります。

NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

このフラグの組み合わせが設定されている場合、NIC は、NDIS_HASH_UDP_IPV4の場合に指定されたハッシュ計算を実行する必要があります。 ただし、パケットに UDP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV4の場合に指定されたハッシュ値を計算する必要があります。

NDIS_HASH_TCP_IPV4 | NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

このフラグの組み合わせが設定されている場合、NIC はパケット内のトランスポートで指定されたハッシュ計算を実行する必要があります。 ただし、パケットに TCP ヘッダーまたは UDP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV4の場合に指定されたハッシュ値を計算する必要があります。

IPv6 ハッシュ型の組み合わせ

IPv6 セットの有効なハッシュ型の組み合わせは次のとおりです。

NDIS_HASH_IPV6

このフラグだけを設定すると、NIC は次のフィールドに対してハッシュを計算する必要があります。

  • ソース-IPv6-Address
  • 宛先 -IPv6-Address

NDIS_HASH_TCP_IPV6

このフラグだけを設定すると、NIC は受信したデータを解析して、TCP セグメントを含む IPv6 パケットを識別する必要があります。 NIC は、パケットに存在する IPv6 拡張ヘッダーを識別してスキップする必要があります。 NIC が IPv6 拡張ヘッダーをスキップできない場合は、ハッシュ値を計算しないでください。

NIC は、次のフィールドに対してハッシュ値を計算する必要があります。

  • Source-IPv6 -Address
  • Destination-IPv6 -Address
  • ソース TCP ポート
  • 宛先 TCP ポート

NDIS_HASH_UDP_IPV6

このフラグだけを設定すると、NIC は受信したデータを解析して、UDP データグラムを含む IPv6 パケットを識別する必要があります。 NIC は、パケットに存在する IPv6 拡張ヘッダーを識別してスキップする必要があります。 NIC が IPv6 拡張ヘッダーをスキップできない場合は、ハッシュ値を計算しないでください。

NIC は、次のフィールドに対してハッシュ値を計算する必要があります。

  • ソース-IPv6-Address
  • 宛先 -IPv6-Address
  • ソース UDP ポート
  • 宛先 UDP ポート

NDIS_HASH_TCP_IPV6 | NDIS_HASH_IPV6

このフラグの組み合わせが設定されている場合、NIC は、NDIS_HASH_TCP_IPV6の場合に指定されたハッシュ計算を実行する必要があります。 ただし、パケットに TCP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV6の場合に指定されたハッシュを計算する必要があります。

たとえば、パケットがフラグメント化されている場合、TCP ヘッダーが含まれていない可能性があります。 その場合、NIC は IP ヘッダー経由でのみハッシュを計算する必要があります。

NDIS_HASH_UDP_IPV6 |NDIS_HASH_IPV6

このフラグの組み合わせが設定されている場合、NIC は、NDIS_HASH_UDP_IPV6の場合に指定されたハッシュ計算を実行する必要があります。 ただし、パケットに UDP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV6の場合に指定されたハッシュを計算する必要があります。

たとえば、パケットがフラグメント化されている場合、UDP ヘッダーが含まれていない可能性があります。 その場合、NIC は IP ヘッダー経由でのみハッシュを計算する必要があります。

NDIS_HASH_TCP_IPV6 |NDIS_HASH_UDP_IPV6 |NDIS_HASH_IPV6

このフラグの組み合わせが設定されている場合、NIC はパケット内のトランスポートで指定されたハッシュ計算を実行する必要があります。 ただし、パケットに TCP ヘッダーまたは UDP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV6の場合に指定されたハッシュ値を計算する必要があります。

たとえば、パケットがフラグメント化されている場合、TCP または UDP ヘッダーが含まれていない可能性があります。 その場合、NIC は IP ヘッダー経由でのみハッシュを計算する必要があります。

拡張ヘッダーとハッシュ型の組み合わせを持つIPv6

IPv6 と拡張ヘッダーセットの有効な組み合わせは次のとおりです。

NDIS_HASH_IPV6_EX

このフラグだけを設定すると、NIC は次のフィールドに対してハッシュを計算する必要があります。

  • IPv6 宛先オプション ヘッダーのホーム アドレス オプションからのホーム アドレス。 拡張ヘッダーが存在しない場合は、ソース IPv6 アドレスを使用します。
  • 関連付けられた拡張ヘッダーの Routing-Header-Type-2 に含まれる IPv6 アドレス。 拡張ヘッダーが存在しない場合は、宛先 IPv6 アドレスを使用します。

NDIS_HASH_TCP_IPV6_EX

このフラグだけを設定すると、NIC は次のフィールドに対してハッシュを計算する必要があります。

  • IPv6 宛先オプション ヘッダーのホーム アドレス オプションからのホーム アドレス。 拡張ヘッダーが存在しない場合は、ソース IPv6 アドレスを使用します。
  • 関連付けられた拡張ヘッダーの Routing-Header-Type-2 に含まれる IPv6 アドレス。 拡張ヘッダーが存在しない場合は、宛先 IPv6 アドレスを使用します。
  • ソース TCP ポート
  • 宛先 TCP ポート

NDIS_HASH_UDP_IPV6_EX

このフラグだけを設定すると、NIC は次のフィールドに対してハッシュを計算する必要があります。

  • IPv6 宛先オプション ヘッダーのホーム アドレス オプションからのホーム アドレス。 拡張ヘッダーが存在しない場合は、ソース IPv6 アドレスを使用します。
  • 関連付けられた拡張ヘッダーの Routing-Header-Type-2 に含まれる IPv6 アドレス。 拡張ヘッダーが存在しない場合は、宛先 IPv6 アドレスを使用します。
  • ソース UDP ポート
  • 宛先 UDP ポート

NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_IPV6_EX

このフラグの組み合わせが設定されている場合、NIC は、NDIS_HASH_TCP_IPV6_EXの場合に指定されたハッシュ計算を実行する必要があります。 ただし、パケットに TCP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV6_EXの場合に指定されたハッシュを計算する必要があります。

NDIS_HASH_UDP_IPV6_EX |NDIS_HASH_IPV6_EX

このフラグの組み合わせが設定されている場合、NIC は、NDIS_HASH_UDP_IPV6_EXの場合に指定されたハッシュ計算を実行する必要があります。 ただし、パケットに UDP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV6_EXの場合に指定されたハッシュを計算する必要があります。

NDIS_HASH_TCP_IPV6_EX |NDIS_HASH_UDP_IPV6_EX |NDIS_HASH_IPV6_EX

このフラグの組み合わせが設定されている場合、NIC はパケット トランスポートで指定されたハッシュ計算を実行する必要があります。 ただし、パケットに TCP または UDP ヘッダーが含まれていない場合、NIC は、NDIS_HASH_IPV6_EXの場合に指定されたハッシュを計算する必要があります。

ミニポート ドライバーが NIC のNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EXやNDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX機能を報告する場合、NIC は、プロトコル ドライバーが設定した IPv6 拡張ハッシュの種類に従って(IPv6 拡張ヘッダー内のフィールドを介して) ハッシュ値を計算する必要があります。 NIC は、ハッシュ値が計算される IPv6 パケットのNET_BUFFER_LIST構造に拡張ハッシュの種類または通常のハッシュの種類を格納できます。

ミニポート ドライバーは、受信したデータを示す前に 、NET_BUFFER_LIST 構造体のハッシュの種類を設定します。 詳細については、「 RSS 受信データを示す」を参照してください。