パケット結合受信フィルターの処理

複数の受信フィルターは、OID_RECEIVE_FILTER_SET_FILTER の OID メソッド要求を通じてミニポート ドライバーにダウンロードされます。 各フィルターでは、受信したパケットをアダプター上のハードウェア結合バッファーに結合する必要があるかどうかを判断するためにネットワーク アダプターが使用する 1 つ以上のテスト (ヘッダー フィールド テスト) を指定できます。

ミニポート ドライバーは、受信フィルターを使用してネットワーク アダプターを構成する前に、アダプターのハードウェア機能に基づいて受信フィルターを最適化する必要があります。 たとえば、すべての受信フィルターには、MAC ヘッダーのヘッダー フィールド テストが必要です。 そのため、ドライバーは、このテストの結果に基づいてフィルター規則を最適化できます。 これにより、アダプターは、次に実行する 開放型システム間相互接続 (OSI) レイヤー 3 (L3) およびレイヤー 4 (L4) ヘッダー フィールド テストを決定できます。

受信フィルターを使用してネットワーク アダプターが構成されたらすぐに、次の操作を行う必要があります:

  • 結合バッファー内のパケットを結合するには、特定のフィルターのすべてのヘッダー フィールド テスト パラメーターが受信パケットで一致する必要があります。

    ネットワーク アダプターは、受信フィルターのすべてのヘッダー フィールド テストの結果を論理 AND 操作と組み合わせます。 つまり、受信フィルターの NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 構造体の配列に含まれるヘッダー フィールド テストが失敗した場合、受信パケットは指定されたフィルター条件を満たしていないため、結合することはできません。

  • ネットワーク アダプターは、指定されたヘッダー フィールドのテスト パラメーターに基づいてパケット データのみを検査します。 アダプターは、ヘッダー フィールド テストが指定されていないパケット内のすべてのヘッダー フィールドを無視する必要があります。

  • 受信パケットがいずれかの受信フィルターのすべてのヘッダー フィールド テストと一致する場合、ネットワーク アダプターは、ハードウェア結合バッファー内のパケットを結合する必要があります。 最初のパケットが結合されるとすぐに、ネットワーク アダプターはハードウェア タイマーを開始し、有効期限を一致する受信フィルターの NDIS_RECEIVE_FILTER_PARAMETERS 構造体の MaxCoalescingDelay メンバーの値に設定する必要があります。

  • パケット結合受信フィルターに一致するパケットが多く受信されると、ネットワーク アダプターはそれらを結合バッファーに入れます。

    ハードウェア タイマーが既に実行されている場合、アダプターは、一致する受信フィルターのタイマーを停止または再起動してはいけません。 ただし、アダプターは、一致する受信フィルターからの最小の有効期限値でハードウェア タイマーを構成できます。 たとえば、ドライバーが受信フィルター X と一致するパケットを受信すると、アダプターは、その受信フィルターの指定された有効期限の値でタイマーを開始します。 その後、アダプターが受信フィルター Y と一致するパケットを受信した場合、アダプターは、その受信フィルターの指定された有効期限の値を使用してハードウェア タイマーを再構成できます。

    タイマーの残り時間が受信フィルターの有効期限よりも短い場合、ネットワーク アダプターはハードウェア タイマーを再構成してはいけません。

  • 受信したパケットが結合されるとすぐに、ネットワーク アダプターは、次のいずれかのイベントが発生した場合に割り込みを生成します:

    • ハードウェア結合バッファー内の使用可能な領域がハードウェア固有の低水位マークに達した場合、ミニポート ドライバーが結合された受信パケットを処理できるように、ネットワーク アダプターは受信割り込みを生成する必要があります。

    • ハードウェア結合バッファーに使用されるハードウェア タイマーが期限切れになった場合、ミニポート ドライバーが結合された受信パケットを処理できるように、ネットワーク アダプターは受信割り込みを生成する必要があります。

    • 受信フィルターがクリアされ、そのフィルターに一致するパケットが結合されている場合、ミニポート ドライバーが結合された受信パケットを処理できるように、ネットワーク アダプターは受信割り込みを生成する必要があります。

    • 受信パケットが受信フィルターのいずれにも一致しない場合、ミニポート ドライバーが受信パケットを処理できるように、ネットワーク アダプターは受信割り込みを生成する必要があります。 パケットが結合されている場合は、ミニポート ドライバーもそれらのパケットを処理する必要があります。

    • ネットワーク アダプターが受信割り込み以外の割り込み状態の割り込みを生成する場合、ミニポート ドライバーが結合された受信パケットを処理できるように、ネットワーク アダプターも受信割り込み状態を通知する必要があります。

    割り込みが生成されるとすぐに、ネットワーク アダプターは、期限切れになっていない場合は、ハードウェア タイマーを停止し、ハードウェア結合バッファーをクリアする必要があります。

ミニポート ドライバーは、パケット結合フィルターに一致した受信パケットの数の値を含む結合パケット カウンターを保持する必要があります。 NDIS は、OID_PACKET_COALESCING_FILTER_MATCH_COUNT の OID クエリ要求を通じてこのカウンターを照会します。

ネットワーク アダプターは、ハードウェアがフルパワー状態で動作している間にのみパケット結合を実行します。 ハードウェアが低電力状態にある間、アダプターは、OID_PNP_ENABLE_WAKE_UPの OID セット要求を通じてアダプターにオフロードされたウェイクアップ パターンに基づいて受信したパケットのみをフィルター処理する必要があります。

ネットワーク アダプターが全電源状態に移行する場合、ミニポート ドライバーは、次の手順に従う必要があります:

  • ミニポート ドライバーは、ハードウェア結合バッファー内のすべての結合されたパケットカードを破棄するネットワーク アダプターを構成する必要があります。 ネットワーク アダプターは、低電力状態に遷移したときに、これらのパケットを結合している可能性があります。

  • ミニポート ドライバーは、低電力遷移の前にドライバーにダウンロードされたパケット結合受信フィルターのセットでネットワーク アダプターを構成する必要があります。

  • ミニポート ドライバーは、結合されたパケット カウンターをクリアする必要があります。