다음을 통해 공유


패킷 병합 기능 보고

미니포트 드라이버는 네트워크 어댑터를 초기화하는 동안 NDIS에 다음 기능을 등록합니다.

  • 네트워크 어댑터가 지원하는 패킷 병합 기능입니다.

  • 네트워크 어댑터에서 현재 사용하도록 설정된 패킷 병합 기능입니다.

  • 패킷 병합은 네트워크 어댑터에서 현재 사용하도록 설정된 필터링 기능을 수신합니다.

참고*PacketCoalescing INF 키워드(keyword) 설정을 통해 패킷 병합에 대한 미니포트 드라이버 지원을 사용하거나 사용하지 않도록 설정할 수 있습니다. 이 설정은 네트워크 어댑터의 고급 속성 페이지에 표시됩니다. 패킷 병합 INF 파일 설정에 대한 자세한 내용은 패킷 병합에 대한 표준화된 INF 키워드를 참조하세요.

미니포트 드라이버는 NDIS_RECEIVE_FILTER_CAPABILITIES 구조를 통해 기본 네트워크 어댑터의 패킷 병합 및 필터링 기능을 보고합니다. 레지스트리의 *PacketCoalescing 키워드(keyword) 설정에 값이 1이면 패킷 병합이 사용하도록 설정되고 미니포트 드라이버는 다음과 같은 방식으로 NDIS_RECEIVE_FILTER_CAPABILITIES 구조를 초기화합니다.

  1. 미니포트 드라이버는 헤더 멤버를 초기화합니다. 드라이버는 헤더Type 멤버를 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 집합 요청을 OID_802_3_MULTICAST_LIST NDIS가 네트워크 어댑터에 오프로드한 멀티캐스트 주소를 기반으로 합니다.

    참고 프로토콜 드라이버는 OID_802_3_ADD_MULTICAST_ADDRESSOID_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(Address Resolution Protocol) 패킷의 헤더 내에서 데이터 필터링을 지원해야 합니다. 드라이버는 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) 패킷의 OPEN Systems Interconnection(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) 패킷의 L3 헤더 내에서 데이터 필터링을 지원해야 합니다. 드라이버는 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 멤버에서 이 값을 지정합니다.

    참고 패킷 병합을 지원하는 네트워크 어댑터는 단일 패킷 병합 필터에 대해 지정할 수 있는 5개 이상의 패킷 헤더 필드를 지원해야 합니다. 어댑터가 패킷 병합을 지원하지 않는 경우 미니포트 드라이버는 이 값을 0으로 설정해야 합니다.

  2. 미니포트 드라이버는 네트워크 어댑터에서 지원하는 패킷 병합 필터의 최대 수를 보고해야 합니다. 드라이버는 MaxPacketCoalescingFilters 멤버에서 이 값을 지정합니다.

    참고 패킷 병합을 지원하는 네트워크 어댑터는 10개 이상의 패킷 병합 필터를 지원해야 합니다. 어댑터가 패킷 병합을 지원하지 않는 경우 미니포트 드라이버는 이 값을 0으로 설정해야 합니다.

NDIS가 미니포트 드라이버의 MiniportInitializeEx 함수를 호출하면 드라이버는 다음 단계에 따라 기본 네트워크 어댑터의 패킷 병합 및 필터링 기능을 보고합니다.

  • 미니포트 드라이버는 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 구조를 초기화합니다.

    레지스트리의 *PacketCoalescing 키워드(keyword) 설정에 값이 1인 경우 미니포트 드라이버는 HardwareReceiveFilterCapabilities 멤버를 이전에 초기화된 NDIS_RECEIVE_FILTER_CAPABILITIES 구조체에 대한 포인터로 설정합니다.

    레지스트리의 *PacketCoalescing 키워드(keyword) 설정 값이 0이면 미니포트 드라이버는 패킷 병합에 대한 지원을 보급하지 않습니다. HardwareReceiveFilterCapabilities 멤버를 NULL로 설정해야 합니다.

  • 드라이버는 NdisMSetMiniportAttributes를 호출하고 MiniportAttributes 매개 변수를 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 구조체에 대한 포인터로 설정합니다.

미니포트 드라이버에서 기본 네트워크 어댑터의 패킷 병합 및 필터링 기능을 보고하는 데 사용되는 메서드는 전원 관리 기능을 보고하는 NDIS 6.20 메서드를 기반으로 합니다. 이 방법에 대한 자세한 내용은 보고 전원 관리 기능을 참조하세요.

어댑터 초기화 프로세스에 대한 자세한 내용은 미니포트 어댑터 초기화를 참조하세요.