次の方法で共有


イーサネット フレームの送信

Windows TCP/IP トランスポートでは、イーサネット フレームを送信するための一連の要件がサポートされています。 送信要求を生成したり、基になるドライバーの送信要求を変更したりするドライバー (MUX 中間ドライバーやフィルター ドライバーなど) は、TCP/IP トランスポートが実装する要件をサポートする必要があります。

メモ ドライバー スタック内のドライバーがこれらの要件に従っていない場合は、基になるミニポート ドライバー、MUX 中間ドライバー、フィルター ドライバーが予期せず動作する可能性があります。

イーサネット送信要求の場合、ドライバーは次の要件をサポートする必要があります。

  • ドライバーが送信要求を生成した場合、ドライバーはイーサネット フレームの NET_BUFFER_LIST 構造を割り当てる必要があります。 各 NET_BUFFER_LIST 構造体の NetBufferListInfo メンバーには、特定の用途に必要な帯域外 (OOB) データを含める必要があります。 OOB データは、NET_BUFFER_LIST 構造体に関連付けられているすべての NET_BUFFER 構造体に適用されます。

  • ドライバーが送信要求を生成した場合、ドライバーはイーサネット フレームに 1 つ以上の NET_BUFFER 構造体を割り当て、これらの構造体を NET_BUFFER_LIST 構造体にリンクさせる必要があります。 NET_BUFFER_LIST 構造体にリンクされている各 NET_BUFFER 構造体は、単一のイーサネット フレームを記述します。 ドライバーは、一つの送信要求で複数の NET_BUFFER_LIST 構造体を連結できます。

  • NET_BUFFER_LIST 構造体に関連付けられているすべての NET_BUFFER 構造体は、同じイーサネット フレーム タイプと IP プロトコル バージョン (IPv4 または IPv6) を持つ必要があります。

  • NET_BUFFER_LIST 構造体に関連付けられているすべての NET_BUFFER 構造体は、同じ送信元と宛先の MAC アドレスを持つ必要があります。

  • ドライバーが TCP または UDP フレームを送信している場合、NET_BUFFER_LIST 構造体に関連付けられているすべての NET_BUFFER 構造体は、同じ TCP または UDP 接続に関連付けられている必要があります。 メモ 次の要件に従って、送信されたイーサネット フレームを分割できます。 つまり、複数のメモリ記述子リスト (MDL) を送信要求の NET_BUFFER 構造体に関連付けることができます。

  • 送信イーサネット フレームの MAC ヘッダーを複数の MDL に分割しないでください。 仮想 LAN (VLAN) (または優先度) フラグが存在する場合は、MAC ヘッダーの一部として扱います。 そのため、このフラグは、MAC ヘッダーの残りの部分と同じ MDL 内に存在する必要があります。

  • NET_BUFFER 構造体内の MDL チェーン内のリンクまたは NET_BUFFER_LIST 構造体の NET_BUFFER チェーン内のリンクを変更する場合、ドライバーは、NET_BUFFER_LIST の所有権を基になるドライバーに返す前に、元の構成へのリンクを復元する必要があります。 ただし、NET_BUFFER_LIST 構造体間のリンクを復元する必要はありません。