Net リング要素の管理
このトピックのガイダンスに従って、ネットワーク データ転送中に、NET_RING 構造とその要素を管理します。 このトピックの規則では、データ パスのシナリオに応じて、クライアント ドライバーが変更できるネット リング要素のメンバーとタイミング、およびこれらの構造についてクライアント ドライバーが留意する必要がある一般的な情報が示されています。
重要
クライアント ドライバーは、開発のすべてのフェーズで、これらの指示に従う必要があります。 Driver Verifier でのテスト中にクライアント ドライバーが、これらの指示に従わない場合、ドライバー検証ツールは違反を報告し、テスト対象デバイスでバグ チェックをトリガーします。
NET_RING
NET_RING の親パケット キューが開始されると、リング内のすべてのインデックスが 0 に初期化されます。
次の表では、クライアント ドライバーが変更できるネット リングのメンバーについて説明します。
フィールド | クライアント ドライバーは、変更することを許可されています |
---|---|
OSReserved1 | いいえ |
ElementStride | いいえ |
NumberOfElements | いいえ |
ElementIndexMask | いいえ |
EndIndex | いいえ |
OSReserved0 | いいえ |
OSReserved2 | いいえ |
BeginIndex | はい (必須) |
NextIndex | はい (オプション) 注: フレームワークは NextIndex を読み取ることはありません。 |
スクラッチ | はい (オプション) 注: フレームワークは Scratch を読み取ることはありません。 |
Buffer | いいえ |
クライアント ドライバーは、この構造体の読み取り専用メンバーの変更、EvtPacketQueueAdvance の呼び出し中に BeginIndex を EndIndex を超えるインクリメントを、してはいけません。
ネットリングのインデックス所有権の詳細については、「ネットリングの概要」を参照してください。
NET_PACKET
NET_PACKET のフィールドは、データ パスが動作するさまざまなコンテキストの影響を受けます。 パケットの Ignore フィールドが設定されているかどうか、およびドライバーがパケットを受信 (Rx) しているか送信 (Tx) しているかによって、パケットに適用されるルールセットが変更されます。
次の表に、各シナリオでのドライバーの指示を示します。
Rx または Tx | 無視フィールドの設定元 | メモ |
---|---|---|
Rx | クライアント ドライバー |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
Rx 操作中、NET_PACKET の Layout フィールドには、次の規則が適用されます。
- Reserved0 を除くすべてのフィールドは、クライアント ドライバーによって初期化する必要があります。
- Layer2Type が NetPacketLayer2TypeEthernet に設定されている場合、Layer2HeaderLength は 14 以上である必要があります。
- Layer2Type が NetPacketLayer2TypeNull に設定されている場合は、Layer2HeaderLength を 0 に設定する必要があります。
- Layer3Type が IPv4 タイプの場合、Layer3HeaderLength は 20 以上である必要があります。
- Layer3Type が IPv6 タイプの場合、Layer3HeaderLength は 40 以上である必要があります。
- Layer4Type が Tcp に設定されている場合、Layer4HeaderLength は 40 以上である必要があります。
- Layer4Type が Udp に設定されている場合、Layer4HeaderLength は 8 以上である必要があります。
- レイヤー タイプ フィールドは適切な列挙範囲内にある必要があります。
Tx 中は、レイアウト は使用されません。
NET_FRAGMENT
NET_FRAGMENT フィールド ルールは、ドライバーが受信しているか送信しているか、および、フラグメント バッファーがドライバーとフレームワークのどちらによってパケットにアタッチされているかによって異なります。
Rx または Tx | メモ |
---|---|
Rx |
|
Tx |
|