Erstellen eines virtuellen Ports

Ein virtueller Port (VPort) ist ein Datenobjekt, das einen internen Port auf dem NIC-Switch eines Netzwerkadapters darstellt, der die Single Root-E/A-Virtualisierung (SR-IOV) unterstützt. Jeder NIC-Switch verfügt über die folgenden Ports für die Netzwerkkonnektivität:

  • Ein externer physischer Port für die Konnektivität mit dem externen physischen Netzwerk.

  • Ein oder mehrere interne VPorts, die mit der PHYSISCHEn Funktion (PF) oder virtual Functions (VFs) von PCI Express (PCIe) verbunden sind.

    Die PF ist an die übergeordnete Hyper-V-Partition angefügt und wird als virtueller Netzwerkadapter im Verwaltungsbetriebssystem verfügbar gemacht, das in dieser Partition ausgeführt wird.

    Ein VF wird an die untergeordnete Hyper-V-Partition angefügt und als virtueller Netzwerkadapter im Gastbetriebssystem verfügbar gemacht, das in dieser Partition ausgeführt wird.

Es gibt zwei Arten von VPorts:

Standard-VPort
Der Standard-VPort stellt Netzwerkkonnektivität mit den Netzwerkkomponenten bereit, die im Verwaltungsbetriebssystem ausgeführt werden. Der Standard-VPort weist den Bezeichner NDIS_DEFAULT_VPORT_ID auf.

Wenn der PF-Miniporttreiber den Standard-NIC-Switch erstellt und konfiguriert, erstellt der Treiber implizit den Standard-VPort und fügt ihn an die PF an. Der Standard-VPort kann nicht an eine VF angefügt werden.

Der Standard-VPort befindet sich immer im aktivierten Zustand und kann nicht explizit gelöscht werden. Der PF-Miniporttreiber löscht den Standard-VPort implizit nur, wenn er den Standard-NIC-Switch löscht.

Weitere Informationen zum Erstellen eines NIC-Switches und des Standard-VPorts auf dem Switch finden Sie unter Erstellen eines NIC-Switches.

Nicht standardmäßiger VPort
Nicht standardmäßige VPorts werden nicht implizit erstellt, wenn der NIC-Switch erstellt wird. Ein übersteigender Treiber, z. B. der Virtualisierungsstapel, erstellt diese Ports explizit, indem OID-Methodenanforderungen von OID_NIC_SWITCH_CREATE_VPORT ausgegeben werden. Nicht standardmäßige VPorts können an die PF oder an eine VF angefügt und erst erstellt werden, nachdem der NIC-Switch erstellt wurde.

Ein nicht standardmäßiger VPort, der an einen VF angefügt ist, stellt Netzwerkkonnektivität mit den Netzwerkkomponenten bereit, die im Gastbetriebssystem ausgeführt werden. Nachdem er erstellt und an den VF angefügt wurde, befindet sich der nicht standardmäßige VPort in einem aktivierten Zustand.

Ein nicht standardmäßiger VPort, der an die PF angefügt ist, bietet zusätzliche Netzwerkauslagerungsfunktionen für die Netzwerkkomponenten, die im Verwaltungsbetriebssystem ausgeführt werden. Beispielsweise können nicht standardmäßige VPorts auf der PF verwendet werden, um Auslagerungsfunktionen bereitzustellen, die der VMQ-Schnittstelle (VMQ) ähneln.

Hinweis Nicht standardmäßige VPorts können nur erstellt werden, nachdem der NIC-Switch erstellt wurde.

Ein übersteigender Treiber gibt eine OID-Methodenanforderung (Object Identifier) von OID_NIC_SWITCH_CREATE_VPORT aus, um einen nicht standardmäßigen VPort für einen angegebenen NIC-Switch zu erstellen. Diese OID-Anforderung fügt auch den erstellten VPort an die PF des Netzwerkadapters oder einen zuvor zugewiesenen VF an.

Das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur enthält einen Zeiger auf dieNDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur . Nach einer erfolgreichen Rückgabe von der OID_NIC_SWITCH_CREATE_VPORT-Anforderung verfügt das VPortId-Element der NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur über einen VPort-Bezeichner, der für die VPorts auf dem NIC-Switch eindeutig ist.

