Vytvoření virtuálního portu
Virtuální port (VPort) je datový objekt, který představuje interní port na přepínači síťové karty síťového adaptéru, který podporuje virtualizaci jednoho kořenového V/V (SR-IOV). Každý přepínač síťové karty má následující porty pro připojení k síti:
Jeden externí fyzický port pro připojení k externí fyzické síti.
Jeden nebo více interních VPortů, které jsou připojené k fyzické funkci PCI Express (PCIe) nebo virtuálním funkcím (VFS).
PF je připojen k nadřazenému oddílu Hyper-V a je vystaven jako virtuální síťový adaptér v operačním systému pro správu běžícím v tomto oddílu.
VF je připojen k podřízenému oddílu Hyper-V a vystupuje jako virtuální síťový adaptér v hostujícím operačním systému, který běží v tomto oddílu.
Existují dva typy VPorts:
Výchozí VPort
Výchozí VPort poskytuje síťové připojení k síťovým komponentám, které běží v operačním systému pro správu. Výchozí VPort má identifikátor NDIS_DEFAULT_VPORT_ID.
Když ovladač miniportu PF vytvoří a nakonfiguruje výchozí přepínač síťové karty, ovladač implicitně vytvoří výchozí VPort a připojí ho k PF. Výchozí VPort nelze připojit k VF.
Výchozí VPort je vždy v aktivovaném stavu a nelze ji explicitně odstranit. Ovladač miniportu PF implicitně odstraní výchozí VPort pouze v případech, kdy odstraní výchozí přepínač síťové karty.
Další informace o tom, jak vytvořit přepínač síťové karty a výchozí VPort na přepínači, najdete v tématu Vytvoření přepínače síťové karty.
nestandardní VPort
Nedefaultní VPorts se implicitně nevytváří při vytváření přepínače síťové karty. Nadřazený ovladač, jako například virtualizační vrstva, explicitně vytváří tyto porty vydáním požadavků metody OID OID_NIC_SWITCH_CREATE_VPORT. Nestandardní virtuální porty mohou být připojené k PF nebo k VF a lze je vytvořit pouze po vytvoření přepínače síťové karty.
Nedefaultní VPort připojený k VF poskytuje síťové připojení k síťovým komponentám, které běží v hostovaném operačním systému. Po vytvoření a připojení k VF je nevychozí VPort v aktivovaném stavu.
Nedefaultní VPort připojený k PF poskytuje další možnosti snižování zátěže sítě síťovým komponentám, které běží v operačním systému pro správu. Například nedefaultní virtuální porty v PF je možné použít k poskytování funkcí přesměrování zpracování, podobně jako rozhraní fronty virtuálních počítačů (VMQ).
Poznámka: Nondefault VPorts lze vytvořit pouze po vytvoření přepínače síťové karty.
Nadřazený ovladač vydá požadavek na metodu identifikátoru objektu (OID) OID_NIC_SWITCH_CREATE_VPORT k vytvoření nevychozího VPortu na zadaném NIC přepínači. Tento požadavek OID také připojí vytvořený VPort k PF síťového adaptéru nebo dříve přidělenému VF.
InformationBuffer člen struktury NDIS_OID_REQUEST obsahuje ukazatel na strukturuNDIS_NIC_SWITCH_VPORT_PARAMETERS. Po úspěšném návratu z požadavku OID_NIC_SWITCH_CREATE_VPORT má člen VPortId struktury NDIS_NIC_SWITCH_VPORT_PARAMETERS VPort identifikátor, který je jedinečný pro všechny VPorty na přepínači síťové karty.
Nadřazený ovladač inicializuje strukturu NDIS_NIC_SWITCH_VPORT_PARAMETERS s konfiguračními informacemi o nevýchozím VPort, který má být vytvořen. Informace o konfiguraci zahrnují funkci PCIe, ke které je připojen alternativní VPort, a počet frontových párů pro tento alternativní VPort.
Při inicializaci struktury NDIS_NIC_SWITCH_VPORT_PARAMETERS musí nadřazený ovladač provést následující:
SwitchId člen musí být nastaven na identifikátor přepínače síťové karty, který byl dříve vytvořen v síťovém adaptéru prostřednictvím požadavku metody OID OID_NIC_SWITCH_CREATE_SWITCH.
Poznámka Počínaje Windows Serverem 2012 podporuje rozhraní SR-IOV pouze jeden přepínač síťové karty na síťovém adaptéru. Tento přepínač se označuje jako výchozí přepínač síťové karty . Při vytváření nevýchozího VPortu musí nadřazený ovladač nastavit člen SwitchId na identifikátor NDIS_DEFAULT_SWITCH_ID.
Člen VPortId musí být nastaven na NDIS_DEFAULT_VPORT_ID.
AttachedFunctionId položka musí být nastavena na identifikátor VF nebo PF, ke kterému se má připojit nedefaultní VPort.
Hodnota NDIS_PF_FUNCTION_ID určuje PF. Jinak musí být hodnota nastavena na identifikátor VF, jehož prostředky byly dříve přiděleny pomocí žádosti metody OID OID_NIC_SWITCH_ALLOCATE_VF.
Poznámka Po vytvoření nedefaultního VPortu k VF nebo PF nelze změnit přílohu nedefaultního VPortu.
Nadlimitní ovladač může také určit počet párů front přiřazených k VPortu. Dvojice front je přenosová a příjmová fronta na síťovém adaptéru, přiřazená k VPortu. Pokud síťový adaptér podporuje asymetrické dvojice front pro nedefaultní VPorty, nadřazený ovladač může zadat jiný počet dvojic front pro každý VPort, který vytvoří. Další informace naleznete v části Symetrické a asymetrické přiřazení párů front.
Nadřazený ovladač volá NdisOidRequest, aby vydal požadavek OID_NIC_SWITCH_CREATE_VPORT na podkladový ovladač PF miniport. Než NDIS předá požadavek metody OID ovladači miniportu, provede následující kroky:
NDIS ověřuje parametry v rámci struktury NDIS_NIC_SWITCH_VPORT_PARAMETERS. Pokud jsou parametry chybné, NDIS nezpracuje požadavek metody OID a nepředá tento požadavek na ovladač miniport PF.
NDIS přiřadí identifikátor nedefaultního VPortu v rozsahu od jednoho do (NumVPorts– 1), kde NumVPorts je počet VPortů, které má ovladač miniportu nakonfigurovaný na síťovém adaptéru. Ovladač určuje toto číslo jako člen struktury NDIS_NIC_SWITCH_INFO v NumVPorts. Ovladač vrátí tuto strukturu pomocí požadavku na dotaz OID OID_NIC_SWITCH_ENUM_SWITCHES.
Poznámka identifikátor VPort NDIS_DEFAULT_VPORT_ID je vyhrazen pro výchozí VPort připojený k PF na výchozím přepínači síťové karty.
Přiřazený identifikátor VPort jednoznačně identifikuje nestandardní VPort na přepínači síťového adaptéru.
- NDIS nastaví člen VPortId struktury NDIS_NIC_SWITCH_VPORT_PARAMETERS pomocí přiřazeného identifikátoru VPort.
Když je ovladači PF miniport zadán požadavek OID, ovladač přidělí hardwarové a softwarové prostředky, které jsou přidruženy ke specifikovanému neveřejnému VPortu. Po úspěšném přidělení všech prostředků ovladač miniportu PF úspěšně dokončí OID vrácením NDIS_STATUS_SUCCESS z MiniportOidRequest.
Pokud se požadavek OID_NIC_SWITCH_CREATE_VPORT úspěšně dokončí, musí ovladač miniportu PF a nadřízený ovladač zachovat hodnotu VPortId ne výchozího VPortu pro následné operace. Hodnota VPortId se používá během těchto operací:
NDIS a nadměrné ovladače používají hodnotu VPortId k identifikaci nevěrných VPort v následných požadavcích OID souvisejících s tímto VPortem, jako jsou OID_NIC_SWITCH_VPORT_PARAMETERS a OID_NIC_SWITCH_DELETE_VPORT.
Během operací odesílání určuje identifikátor NDIS hodnotu VPortId k identifikaci VPortu, ze kterého byl paket odeslán. Tato hodnota je určena v rámci mimosíťových dat (OOB) NDIS_NET_BUFFER_LIST_FILTERING_INFO ve struktuře NET_BUFFER_LIST.
Během operací příjmu určuje ovladač miniportu PF hodnotu VPortId, do které se má paket předávat. Tato hodnota je také specifikována v datech OOB NDIS_NET_BUFFER_LIST_FILTERING_INFO struktury NET_BUFFER_LIST.
Následující body platí pro vytváření nedefaultních virtuálníchportů:
Filtry příjmu pro řízení přístupu k médiím (MAC) a identifikátory virtuální sítě LAN (VLAN) jsou nakonfigurovány na VPortu po vytvoření. Nadřazené ovladače dynamicky nastavují tyto filtry příjmu prostřednictvím žádostí o metodu OID OID_RECEIVE_FILTER_SET_FILTER. Filtry příjmu lze také přesunout z jednoho VPortu do jiného prostřednictvím žádostí sady OID OID_RECEIVE_FILTER_MOVE_FILTER.
Nedefaultní VPort připojený k VF je při vytvoření v aktivovaném stavu. VPort nelze deaktivovat, pokud je připojen k VF.
Nedefaultní VPort připojený k PF je v deaktivovaném stavu při jeho vytvoření. Nadřízený ovladač, jako je modul rozšiřitelného přepínače Hyper-V, explicitně aktivuje jiný než výchozí VPort připojený k PF poté, co byl VPort úspěšně vytvořen. To se provádí odesláním žádosti metody OID OID_NIC_SWITCH_VPORT_PARAMETERS ovladači miniportu PF.
Když nadřazený ovladač vydá tento požadavek OID, předá strukturu NDIS_NIC_SWITCH_VPORT_PARAMETERS s VPortState členem nastaveným na NdisNicSwitchVPortStateActivated.
Po aktivaci nedefaultního VPortu může ovladač miniportu PF přidělit sdílenou paměť pro VPort pomocí volání funkce NdisAllocateSharedMemory . Ovladač musí nastavit člena VPortId ve struktuře NDIS_SHARED_MEMORY_PARAMETERS na hodnotu identifikátoru VPort.
Poznámka Pokud je nedefaultní VPort v aktivním stavu, přejde do deaktivovaného stavu pouze tehdy, když je odstraněn prostřednictvím požadavku na nastavení identifikátoru OID_NIC_SWITCH_DELETE_VPORT.