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


Удаление виртуального порта

Переопределяющий драйвер выдает запрос набора идентификатора объекта (OID) OID_NIC_SWITCH_DELETE_VPORT для удаления недедефакционного виртуального порта (VPort) на коммутаторе сетевого адаптера. Слишком большой драйвер может удалить только VPort, созданный ранее путем выдачи запроса метода OID OID_NIC_SWITCH_CREATE_VPORT.

Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS.

Слишком избыточный драйвер, например стек виртуализации, может удалить неотделимый VPort, созданный ранее. Слишком многозначный драйвер создает VPort, выдав запрос метода OID OID_NIC_SWITCH_CREATE_VPORT.

Прежде чем он выдает запрос набора OID OID_NIC_SWITCH_DELETE_VPORT, драйверу, переопределяющимся драйверу необходимо выполнить следующее:

  • Перед удалением VPort драйверы должны очистить или переместить все фильтры получения, которые драйвер ранее установил в VPort. Фильтры получения задаются через запросы OID OID_RECEIVE_FILTER_SET_FILTER и перемещаются через запросы OID OID_RECEIVE_FILTER_MOVE_FILTER.

  • Слишком многофакторный драйвер задает элемент VPortId структуры NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS идентификатору удаленного виртуального порта, который требуется удалить.

    Обратите внимание, что драйвер с превышением не должен задать для члена VPortId значение NDIS_DEFAULT_PORT_NU МБ ER. Этот идентификатор VPort зарезервирован для VPort по умолчанию, подключенного к физической функции PCI Express (PCIe) на сетевом адаптере. VPort по умолчанию всегда существует и не удаляется явным образом, хотя запрос набора OID OID_NIC_SWITCH_DELETE_VPORT.

Слишком избыточный драйвер вызывает NdisOidRequest , чтобы выдать запрос OID_NIC_SWITCH_DELETE_VPORT базовому драйверу мини-порта PF. Когда драйвер минипорта получает запрос OID_NIC_SWITCH_DELETE_VPORT, драйвер должен выполнить следующее:

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

  • Драйвер должен отсоединить указанный VPort от PF или виртуальной функции PCIe (VF).

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

    Если VPort подключен к PF, драйвер мини-порта PF должен остановить любую дополнительную DMA к общей памяти, связанной с VPort. Драйвер мини-порта PF должен убедиться, что все ранее полученные пакеты из VPort возвращаются в мини-порт. Драйвер мини-порта PF не должен создавать дополнительные признаки получения для NDIS, которые указывают идентификатор VPort в NET_BUFFER_LIST структуре пакета. После возврата всех указанных пакетов из VPort в мини-порт PF он должен освободить общую память, связанную с VPort, вызвав NdisFreeSharedMemory.

К удалению VPorts применяются следующие моменты:

  • Перед вызовом NdisCloseAdapterEx драйвер протокола должен удалить все созданные недействующие VPorts.

  • Драйвер фильтра должен удалить все неподдерживаемые VPorts, созданные в функции FilterDetach.

  • Прежде чем NDIS выдает запрос набора OID_NIC_SWITCH_DELETE_SWITCH для удаления коммутатора сетевого адаптера на сетевом адаптере, он гарантирует, что все неdefault VPorts удаляются из этого коммутатора.

  • С помощью запросов OID OID_NIC_SWITCH_DELETE_SWITCH можно явным образом удалить только неотделимые виртуальные порты. Виртуальный порт по умолчанию неявно удаляется, когда драйвер мини-порта PF удаляет переключатель сетевого адаптера по умолчанию. Дополнительные сведения см. в разделе "Удаление коммутатора сетевого адаптера".