Der übersteigende Treiber initialisiert die NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur mit den Konfigurationsinformationen zum zu erstellenden VPort ohne Standard. Die Konfigurationsinformationen umfassen die PCIe-Funktion, an die der nicht standardmäßige VPort angefügt ist, und die Anzahl der Warteschlangenpaare für den nicht standardmäßigen VPort.

Wenn die NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur initialisiert wird, muss der überlastende Treiber die folgenden Schritte ausführen:

  • Der SwitchId-Member muss auf den Bezeichner eines NIC-Switches festgelegt werden, der zuvor auf dem Netzwerkadapter über eine OID-Methodenanforderung von OID_NIC_SWITCH_CREATE_SWITCH erstellt wurde.

    Hinweis Ab Windows Server 2012 unterstützt die SR-IOV-Schnittstelle nur einen NIC-Switch auf dem Netzwerkadapter. Dieser Switch wird als Standard-NIC-Switch bezeichnet. Beim Erstellen eines nicht standardmäßigen VPorts muss der übersteigende Treiber das SwitchId-Element auf den NDIS_DEFAULT_SWITCH_ID-Bezeichner festlegen.

  • Das VPortId-Element muss auf NDIS_DEFAULT_VPORT_ID festgelegt werden.

  • Der AttachedFunctionId-Member muss auf den Bezeichner des VF oder pf festgelegt werden, an den der nicht standardmäßige VPort angefügt werden soll.

    Der Wert NDIS_PF_FUNCTION_ID gibt die PF an. Andernfalls muss der Wert auf den Bezeichner eines VF festgelegt werden, dessen Ressourcen zuvor über eine OID-Methodenanforderung von OID_NIC_SWITCH_ALLOCATE_VF zugeordnet wurden.

    Hinweis Die Anlage eines nicht standardmäßigen VPorts an eine VF- oder PF-Instanz kann nicht geändert werden, nachdem der nicht standardmäßige VPort erstellt wurde.

Der überlastende Treiber kann auch die Anzahl der Warteschlangenpaare angeben, die dem VPort zugewiesen sind. Ein Warteschlangenpaar ist eine Übertragungs- und Empfangswarteschlange auf dem Netzwerkadapter, der dem VPort zugewiesen ist. Wenn der Netzwerkadapter asymmetrische Warteschlangenpaare für nicht standardmäßige VPorts unterstützt, kann der überlastende Treiber eine andere Anzahl von Warteschlangenpaaren für jeden VPort angeben, den der Treiber erstellt. Weitere Informationen finden Sie unter Symmetrische und asymmetrische Zuweisung von Warteschlangenpaaren.

Der überlastende Treiber ruft NdisOidRequest auf, um die OID_NIC_SWITCH_CREATE_VPORT Anforderung an den zugrunde liegenden PF-Miniporttreiber auszusetzen. Bevor NDIS die Anforderung der OID-Methode an den Miniporttreiber weiterleitet, erfolgt Folgendes:

  1. NDIS überprüft die Parameter innerhalb der NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur . Wenn die Parameter fehlerhaft sind, schlägt NDIS die OID-Methodenanforderung fehl und übergibt die Anforderung nicht an den PF-Miniporttreiber.

  2. NDIS weist einen Bezeichner für den nicht standardmäßigen VPort innerhalb des Bereichs von 1 bis (NumVPorts– 1) zu, wobei NumVPorts die Anzahl der VPorts ist, die der Miniporttreiber für den Netzwerkadapter konfiguriert hat. Der Treiber gibt diese Zahl im NumVPorts-Element der NDIS_NIC_SWITCH_INFO-Struktur an. Der Treiber gibt diese Struktur über eine OID-Abfrageanforderung von OID_NIC_SWITCH_ENUM_SWITCHES zurück.

    Hinweis Ein VPort-Bezeichner von NDIS_DEFAULT_VPORT_ID ist für den Standard-VPort reserviert, der an die PF auf dem Standard-NIC-Switch angefügt ist.

Der zugewiesene VPort-Bezeichner identifiziert den nicht standardmäßigen VPort auf dem NIC-Switch des Netzwerkadapters eindeutig.

  1. NDIS legt den VPortId-Member der NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur mit dem zugewiesenen VPort-Bezeichner fest.

