次の方法で共有


パケット結合機能のレポート

ミニポート ドライバーは、ネットワーク アダプターの初期化中に NDIS に次の機能を登録します。

  • ネットワーク アダプターがサポートするパケット結合機能。

  • ネットワーク アダプターで現在有効になっているパケット結合機能。

  • ネットワーク アダプターで現在有効になっているパケット結合の受信フィルタリング機能。

注: ミニポート ドライバーによるパケット結合サポートは、*PacketCoalescing INF キーワード設定を使用して有効または無効にすることができます。 この設定は、ネットワーク アダプターの [詳細設定] プロパティ ページに表示されます。 パケット結合 INF ファイル設定の詳細については、「パケット結合に関する標準化された INF キーワード」を参照してください。

ミニポート ドライバーは、NDIS_RECEIVE_FILTER_CAPABILITIES 構造体を介して、下層ネットワーク アダプターのパケット結合とフィルター処理機能を報告します。 レジストリの *PacketCoalescing キーワード設定の値が 1 の場合、パケット結合が有効になり、ミニポート ドライバーは次のように NDIS_RECEIVE_FILTER_CAPABILITIES 構造体を初期化します。

  1. ミニポート ドライバーは、Header メンバーを初期化します。 ドライバーは、HeaderType メンバーを NDIS_OBJECT_TYPE_DEFAULT に設定します。

    ドライバーがパケット結合をサポートしている場合は、HeaderRevision メンバーを NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 に、Size メンバーを NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2 に設定します。

  2. ミニポート ドライバーは、SupportedQueueProperties メンバーで NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE フラグを設定します。

    このフラグが設定されている場合、ネットワーク アダプターは、ハードウェアで受信したマルチキャスト パケットのフィルター処理をサポートする必要があります。 このフィルター処理は、OID_802_3_MULTICAST_LIST OID セット要求を送信することで、NDIS がネットワーク アダプターにオフロードしたマルチキャスト アドレスに基づいています。

    注: プロトコル ドライバーは、OID_802_3_ADD_MULTICAST_ADDRESS および OID_802_3_DELETE_MULTICAST_ADDRESS 要求を送信することで、マルチキャスト アドレス リストの内容を変更することもできます。 NDIS は、これらの要求を OID_802_3_MULTICAST_LIST OID セット要求に結合します。

注: アダプターは、宛先メディア アクセス制御 (MAC) アドレスが、これらの OID セット要求で指定されたマルチキャスト アドレスのいずれにも一致しない着信マルチキャスト パケットを拒否する必要があります。

  1. ミニポート ドライバーは、EnabledFilterTypes メンバーの NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定します。

    注: ドライバーがこのフラグを設定する場合は、SupportedQueueProperties メンバーの NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE フラグも設定する必要があります。 それ以外の場合、NDIS では、NDIS_STATUS_BAD_CHARACTERISTICS を返すことで NdisMSetMiniportAttributes への呼び出しが失敗します。

  2. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ドライバーは、すべての受信フィルターのテスト条件をサポートする必要があります。 ドライバーは、SupportedFilterTests メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED

    • NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED

    • NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED

    : ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedFilterTests メンバーを 0 に設定する必要があります。

  3. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ミニポート ドライバーは、メディア アクセス制御 (MAC)、IP バージョン 4 (IPv4)、および IP バージョン 6 (IPv6) ヘッダーのさまざまなフィールド内のデータ フィルター処理をサポートする必要があります。 ドライバーは、SupportedHeaders メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED

    • NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED

    • NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED

    • NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED

    • NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED

    : ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedHeaders メンバーを 0 に設定する必要があります。

  4. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ミニポート ドライバーは、受信したパケットのメディア アクセス制御 (MAC) ヘッダー内のデータのフィルター処理をサポートする必要があります。 ドライバーは、SupportedMacHeaderFields メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED

    • NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED

    • NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED

    : ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedMacHeaderFields メンバーを 0 に設定する必要があります。

  5. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ミニポート ドライバーは、受信したアドレス解決プロトコル (ARP) パケットのヘッダー内のデータフィルター処理をサポートする必要があります。 ドライバーは、SupportedARPHeaderFields メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED

    • NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED

    • NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED

    : ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedARPHeaderFields メンバーを 0 に設定する必要があります。

  6. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ミニポート ドライバーは、受信した IP バージョン 4 (IPv4) パケットの開放型システム間相互接続 (OSI) レイヤー 3 (L3) ヘッダー内のデータ フィルター処理をサポートする必要があります。 ドライバーは、SupportedIPv4HeaderFields メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED

    : ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedIPv4HeaderFields メンバーを 0 に設定する必要があります。

  7. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ミニポート ドライバーは、受信した IP バージョン 6 (IPv6) パケットのヘッダー内のデータ フィルター処理をサポートする必要があります。 ドライバーは、SupportedIPv6HeaderFields メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED

    : ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedIPv6HeaderFields メンバーを 0 に設定する必要があります。

  8. ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定する場合、ミニポート ドライバーは、受信したユーザー データグラム プロトコル (UDP) パケットの OSI レイヤー 4 (L4) ヘッダー内のデータ フィルター処理をサポートする必要があります。 ドライバーは、SupportedIUdpHeaderFields メンバーで次のフラグを設定することで、このサポートをアドバタイズします。

    • NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED

    : 受信した UDP パケットに IPv4 オプションまたは IPv6 拡張ヘッダーが含まれている場合、ネットワーク アダプターは、UDP フィルター テストに失敗したかのようにパケットを処理できます。 この方法で、アダプターは、受信したパケットを自動的に削除できます。

