Partilhar via


Criando uma porta virtual

Uma porta virtual (VPort) é um objeto de dados que representa uma porta interna no comutador NIC de um adaptador de rede que suporta virtualização de E/S de raiz única (SR-IOV). Cada switch NIC tem as seguintes portas para conectividade de rede:

  • Uma porta física externa para conectividade com a rede física externa.

  • Um ou mais VPorts internos que estão conectados à função física (PF) ou às funções virtuais (VFs) do PCI Express (PCIe).

    O PF está associado à partição principal Hyper-V e é apresentado como um adaptador de rede virtual no sistema operativo de gestão que funciona nessa partição.

    Um VF é anexado à partição filho Hyper-V e é exposto como um adaptador de rede virtual no sistema operacional convidado que é executado nessa partição.

Existem dois tipos de VPorts:

VPort padrão
O VPort padrão fornece conectividade de rede para os componentes de rede que são executados no sistema operacional de gerenciamento. O VPort padrão tem um identificador de NDIS_DEFAULT_VPORT_ID.

Quando o driver de miniporta PF cria e configura o switch NIC padrão, o driver cria implicitamente o VPort padrão e o anexa ao PF. O VPort padrão não pode ser anexado a um VF.

O VPort padrão está sempre em um estado ativado e não pode ser excluído explicitamente. O driver de miniporta PF exclui implicitamente o VPort padrão somente quando exclui o switch NIC padrão.

Para obter mais informações sobre como criar um comutador NIC e o VPort padrão no switch, consulte Criando um comutador NIC.

VPort não padrão
VPorts não padrão não são automaticamente criados quando o switch NIC é configurado. Um driver superior, como a pilha de virtualização, cria explicitamente essas portas emitindo solicitações de métodos OID de OID_NIC_SWITCH_CREATE_VPORT. VPorts não padrão podem ser conectados ao PF ou a um VF e só podem ser criados após a criação do switch NIC.

Um VPort não padrão que está conectado a um VF fornece conectividade de rede para os componentes de rede que são executados no sistema operacional convidado. Depois de criado e anexado ao VF, o VPort não padrão encontra-se ativo.

Um VPort não padrão ligado ao PF fornece capacidades adicionais de descarregamento de rede aos componentes de rede que operam no sistema operativo de gestão. Por exemplo, VPorts não predefinidos no PF podem ser usados para fornecer capacidades de descarregamento semelhantes à interface de fila de máquina virtual (VMQ).

Observação VPorts não padrão só podem ser criados após a criação do switch NIC.

Um driver sobreposto emite uma solicitação de método de identificador de objeto (OID) de OID_NIC_SWITCH_CREATE_VPORT para criar um VPort não padrão em um switch NIC especificado. Essa solicitação OID também anexa o VPort criado ao PF do adaptador de rede ou a um VF alocado anteriormente.

O membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para a estruturaNDIS_NIC_SWITCH_VPORT_PARAMETERS . Após um retorno bem-sucedido da solicitação OID_NIC_SWITCH_CREATE_VPORT , o membro VPortId da estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS tem um identificador VPort que é exclusivo em todos os VPorts no switch NIC.

O driver sobreposto inicializa a estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS com as informações de configuração sobre o VPort não padrão a ser criado. As informações de configuração incluem a função PCIe à qual o VPort não padrão está anexado e o número de pares de filas para o VPort não padrão.

Ao inicializar a estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS, o driver subjacente deve fazer o seguinte:

  • O membro SwitchId deve ser definido como o identificador de um comutador NIC que foi criado anteriormente no adaptador de rede por meio de uma solicitação de método OID de OID_NIC_SWITCH_CREATE_SWITCH.

    Observação A partir do Windows Server 2012, a interface SR-IOV suporta apenas um comutador NIC no adaptador de rede. Este switch é conhecido como o switch NIC padrão . Ao criar um VPort que não seja o padrão, o driver sobreposto deve atribuir ao membro SwitchId o identificador NDIS_DEFAULT_SWITCH_ID.

  • O membro VPortId deve ser definido como NDIS_DEFAULT_VPORT_ID.

  • O membro AttachedFunctionId deve ser definido como o identificador do VF ou PF no qual o VPort não padrão deve ser anexado.

    Um valor de NDIS_PF_FUNCTION_ID especifica o PF. Caso contrário, o valor deve ser definido como o identificador de um VF cujos recursos foram alocados anteriormente por meio de uma solicitação de método OID de OID_NIC_SWITCH_ALLOCATE_VF.

    Observação O anexo de um VPort não padrão a um VF ou PF não pode ser alterado após a criação do VPort não padrão.

