Поделиться через


Обработка фильтров приема объединения пакетов

Несколько фильтров получения загружаются в драйвер мини-порта с помощью запросов метода OID OID_RECEIVE_FILTER_SET_FILTER. Каждый фильтр может указывать один или несколько тестов (тестов полей заголовков), которые сетевой адаптер использует для определения того, следует ли объединить полученный пакет в аппаратный буфер объединения адаптера.

Прежде чем драйвер минипорта настроит сетевой адаптер с фильтрами приема, драйвер должен оптимизировать фильтры приема на основе аппаратных возможностей адаптера. Например, для всех фильтров получения требуется проверка поля заголовка для mac-заголовка. Таким образом, драйвер может оптимизировать правила фильтрации на основе результатов этого теста. Это позволяет адаптеру определить, какие тесты полей полей заголовков уровня 3 (L3) и уровня 4 (L4) будут выполняться в osI.

Как только сетевой адаптер будет настроен с фильтрами получения, он должен сделать следующее:

  • Все тестовые параметры поля заголовка для определенного фильтра должны совпадать в полученном пакете, чтобы объединить пакет в буфер объединения.

    Сетевой адаптер объединяет результаты всех тестов поля заголовка фильтра приема с логической операцией AND. То есть, если какой-либо тест поля заголовка, включенный в массив структур NDIS_RECEIVE_FILTER_FIELD_PARAMETERS для фильтра получения, завершается сбоем, полученный пакет не соответствует указанному критерию фильтра и не должен быть объединен.

  • Сетевой адаптер проверяет только данные пакетов на основе указанных параметров теста поля заголовка. Адаптер должен игнорировать все поля заголовков в пакете, для которых не указаны тесты полей заголовка.

  • Если полученный пакет соответствует всем тестам поля заголовка для любого из фильтров приема, сетевой адаптер должен объединить пакет в буфер аппаратного объединения. Как только первый пакет будет объединен, сетевой адаптер должен запустить аппаратный таймер и задать для срока действия значение члена MaxCoalescingDelay структуры NDIS_RECEIVE_FILTER_PARAMETERS для соответствующего фильтра получения.

  • По мере получения большего количества пакетов, соответствующих фильтру приема объединения пакетов, сетевой адаптер помещает их в буфер объединения.

    Если аппаратный таймер уже запущен, адаптер не должен останавливать или перезапускать таймер для соответствующего фильтра приема. Однако адаптер может настроить аппаратный таймер с наименьшим значением срока действия из соответствующих фильтров получения. Например, когда драйвер получает пакет, соответствующий фильтру получения X, адаптер запускает таймер с указанным значением срока действия для этого фильтра получения. Если адаптер получает пакет, соответствующий фильтру получения Y, адаптер может перенастроить аппаратный таймер с указанным значением срока действия для этого фильтра получения.

    Примечание Сетевой адаптер не должен перенастраивание аппаратного таймера, если оставшееся время таймера меньше времени окончания срока действия фильтра приема.

  • Как только полученные пакеты объединяются, сетевой адаптер создает прерывание, если происходит какое-либо из следующих событий:

    • Если доступное пространство в буфере объединения оборудования достигает аппаратной низкой отметки, сетевой адаптер должен создать прерывание приема, чтобы драйвер минипорта смог обработать объединяемые пакеты приема.

    • Если срок действия таймера оборудования, используемого для буфера объединения оборудования, истекает, сетевой адаптер должен создать прерывание приема, чтобы драйвер минипорта смог обработать объединяемые пакеты приема.

    • Если фильтр приема очищен и пакеты были объединены, соответствующие фильтру, сетевой адаптер должен создать прерывание приема, чтобы драйвер мини-порта смог обработать объединяемые пакеты приема.

    • Если полученный пакет не соответствует ни одному из фильтров приема, сетевой адаптер должен создать прерывание приема, чтобы драйвер мини-порта смог обработать полученный пакет. Если какие-либо пакеты были объединены, драйвер минипорта также должен обработать эти пакеты.

    • Если сетевой адаптер создает прерывание для любого другого состояния прерывания, отличного от прерывания приема, сетевой адаптер должен также сообщить о состоянии прерывания приема, чтобы драйвер мини-порта смог обработать объединяемые полученные пакеты.

    После создания прерывания сетевой адаптер должен остановить аппаратный таймер, если срок его действия еще не истек, и очистить буфер объединения оборудования.

Драйвер мини-порта должен поддерживать счетчик объединенного пакета, который содержит значение количества полученных пакетов, соответствующих фильтру объединения пакетов. NDIS запрашивает этот счетчик с помощью запроса OID OID_PACKET_COALESCING_FILTER_MATCH_COUNT.

Сетевой адаптер выполняет объединение пакетов только в то время, когда оборудование работает в состоянии полной мощности. В то время как оборудование находится в маломощном состоянии, адаптер должен фильтровать только полученные пакеты на основе шаблонов пробуждения, которые были загружены на адаптер через запросы на набор OID OID_PNP_ENABLE_WAKE_UP.

При переходе сетевого адаптера в состояние полного питания драйвер мини-порта должен выполнить следующие действия.

  • Драйвер мини-порта должен настроить сетевой адаптер для отмены всех объединяемых пакетов в буфере объединения оборудования. Сетевой адаптер мог объединить эти пакеты при переходе в состояние с низким энергопотреблением.

  • Драйвер мини-порта должен настроить сетевой адаптер с набором фильтров приема объединения пакетов, которые были загружены в драйвер перед переходом с низким энергопотреблением.

  • Драйвер мини-порта должен очистить счетчик объединенного пакета.