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


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

Коммутатор сетевого адаптера по умолчанию является компонентом сетевого адаптера, который поддерживает интерфейс виртуализации ввода-вывода с одним корнем (SR-IOV). Коммутатор всегда подключает виртуальный порт по умолчанию (VPort) к физической функции PCI Express (PCIe). Коммутатор может подключить к 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.