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


Перемещение фильтра получения на виртуальный порт

Драйвер overlying выдает запрос на набор идентификатора объекта (OID) OID_RECEIVE_FILTER_MOVE_FILTER для перемещения фильтра получения из виртуального порта (VPort) в другой VPort на коммутаторе сетевого адаптера. Как правило, этот запрос OID выполняется при выполнении одного из следующих условий:

  • Стек виртуализации задает фильтр получения для VPort по умолчанию. Этот фильтр содержит mac-адрес и параметры виртуальной локальной сети (VLAN) для сетевого адаптера виртуальной машины, доступного в дочернем разделе Hyper-V. Это позволяет пересылать пакеты между сетевым адаптером виртуальной машины и базовым сетевым адаптером по программному пути искусственных данных.

    После выделения ресурсов для виртуальной функции (VF) PCI Express (PCIe) и подключения VF к дочернему разделу стек виртуализации создает на VF несоотчетаемый VPort. Затем стек виртуализации перемещает фильтр приема для сетевого адаптера виртуальной машины из VPort по умолчанию в неотложный VPort, подключенный к VF. Это позволяет пересылать пакеты между сетевым адаптером виртуальной машины и базовым сетевым адаптером по аппаратному пути данных VF.

    Дополнительные сведения об этих путях данных см. в разделе Пути к данным SR-IOV.

  • Виртуальная машина отключена от дочернего раздела Hyper-V, в котором по-прежнему работает операционная система на виртуальной машине. В этом случае драйвер выполняет запрос набора OID, чтобы переместить фильтр получения для сетевого адаптера виртуальной машины из неотложного VPort в VPort по умолчанию, подключенный к PF. В этом случае трафик пакетов возвращается в искусственный путь к данным.

Чтобы переместить фильтр получения из одного VPort в другой VPort, избыточный драйвер отправляет запрос на набор OID OID_RECEIVE_FILTER_MOVE_FILTER. Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS .

Прежде чем драйвер выполняет запрос OID_RECEIVE_FILTER_MOVE_FILTER , он должен инициализировать структуру NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS следующим образом:

  • Драйвер задает для элемента FilterId идентификатор идентификатора ранее выделенного фильтра получения.

    Примечание Драйвер overlying получил идентификатор фильтра из предыдущего запроса метода OID OID_RECEIVE_FILTER_SET_FILTER или OID_RECEIVE_FILTER_ENUM_FILTERS.

  • Драйвер задает для элемента SourceQueueId значение NDIS_DEFAULT_RECEIVE_QUEUE_ID.

  • Драйвер задает член SourceVPortId в качестве идентификатора VPort, для которого ранее был задан этот фильтр.

  • Драйвер задает для элемента DestQueueId значение NDIS_DEFAULT_RECEIVE_QUEUE_ID.

  • Драйвер задает член DestVPortId идентификатором VPort, в котором должен быть перемещен этот фильтр.

NDIS проверяет члены NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS , прежде чем перенаправит запрос набора OID в драйвер мини-порта PF.

Когда драйвер мини-порта PF обрабатывает этот запрос на набор OID, он должен переместить фильтр получения в атомарной операции. Драйвер должен иметь возможность настроить сетевой адаптер, чтобы одновременно удалить фильтр из очереди получения и VPort и установить его в другой очереди получения и VPort.