Wenn der PF-Miniporttreiber die OID-Anforderung ausgestellt wird, ordnet der Treiber die Hardware- und Softwareressourcen zu, die dem angegebenen nicht standardmäßigen VPort zugeordnet sind. Nachdem alle Ressourcen erfolgreich zugeordnet wurden, schließt der PF-Miniporttreiber die OID erfolgreich ab, indem er NDIS_STATUS_SUCCESS von MiniportOidRequest zurückgibt.

Wenn die OID_NIC_SWITCH_CREATE_VPORT Anforderung erfolgreich abgeschlossen wurde, müssen der PF-Miniporttreiber und der übersteigende Treiber den VPortId-Wert des nicht standardmäßigen VPorts für aufeinander folgende Vorgänge beibehalten. Der VPortId-Wert wird bei diesen Vorgängen verwendet:

  • NDIS und die übergeordneten Treiber verwenden den VPortId-Wert , um den nicht standardmäßigen VPort in aufeinanderfolgenden OID-Anforderungen im Zusammenhang mit diesem VPort zu identifizieren, z. B. OID_NIC_SWITCH_VPORT_PARAMETERS und OID_NIC_SWITCH_DELETE_VPORT.

  • Bei Sendevorgängen gibt NDIS den VPortId-Wert an, um den VPort zu identifizieren, von dem ein Paket gesendet wurde. Dieser Wert wird innerhalb der Out-of-Band-NDIS_NET_BUFFER_LIST_FILTERING_INFO Daten der NET_BUFFER_LIST-Struktur angegeben.

  • Bei Empfangsvorgängen gibt der PF-Miniporttreiber den VPortId-Wert an, an den ein Paket weitergeleitet werden soll. Dieser Wert wird auch in den OOB-NDIS_NET_BUFFER_LIST_FILTERING_INFO Daten der NET_BUFFER_LIST-Struktur angegeben.

Die folgenden Punkte gelten für die Erstellung von nicht standardmäßigen VPorts:

  • Empfangsfilter für MAC- und VLAN-Bezeichner (Media Access Control) werden auf dem VPort konfiguriert, nachdem er erstellt wurde. Überlastende Treiber legen diese Empfangsfilter dynamisch fest, indem OID-Methodenanforderungen von OID_RECEIVE_FILTER_SET_FILTER ausgegeben werden. Empfangsfilter können auch über OID-Set-Anforderungen von OID_RECEIVE_FILTER_MOVE_FILTER von einem VPort zu einem anderen verschoben werden.

  • Ein nicht standardmäßiger VPort, der an den VF angefügt ist, befindet sich beim Erstellen in einem aktivierten Zustand. Der VPort kann nicht deaktiviert werden, wenn er an den VF angefügt ist.

    Ein nicht standardmäßiger VPort, der an die PF angefügt ist, befindet sich beim Erstellen in einem deaktivierten Zustand. Ein übersteigender Treiber, z. B. das erweiterbare Switchmodul von Hyper-V, aktiviert explizit den nicht standardmäßigen VPort, der an die PF angefügt ist, nachdem der VPort erfolgreich erstellt wurde. Dazu wird eine OID-Methodenanforderung von OID_NIC_SWITCH_VPORT_PARAMETERS an den PF-Miniporttreiber ausgegeben.

    Wenn der übergeordnete Treiber diese OID-Anforderung ausgibt, übergibt er eine NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur , bei der das VPortState-Element auf NdisNicSwitchVPortStateActivated festgelegt ist.

    Nachdem sich ein nicht standardmäßiger VPort in einem aktivierten Zustand befindet, kann der PF-Miniporttreiber freigegebenen Arbeitsspeicher für den VPort zuweisen, indem er NdisAllocateSharedMemory aufruft. Der Treiber muss das VPortId-Element in der NDIS_SHARED_MEMORY_PARAMETERS-Struktur auf den Bezeichnerwert des VPorts festlegen.

Hinweis Wenn sich ein nicht standardmäßiger VPort in einem aktivierten Zustand befindet, wird er nur auf einen deaktivierten Zustand festgelegt, wenn er über eine OID-Set-Anforderung von OID_NIC_SWITCH_DELETE_VPORT gelöscht wird.