패킷 병합 수신 필터 처리

OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청을 통해 여러 수신 필터가 미니포트 드라이버에 다운로드됩니다. 각 필터는 네트워크 어댑터가 수신된 패킷을 어댑터의 하드웨어 병합 버퍼에서 병합해야 하는지 여부를 결정하는 데 사용하는 하나 이상의 테스트(헤더 필드 테스트)를 지정할 수 있습니다.

미니포트 드라이버가 수신 필터를 사용하여 네트워크 어댑터를 구성하기 전에 드라이버는 어댑터의 하드웨어 기능에 따라 수신 필터를 최적화해야 합니다. 예를 들어 모든 수신 필터에는 MAC 헤더에 대한 헤더 필드 테스트가 필요합니다. 따라서 드라이버는 이 테스트의 결과에 따라 필터 규칙을 최적화할 수 있습니다. 이를 통해 어댑터는 다음에 수행할 OSI(Open Systems Interconnection) 계층 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 집합 요청을 통해 어댑터에 오프로드된 절전 모드 해제 패턴에 따라 수신된 패킷만 필터링해야 합니다.

네트워크 어댑터가 전체 전원 상태로 전환되면 미니포트 드라이버는 다음 단계를 수행해야 합니다.

  • 미니포트 드라이버는 하드웨어 병합 버퍼 내에서 병합된 패킷을 모두 삭제하도록 네트워크 어댑터를 구성해야 합니다. 네트워크 어댑터는 저전력 상태로 전환될 때 이러한 패킷을 병합했을 수 있습니다.

  • 미니포트 드라이버는 저전력 전환 전에 드라이버에 다운로드된 패킷 병합 수신 필터 집합으로 네트워크 어댑터를 구성해야 합니다.

  • 미니포트 드라이버는 병합된 패킷 카운터를 지워야 합니다.