Visão geral das portas de comutador extensível do Hyper-V
Cada conexão de rede com o comutador extensível do Hyper-V é representada por uma porta. A interface de comutador extensível cria e configura uma porta antes que uma conexão de rede seja feita. Depois que a conexão de rede for interrompida, a interface poderá excluir a porta ou reutilizá-la para outra conexão de rede.
Cada partição filho do Hyper-V configurada com um adaptador de rede recebe uma porta no comutador extensível. Quando uma partição filho do Hyper-V é iniciada, a interface de comutador extensível cria uma porta antes que o adaptador de rede da VM (máquina virtual) seja exposto no sistema operacional convidado. Depois que o adaptador de rede da VM é exposto e inicializado, o adaptador de comutador extensível cria uma conexão de rede entre o adaptador de rede da VM e a porta do comutador extensível. Se a partição filho for interrompida, a interface de comutador extensível primeiro excluirá a conexão de rede e, em seguida, excluirá a porta de comutador extensível.
Quando uma porta de comutador extensível é criada, ela é configurada com um identificador e um nome exclusivos. Depois de criada, a porta de comutador 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, as 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 ISVs (fornecedores independentes de software) podem definir políticas personalizadas com as quais as portas individuais podem ser provisionadas. Para obter mais informações, consulte Políticas de porta.
As portas de comutador 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 de porta. Essas portas são temporárias e são criadas sob determinadas condições.
Por exemplo, quando uma partição filho do Hyper-V é criada ou reconfigurada para acesso à rede, a interface de 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 VM (máquina virtual) da partição. Depois que a verificação for concluída, a porta de validação será excluída e uma porta operacional será criada.
Para obter mais informações, consulte Portas de validação.
Portas operacionais
As portas operacionais são criadas para hospedar uma conexão extensível do adaptador de rede comutador. Quando uma porta operacional é criada, ela recebe um tipo de porta. Esse tipo de porta entra em vigor depois que a porta é criada e antes de ser interrompida. Para portas atribuídas a partições filho do Hyper-V, o tipo de porta operacional permanece em vigor enquanto a partição está em execução e operacional.
Para obter mais informações, consulte Portas operacionais.
Extensíveis Extensible switch extensions are notified of port creation, update and deletion through the following extensible switch object identifier (OID) requests:
OID_SWITCH_PORT_CREATE
A borda do protocolo do comutador extensível emite uma solicitação de conjunto OID de OID_SWITCH_PORT_CREATE para notificar extensíveis extensíveis sobre a criação de uma porta de comutador extensível.
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á encaminhar a solicitação OID para baixo na pilha de driver de comutador extensível. 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 da 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 Adaptadores de rede de comutador extensível do Hyper-V.
OID_SWITCH_PORT_UPDATED
A borda do protocolo do comutador extensível emite uma solicitação de conjunto OID de OID_SWITCH_PORT_UPDATED para notificar extensíveis extensíveis de que os parâmetros de uma porta de comutador extensível estão sendo atualizados. O OID só será emitido para portas que já foram criadas e ainda não iniciou o processo de remoção/exclusão. Atualmente, apenas o campo PortFriendlyName está sujeito a atualização após a criação.
A borda do protocolo do comutador extensível emite essa solicitação OID quando a conexão de rede anterior com a porta foi interrompida e todas as solicitações OID para a porta foram concluídas.
Nota Essa solicitação de OID poderá ser emitida se uma conexão de adaptador de rede não tiver sido feita anteriormente para a porta.
A extensão deve sempre encaminhar essa solicitação de conjunto de OID para baixo na pilha de driver de comutador extensível. A extensão não deve falhar na solicitação.
OID_SWITCH_PORT_TEARDOWN
A borda do protocolo do comutador extensível emite uma solicitação de conjunto OID de OID_SWITCH_PORT_TEARDOWN para notificar extensíveis extensíveis de que uma porta de comutador extensível está sendo excluída. A borda do protocolo do comutador extensível emite essa solicitação OID quando a conexão de rede anterior com a porta foi interrompida e todas as solicitações OID para a porta foram concluídas.
Nota Essa solicitação de OID poderá ser emitida se uma conexão de adaptador de rede não tiver sido feita anteriormente para a porta.
A extensão deve sempre encaminhar essa solicitação de conjunto de OID para baixo na pilha de driver de comutador extensível. A extensão não deve falhar na solicitação.
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 borda do protocolo do comutador extensível emite uma solicitação de conjunto OID de OID_SWITCH_PORT_DELETE para notificar extensíveis extensíveis de que uma porta de comutador extensível foi excluída. A borda do protocolo da opção extensível emite essa solicitação OID depois que ela emite a solicitação de OID_SWITCH_PORT_TEARDOWN e as solicitações OID direcionadas à porta foram concluídas.
A extensão deve sempre encaminhar essa solicitação de conjunto de OID para baixo na pilha de driver de comutador extensível. A extensão não deve falhar na solicitação.
Todas as portas de comutador 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 usado das seguintes maneiras:
O identificador de porta de origem de um pacote é armazenado no contexto de encaminhamento OOB (fora de banda) 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 porta de comutador extensível, como ACLs (listas de controle de acesso) e QoS (qualidade de serviço).
A extensão pode querer que o pacote seja tratado como se tivesse origem em 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 de porta de origem como NDIS_SWITCH_DEFAULT_PORT_ID para pacotes de controle proprietário que são enviados para um dispositivo na rede externa.
Para obter mais informações sobre o contexto de encaminhamento, consulte Contexto de encaminhamento extensível de comutador extensível do Hyper-V.
Solicitações de OID (identificador de objeto) de OID_SWITCH_NIC_REQUEST são emitidas pela interface de comutador extensível para encapsular solicitações OID emitidas para o adaptador de rede externa comutador extensível. Por exemplo, as solicitações de OID de descarregamento de hardware são encapsuladas pela interface antes de serem emitidas para baixo na pilha de driver de comutador extensível.
Uma extensão também pode emitir solicitações OID encapsuladas para encaminhar solicitações pelo caminho de controle de comutador extensível. Isso permite que as extensões consultem ou configurem os recursos de um adaptador de rede física subjacente.
O membro InformationBuffer da estrutura NDIS_OID_REQUEST para essa solicitação 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, isso especificará que a solicitação OID foi originada pela interface de comutador extensível. Se DestinationPortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, isso especificará que a solicitação OID é direcionada para processamento por uma extensão na pilha de driver de comutador extensível.
Para obter mais informações sobre o caminho de controle para solicitações OID, consulte Caminho de controle de comutador extensível do Hyper-V para solicitações OID.
As indicações de status NDIS de NDIS_STATUS_SWITCH_NIC_STATUS são emitidas pela borda do miniporto do comutador extensível para encapsular uma indicação de status do adaptador de rede externo comutador extensível.
Uma extensão também pode emitir indicações de NDIS status encapsuladas para encaminhar indicações para o caminho de controle de comutador extensível. Isso permite que as extensões alterem os recursos relatados de um adaptador de rede física subjacente.
O membro StatusBuffer da estrutura NDIS_STATUS_INDICATION para essa indicação contém um ponteiro para uma estrutura NDIS_SWITCH_NIC_STATUS_INDICATION . Se o membro SourcePortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, isso especificará que a indicação de status foi originada pela interface de comutador extensível. Se DestinationPortId estiver definido como NDIS_SWITCH_DEFAULT_PORT_ID, isso especificará que a solicitação OID é direcionada para processamento por uma extensão na pilha de driver de comutador extensível.
Para obter mais informações sobre o caminho de controle para indicações de status NDIS, consulte Caminho de controle de comutador extensível do Hyper-V para indicações de status do NDIS.
A interface de comutador 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 decrementar os contadores de referência de uma porta de comutador extensível:
ReferenceSwitchPort
A extensão de comutador extensível chama essa 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 comutador extensível não emitirá uma solicitação de conjunto de OID (identificador de objeto) de OID_SWITCH_PORT_DELETE para excluir a porta de comutador 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.
Nota A extensão não deve chamar ReferenceSwitchPort para uma porta depois de receber uma solicitação de conjunto OID de OID_SWITCH_PORT_TEARDOWN para essa porta.
DereferenceSwitchPort
A extensão de comutador extensível chama essa função para diminuir o contador de referência de uma porta.
A extensão deve chamar DereferenceSwitchPort depois que a operação que está sendo executada na porta for concluída. Por exemplo, se a extensão chamada ReferenceSwitchPort antes de emitir uma solicitação de OID_SWITCH_PORT_PROPERTY_ENUM , a extensão deverá chamar DereferenceSwitchPort após a conclusão da solicitação OID.
Nota Portas NDIS e portas de comutador extensíveis são objetos diferentes. Os pacotes que se movem pelo caminho de dados de comutador extensível são sempre atribuídos ao número da porta NDIS de NDIS_DEFAULT_PORT_NUMBER. No entanto, o número da porta do comutador extensível de origem e destino do pacote pode ser um valor de NDIS_SWITCH_DEFAULT_PORT_ID ou superior. Para obter mais informações, consulte Caminho de dados de comutador extensível do Hyper-V.