O driver superior também pode especificar o número de pares de filas atribuídas ao VPort. Um par de filas é uma fila de transmissão e receção no adaptador de rede que é atribuída ao VPort. Se o adaptador de rede suportar pares de filas assimétricas para VPorts não padrão, o driver subjacente poderá especificar um número diferente de pares de filas para cada VPort que criar. Para obter mais informações, consulte Atribuição simétrica e assimétrica de pares de filas.

O driver sobrejacente chama NdisOidRequest para emitir a solicitação de OID_NIC_SWITCH_CREATE_VPORT para o driver de miniporta PF subjacente. Antes de encaminhar a solicitação do método OID para o driver de miniporta, o NDIS faz o seguinte:

  1. O NDIS valida os parâmetros dentro da estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS . Se os parâmetros estiverem errados, o NDIS falhará a solicitação do método OID e não passará a solicitação para o driver de miniporta PF.

  2. O NDIS atribui um identificador para o VPort não padrão dentro do intervalo de um a (NumVPorts– 1), onde NumVPorts é o número de VPorts que o driver de miniporta configurou no adaptador de rede. O driver especifica esse número no membro NumVPorts da estrutura NDIS_NIC_SWITCH_INFO . O driver retorna essa estrutura por meio de uma solicitação de consulta OID de OID_NIC_SWITCH_ENUM_SWITCHES.

    Observação Um identificador VPort de NDIS_DEFAULT_VPORT_ID é reservado para o VPort padrão que está conectado ao PF no switch NIC padrão.

O identificador VPort atribuído identifica exclusivamente o VPort não padrão no switch NIC do adaptador de rede.

  1. O NDIS define o membro VPortId da estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS com o identificador VPort atribuído.

Quando a solicitação OID é feita ao driver de miniporta PF, o driver aloca os recursos de hardware e software associados ao VPort não padrão especificado. Depois que todos os recursos são alocados com êxito, o driver de miniporta PF conclui o OID com êxito retornando NDIS_STATUS_SUCCESS de MiniportOidRequest.

Se a solicitação de OID_NIC_SWITCH_CREATE_VPORT for concluída com êxito, o driver de miniporta PF e o driver subjacente deverão manter o valor VPortId do VPort não-default para operações sucessivas. O VPortId valor é usado durante estas operações:

Os seguintes pontos se aplicam à criação de VPorts não padrão:

  • Os filtros de recebimento para identificadores de controle de acesso à mídia (MAC) e LAN virtual (VLAN) são configurados no VPort após sua criação. Os drivers sobrepostos configuram dinamicamente esses filtros de receção através da emissão de requisições de método OID de OID_RECEIVE_FILTER_SET_FILTER. Os filtros de recebimento também podem ser movidos de um VPort para outro através de solicitações de conjunto OID de OID_RECEIVE_FILTER_MOVE_FILTER.

  • Um VPort não padrão anexado ao VF está em um estado ativado quando é criado. O VPort não pode ser desativado se estiver ligado ao FV.

    Um VPort não padrão anexado ao PF está em um estado desativado quando é criado. Um driver sobreposto, como o módulo de switch extensível Hyper-V, ativa explicitamente o VPort não padrão conectado ao PF depois que o VPort foi criado com êxito. Isso é feito emitindo uma solicitação de método OID de OID_NIC_SWITCH_VPORT_PARAMETERS para o driver de miniporta PF.

    Quando o driver sobreposto emite essa solicitação OID, ele passa uma estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS com o membro VPortState definido como NdisNicSwitchVPortStateActivated.

    Depois que um VPort não padrão estiver em um estado ativado, o driver de miniporta PF pode alocar memória compartilhada para o VPort chamando NdisAllocateSharedMemory. O driver deve definir o membro VPortId na estrutura NDIS_SHARED_MEMORY_PARAMETERS para o valor identificador do VPort.

Observação Quando um VPort não padrão está em um estado ativado, ele só é definido para um estado desativado quando é excluído por meio de uma solicitação de conjunto OID de OID_NIC_SWITCH_DELETE_VPORT.