Поток пакетов через виртуальный порт

Коммутатор сетевого адаптера по умолчанию — это компонент сетевого адаптера, который поддерживает единый корневой интерфейс виртуализации ввода-вывода (SR-IOV). Переключатель всегда присоединяет виртуальный порт по умолчанию (VPort) к физической функции PCI Express (PCIe). Переключатель может подключить один или несколько нестандартных виртуальных портов (VPorts) к PF. Дополнительные сведения см. в статье Создание виртуального порта.

Следующие моменты относятся к пакетам, которые отправляются или получаются в VPort, подключенном к PF:

  • Пакеты, отправленные или полученные через стандартный VPort, задаются со значением идентификатора VPort DEFAULT_VPORT_ID.

    Пакеты, отправленные или полученные через нестандартные VPort, указываются с идентификатором VPort, который был возвращен при создании VPort с помощью OID-запроса метода OID_NIC_SWITCH_CREATE_VPORT. Когда драйвер обрабатывает этот запрос OID, он получает идентификатор VPort из VPortId члена структуры NDIS_NIC_SWITCH_VPORT_PARAMETERS, связанной с запросом OID.

    Примечание При удалении VPort драйвер минипорта может получить NBL, содержащий недопустимое значение VPortId. В этом случае минипорт должен игнорировать недопустимый идентификатор VPort и вместо этого использовать DEFAULT_VPORT_ID. VPortId находится в netBufferListFilteringInfo части данных OOB NBL и извлекается с помощью макроса NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID.

  • Драйвер мини-порта PF вызывает NdisMIndicateReceiveNetBufferLists, чтобы указать пакеты, полученные из VPort. Прежде чем драйвер мини-порта PF вызывает NdisMIndicateReceiveNetBufferLists, он должен задать идентификатор VPort в данных вне полосы (OOB) в структуре NET_BUFFER_LIST пакета. Драйвер осуществляет это, используя макрос NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID.

  • Стек виртуализации вызывает NdisSendNetBufferLists для передачи пакетов в VPort. Перед тем как стек виртуализации вызовет NdisSendNetBufferLists, он устанавливает идентификатор VPort в данных OOB в структуре NET_BUFFER_LIST пакета.

    Драйвер минипорта получает идентификатор VPort с помощью макроса NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID.

    Минипорт-драйвер должен поставить пакет передачи в аппаратную очередь передачи на указанном VPort.

Примечание Минипорт-драйвер виртуальной функции PCIe (VF) не задает или не запрашивает идентификатор VPort в данных OOB структуры NET_BUFFER_LIST для пакета. Когда минипорт-водитель VF отправляет пакет, он помещает его в аппаратную очередь передачи для единственного VPort, не использующего настройки по умолчанию, подключенного к VF.