: ミニポート ドライバーが NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED フラグを設定しない場合、ドライバーは、SupportedIUdpHeaderFields メンバーを 0 に設定する必要があります。

  1. ミニポート ドライバーは、単一のパケット結合フィルターに指定できるパケット ヘッダー フィールドの最大テスト回数を報告する必要があります。 ドライバーは、MaxFieldTestsPerPacketCoalescingFilter メンバーでこの値を指定します。

    注: パケット結合をサポートするネットワーク アダプターは、1 つのパケット結合フィルターに指定できる 5 つ以上のパケット ヘッダー フィールドをサポートする必要があります。 アダプターがパケット結合をサポートしていない場合、ミニポート ドライバーは、この値を 0 に設定する必要があります。

  2. ミニポート ドライバーは、ネットワーク アダプターがサポートするパケット結合フィルターの最大数を報告する必要があります。 ドライバーは、MaxPacketCoalescingFilters メンバーでこの値を指定します。

    注: パケット結合をサポートするネットワーク アダプターは、10 個以上のパケット結合フィルターをサポートする必要があります。 アダプターがパケット結合をサポートしていない場合、ミニポート ドライバーは、この値を 0 に設定する必要があります。

NDIS がミニポート ドライバーの MiniportInitializeEx 関数を呼び出すと、ドライバーは、次の手順に従って、下層ネットワーク アダプターのパケット結合とフィルター処理機能を報告します。

  • ミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体を初期化します。

    レジストリの *PacketCoalescing キーワード設定の値が 1 の場合、ミニポート ドライバーは HardwareReceiveFilterCapabilities メンバーを、以前に初期化された NDIS_RECEIVE_FILTER_CAPABILITIES 構造体へのポインターに設定します。

    レジストリの *PacketCoalescing キーワード設定の値が 0 の場合、ミニポート ドライバーはパケット結合のサポートをアドバタイズしません。 HardwareReceiveFilterCapabilities メンバーを NULL に設定する必要があります。

  • ドライバーは NdisMSetMiniportAttributes を呼び出し、MiniportAttributes パラメーターを NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体へのポインターに設定します。

基になるネットワーク アダプターのパケット結合とフィルター処理機能を報告するためにミニポート ドライバーによって使用されるメソッドは、電源管理機能を報告するための NDIS 6.20 メソッドに基づいています。 このメソッドの詳細については、「電源管理機能のレポート」を参照してください。

アダプターの初期化プロセスの詳細については、「ミニポート アダプターの初期化」を参照してください。