Visão geral das portas de switch extensíveis Hyper-V
Cada conexão de rede com o switch extensível Hyper-V é representada por uma porta. A interface do switch extensível cria e configura uma porta antes que uma conexão de rede seja feita. Depois que a conexão de rede é derrubada, a interface pode excluir a porta ou reutilizá-la para outra conexão de rede.
A cada partição filho Hyper-V que está configurada com uma interface de rede é atribuída uma porta no comutador extensível. Quando uma partição filha Hyper-V é iniciada, a interface do comutador extensível cria uma porta antes que o adaptador de rede da máquina virtual (VM) seja exposto no sistema operacional hóspede. Depois que o adaptador de rede VM é exposto e inicializado, a interface do comutador extensível cria uma conexão de rede entre o adaptador de rede VM e a porta do comutador extensível. Se a partição filha for interrompida, a interface do comutador extensível primeiro eliminará a conexão de rede e, em seguida, eliminará a porta do comutador extensível.
Quando uma porta de switch extensível é criada, ela é configurada com um identificador e nome exclusivos. Depois de criada, a porta de switch extensível pode ser provisionada com políticas que definem vários atributos para o gerenciamento do tráfego de pacotes pela porta. Por exemplo, políticas de porta padrão podem ser definidas para atributos de LAN virtual (VLAN) e restrições de acesso para tráfego de porta. Além disso, os fornecedores independentes de software (ISVs) podem definir políticas personalizadas com as quais as portas individuais podem ser provisionadas. Para obter mais informações, consulte Políticas de Porto.
As portas de switch extensíveis consistem nos seguintes tipos:
Portas de validação
As portas de validação são usadas para validar e verificar as configurações da porta. Estes portos são temporários e são criados sob certas condições.
Por exemplo, quando uma partição subordinada Hyper-V é criada ou reconfigurada para acesso à rede, a interface do comutador extensível cria uma porta de validação. A interface usa essa porta para verificar as configurações da conexão de rede com o adaptador de rede da máquina virtual (VM) da partição. Após a conclusão da verificação, a porta de validação é excluída e uma porta operacional é criada.
Para obter mais informações, consulte Portas de Validação.
Portos operacionais
As portas de operação são criadas para hospedar uma ligação a um adaptador de rede de switch extensível. Quando uma porta operacional é criada, é-lhe atribuído um tipo de porta. Esse tipo de porta entra em vigor depois que a porta é criada e antes de ser derrubada. Para portas atribuídas a subpartições Hyper-V, o tipo de porta operacional permanece ativo enquanto a partição estiver em execução e operacional.
Para obter mais informações, consulte Portos Operacionais.
As extensões de switch extensíveis são notificadas sobre a criação, atualização e exclusão de portas por meio das seguintes solicitações de identificador de objeto de switch extensível (OID):
OID_SWITCH_PORT_CREATE
A borda de protocolo do switch extensível emite uma solicitação de ajuste OID de OID_SWITCH_PORT_CREATE para notificar as extensões do switch extensível sobre a criação de uma nova porta.
A extensão pode vetar a notificação de criação retornando STATUS_DATA_NOT_ACCEPTED para a solicitação OID. Por exemplo, se uma extensão não puder alocar recursos para impor suas políticas configuradas na porta, a extensão vetará a notificação de criação.
Se a extensão aceitar a notificação de criação, ela deverá reencaminhar a solicitação OID pela pilha de drivers do switch extensível abaixo. A extensão monitora o status de conclusão dessa solicitação OID para determinar se as extensões subjacentes vetaram a notificação de criação de porta.
As extensões não podem encaminhar pacotes para a porta recém-criada até que uma conexão de rede seja criada. Para obter mais informações sobre esse processo, consulte Hyper-V Extensible Switch Network Adapters.
OID_SWITCH_PORT_UPDATED
A borda de protocolo do switch extensível emite uma solicitação de definição de OID de OID_SWITCH_PORT_UPDATED para notificar as extensões do switch extensível de que os parâmetros de uma porta do switch extensível estão a ser atualizados. O OID só será emitido para portas que já foram criadas e ainda não iniciaram o processo de desmontagem/exclusão. Atualmente, apenas o campo PortFriendlyName está sujeito a atualização após a criação.
A borda de protocolo do switch extensível emite esta requisição OID quando a conexão de rede anterior à porta foi desfeita e todas as requisições OID para a porta foram concluídas.
Nota Esta solicitação OID pode ser emitida se uma conexão de adaptador de rede não foi feita anteriormente para a porta.
A extensão deve sempre encaminhar essa solicitação de conjunto OID para baixo na pilha de driver de switch extensível. A prorrogação não deve falhar o pedido.
OID_SWITCH_PORT_TEARDOWN
A borda de protocolo do switch extensível emite um pedido de configuração OID de OID_SWITCH_PORT_TEARDOWN para notificar extensões do switch extensível de que uma porta do switch extensível está a ser excluída. A borda do protocolo do switch extensível emite essa solicitação OID quando a conexão de rede anterior da porta foi desativada e todas as solicitações OID para a porta foram concluídas.
Nota Esta solicitação OID pode ser emitida se uma conexão de adaptador de rede não foi feita anteriormente para a porta.
A extensão deve sempre encaminhar este pedido de conjunto OID ao longo da pilha de drivers do switch extensível. A prorrogação não deve falhar o pedido.
Depois que a extensão encaminha essa solicitação OID, ela não pode mais emitir solicitações OID para a porta que está sendo excluída.
OID_SWITCH_PORT_DELETE
A interface do protocolo do switch extensível emite uma solicitação de conjunto de OID de OID_SWITCH_PORT_DELETE para notificar as extensões do switch extensível de que uma porta do switch extensível foi excluída. A borda de protocolo do switch extensível emite essa solicitação OID depois que ela emite a solicitação OID_SWITCH_PORT_TEARDOWN e as solicitações OID que visam a porta foram concluídas.
A extensão deve sempre encaminhar essa solicitação de conjunto OID para baixo na pilha de driver de switch extensível. A prorrogação não deve falhar o pedido.
Todas as portas de switch extensíveis criadas para conexões de rede recebem um identificador maior que NDIS_SWITCH_DEFAULT_PORT_ID. O identificador NDIS_SWITCH_DEFAULT_PORT_ID é reservado e utilizado das seguintes formas:
O identificador de porta de origem de um pacote é armazenado no contexto de encaminhamento fora de banda (OOB) do pacote associado à sua estrutura NET_BUFFER_LIST. Um identificador de porta de origem de NDIS_SWITCH_DEFAULT_PORT_ID especifica que o pacote se originou da extensão de comutador extensível e não de uma porta de comutador extensível. Um pacote com um identificador de porta de origem de NDIS_SWITCH_DEFAULT_PORT_ID é confiável e ignora as políticas de portas de switch extensíveis, como listas de controle de acesso (ACLs) e qualidade de serviço (QoS).
A extensão pode querer que o pacote seja tratado como se tivesse sido originado de uma porta específica. Isso permite que as políticas dessa porta sejam aplicadas ao pacote. A extensão chama SetNetBufferListSource para alterar a porta de origem do pacote.
No entanto, pode haver situações em que a extensão pode querer atribuir o identificador de porta de origem do pacote a NDIS_SWITCH_DEFAULT_PORT_ID. Por exemplo, a extensão pode querer definir o identificador da porta de origem como NDIS_SWITCH_DEFAULT_PORT_ID para pacotes de controle proprietários que são enviados para um dispositivo na rede externa.
Para obter mais informações sobre o contexto de encaminhamento, consulte Hyper-V Extensible Switch Forwarding Context.
As solicitações de identificador de objeto (OID) de OID_SWITCH_NIC_REQUEST são emitidas pela interface do comutador extensível para encapsular solicitações OID emitidas para o adaptador de rede externo do comutador extensível. Por exemplo, as solicitações OID de descarregamento de hardware são encapsuladas pela interface antes de serem emitidas ao longo da pilha de drivers do switch extensível.
Uma extensão também pode emitir solicitações OID encapsuladas para redirecionar pedidos pelo caminho de controlo do interruptor extensível. Isso permite que as extensões consultem ou configurem os recursos de um adaptador de rede físico subjacente.
O membro InformationBuffer da estrutura NDIS_OID_REQUEST deste pedido OID contém um ponteiro para uma estrutura NDIS_SWITCH_NIC_OID_REQUEST. Se o membro SourcePortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, especifica-se que a solicitação OID foi originada pela interface de switch extensível. Se o DestinationPortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, isto especifica que a solicitação OID é dirigida para ser processada por uma extensão na pilha de drivers do switch extensível.
Para obter mais informações sobre o caminho de controle para solicitações OID, consulte Hyper-V Extensible Switch Control Path for OID Requests.
As indicações de status NDIS de NDIS_STATUS_SWITCH_NIC_STATUS são emitidas pela borda da miniporta do switch extensível para encapsular uma indicação de status do adaptador de rede externo do switch extensível.
Uma extensão também pode emitir indicações de status NDIS encapsuladas para encaminhar indicações para o caminho de controle do switch extensível. Isso permite que as extensões alterem os recursos relatados de um adaptador de rede físico subjacente.
O membro StatusBuffer da estrutura NDIS_STATUS_INDICATION para esta indicação contém um ponteiro para a estrutura NDIS_SWITCH_NIC_STATUS_INDICATION. Se o membro SourcePortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, especifica que a indicação de estado foi originada pela interface de switch extensível. Se o DestinationPortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, isso especifica que a solicitação de OID é direcionada para processamento por uma extensão na pilha de drivers do switch extensível.
Para obter mais informações sobre o caminho de controlo para as indicações de estado NDIS, consulte Hyper-V Caminho de Controlo do Switch Extensível para Indicações de Estado NDIS.
A interface do switch extensível mantém um contador de referência para cada porta que foi criada. Uma porta não será excluída se seu contador de referência tiver um valor diferente de zero. A interface fornece as seguintes funções de manipulador para incrementar ou diminuir os contadores de referência de uma porta de switch extensível:
PortaDeComutaçãoDeReferência
A extensão do interruptor extensível chama esta função para incrementar o contador de referência de uma porta. Embora o contador de referência tenha um valor diferente de zero, a borda do protocolo do switch extensível não emitirá uma solicitação de definição do identificador de objeto (OID) OID_SWITCH_PORT_DELETE para excluir a porta do switch extensível.
A extensão deve chamar ReferenceSwitchPort antes de executar qualquer operação que exija que a porta esteja em um estado ativo. Por exemplo, a extensão deve chamar ReferenceSwitchPort antes de emitir uma solicitação de método OID de OID_SWITCH_PORT_PROPERTY_ENUM.
Observação A extensão não deve chamar ReferenceSwitchPort para uma porta depois de receber uma solicitação de definição de OID de OID_SWITCH_PORT_TEARDOWN para essa porta.
DereferenceSwitchPort
A extensão do comutador extensível chama esta função para diminuir o contador de referência de uma porta.
A extensão deve chamar DereferenceSwitchPort após a conclusão da operação no porto. Por exemplo, se a extensão chamar ReferenceSwitchPort antes de emitir um pedido OID_SWITCH_PORT_PROPERTY_ENUM, a extensão deverá chamar DereferenceSwitchPort após a conclusão do pedido OID.
Nota As portas NDIS e as portas de switch extensíveis são objetos diferentes. Os pacotes que se movem pela trajetória de dados do switch extensível são sempre atribuídos ao número de porta NDIS de NDIS_DEFAULT_PORT_NUMBER. No entanto, o número da porta do switch extensível de origem e de destino do pacote pode ser um valor de NDIS_SWITCH_DEFAULT_PORT_ID ou superior. Para obter mais informações, consulte Hyper-V Caminho de dados do comutador extensível.