受信パス内のカプセル化されたパケットのトランスポート ヘッダーの検索
パケットを受信する場合、汎用ルーティング カプセル化 (NVGRE) を使うネットワーク仮想化 をサポートする NIC は最初に、パケットがカプセル化されるかどうか、そしてカプセル化される場合はカプセル化のタイプを決定する必要があります。
注: 送信パスでパケットは、NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO.IsEncapsulatedPacket が TRUE の場合にカプセル化されます。
受信パスで NIC は、IPv4 トンネル (外部) ヘッダーの Protocol フィールドまたは IPv6 トンネル (外部) ヘッダーの NextHeader フィールドをチェックしてパケットをカプセル化するかどうかを決定する必要があります。 割り当てられたプロトコル番号の一覧は、https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xmlで参照できます。
パケットがカプセル化パケットであると判断されたら、NIC はカプセル化パケットのプロトコルを解析することによって、トランスポート (内部) IP ヘッダーへのオフセットを決定する必要があります。
NDIS 6.30 (Windows Server 2012) 以降では、GRE IP カプセル化のみがサポートされています。 そのため NIC は、アドバタイズされた機能に応じて、次を解析できることになります。
- GRE (RFC 2784: 汎用ルーティング カプセル化 (GRE)) ヘッダー
- RFC 2890: GRE へのキーとシーケンス番号の拡張
- IPv4 (RFC 791: インターネット プロトコル) ヘッダー
- IPv6 (RFC 2460: インターネット プロトコル、バージョン 6 (IPv6)) ヘッダー
NIC は、不明またはサポートされていないカプセル化プロトコルを検出した場合、パケットを変更せずにホスト スタックに渡す必要があります。
したがって、受信パスでは、ミニポートはトランスポート (内部) IP ヘッダーを解析して IP バージョンを決定するとともに TCP または UDP ヘッダーに到達する必要があります。 これは、NDIS 6.30 (Windows Server 2012) 以降の新しい要件です。