Partilhar via


Gerir dados do switch extensível Hyper-V Run-Time

Este tópico descreve operações de guardar e restaurar para a extensão de switch extensível Hyper-V. Essas operações permitem uma extensão para salvar e restaurar dados em tempo de execução para adaptadores de rede de switch extensível (NICs) individuais. Essas operações são executadas quando uma partição filha Hyper-V que tem uma conexão de adaptador de rede com uma porta de switch extensível está a ser interrompida ou iniciada.

Salvando dados do switch extensível Hyper-V Run-Time

Esta seção descreve a operação pela qual uma extensão de Comutador Extensível Hyper-V pode salvar dados em tempo de execução para adaptadores de rede individuais (NICs). Esta operação é executada quando uma partição subordinada Hyper-V com um adaptador de rede conectado a uma porta de switch extensível está a ser interrompida ou o seu estado está a ser guardado.

Tratamento do pedido de OID_SWITCH_NIC_SAVE

Quando uma partição subordinada Hyper-V com um adaptador de rede ligado a uma porta de switch extensível é interrompida ou o seu estado é salvo, a interface de switch extensível Hyper-V é notificada. Isso faz com que a borda de protocolo do switch extensível emita uma solicitação de método OID de OID_SWITCH_NIC_SAVE ao longo da pilha de drivers do switch extensível. Quando uma extensão de switch extensível recebe este pedido OID, ela pode salvar seus dados de execução para a conexão de adaptador de rede especificada que está conectada à partição filha.

O membro InformationBuffer da estrutura NDIS_OID_REQUEST para a solicitação OID_SWITCH_NIC_SAVE contém um ponteiro para uma estrutura NDIS_SWITCH_NIC_SAVE_STATE . Essa estrutura é alocada pela extremidade do protocolo do switch extensível e inicializada da seguinte maneira:

  • O membro Header é inicializado para conter o tipo atual e a revisão da estrutura NDIS_SWITCH_NIC_SAVE_STATE. O tamanho é definido como o tamanho total do buffer.

  • O membro PortId contém o identificador exclusivo da porta do switch extensível para a qual a operação de salvamento está sendo executada.

Quando recebe a solicitação de método OID_SWITCH_NIC_SAVE , a extensão faz o seguinte:

  1. A extensão lê o membro PortId da estrutura NDIS_SWITCH_NIC_SAVE_STATE .

  2. Se a extensão tiver dados em tempo de execução para salvar para a NIC especificada, ela salvará seus dados dentro da estrutura NDIS_SWITCH_NIC_SAVE_STATE começando com bytes SaveDataOffset desde o início da estrutura. Em seguida, a extensão conclui a solicitação do método OID com NDIS_STATUS_SUCCESS.

  3. Se a estrutura NDIS_SWITCH_NIC_SAVE_STATE não fornecer um buffer suficiente para manter o estado em tempo de execução, a extensão definirá o campo BytesNeeded da estrutura do método para NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 mais a quantidade de buffer necessária para armazenar os dados salvos e completará o OID com NDIS_STATUS_BUFFER_TOO_SHORT. O OID será reemitido com o tamanho necessário.

  4. Se a extensão não tiver dados de tempo de execução para salvar para a NIC especificada, ela deverá chamar NdisFOidRequest. Esta ação encaminha a solicitação do método OID para os controladores subjacentes na pilha de switch extensível. Para obter mais informações sobre este procedimento, consulte Filtrando solicitações OID num driver de filtro NDIS.

Se a extensão tiver dados de porta de tempo de execução para salvar, ela deverá seguir estas diretrizes quando salvar dados de porta de tempo de execução dentro da estrutura NDIS_SWITCH_NIC_SAVE_STATE :

  1. A extensão define o membro ExtensionId como o valor GUID que identifica exclusivamente o driver.

  2. A extensão define o membro ExtensionFriendlyName como o nome do driver.

    Observação O tipo de dados NDIS_SWITCH_EXTENSION_FRIENDLYNAME é definido pela estrutura IF_COUNTED_STRING. Uma cadeia de caracteres definida por essa estrutura não precisa ser terminada em nulo. No entanto, o comprimento da cadeia de caracteres deve ser definido no membro Length dessa estrutura. Se a cadeia de caracteres for terminada por NULL, o membro Length não deverá incluir o caractere NULL de terminação.

  3. Se uma classe de recurso estiver associada aos dados de tempo de execução salvos, a extensão definirá o FeatureClassId com o GUID que identifica exclusivamente a classe.

    Observação Se uma classe de recurso não estiver associada aos dados de tempo de execução salvos, a extensão definirá o FeatureClassId como zero.

  4. A extensão copia os dados de tempo de execução para o membro SaveData e define o membro SaveDataSize para o tamanho, em bytes, dos dados de tempo de execução.

Observação A extensão não deve alterar os membros Header ou PortId da estrutura NDIS_SWITCH_NIC_SAVE_STATE .

As solicitações de método OID de OID_SWITCH_NIC_SAVE são finalmente tratadas pela borda de miniporta subjacente do switch extensível. Uma vez que essa solicitação de método OID tenha sido encaminhada para o driver de miniporta através da pilha de driver de switch extensível, o driver de miniporta conclui a solicitação OID com NDIS_STATUS_SUCCESS. Isso avisa o limite do protocolo do switch extensível que todas as extensões na pilha do driver do switch extensível foram consultadas para dados de porta em tempo de execução. A borda do protocolo do switch extensível, em seguida, emite uma solicitação de definição de OID de OID_SWITCH_NIC_SAVE_COMPLETE para concluir a operação de salvamento.

Tratamento do pedido de OID_SWITCH_NIC_SAVE_COMPLETE

Quando uma partição filha Hyper-V, que tem uma conexão de adaptador de rede com uma porta de comutador extensível, é pausada ou o seu estado está a ser salvo, a interface do comutador extensível Hyper-V é notificada. Isso faz com que a borda de protocolo do switch extensível emita uma solicitação de método de identificador de objeto (OID) de OID_SWITCH_NIC_SAVE para baixo na pilha de driver de switch extensível.

Quando cada extensão de switch extensível Hyper-V salvou seus dados de tempo de execução, a borda do protocolo do switch extensível notifica as extensões subjacentes de que a operação de salvamento foi concluída. A borda do protocolo faz isso emitindo um pedido de conjunto OID de OID_SWITCH_NIC_SAVE_COMPLETE na pilha de drivers do switch extensível.

Observação Quando uma operação de salvamento em tempo de execução é iniciada para uma conexão de adaptador de rede de switch extensível, outra operação de salvamento para a mesma conexão de adaptador de rede não será executada até que a solicitação de OID_SWITCH_NIC_SAVE_COMPLETE seja emitida. No entanto, operações de salvamento para outras conexões de adaptador de rede podem ocorrer durante esse tempo.

O membro InformationBuffer da estrutura NDIS_OID_REQUEST para a solicitação OID_SWITCH_NIC_SAVE_COMPLETE contém um ponteiro para uma estrutura NDIS_SWITCH_NIC_SAVE_STATE . Esta estrutura é alocada pela extremidade do protocolo do comutador extensível.

Quando receber o pedido de definição do OID OID_SWITCH_NIC_SAVE_COMPLETE, a extensão deve seguir estas diretrizes:

  • A extensão não deve modificar a estrutura NDIS_SWITCH_NIC_SAVE_STATE associada à solicitação OID.

  • A extensão deve chamar NdisFOidRequest para encaminhar essa solicitação OID através da pilha de extensão de switch extensível. A extensão não deve falhar a solicitação de OID.

    Nota A extensão deve monitorar o status de conclusão desta solicitação OID. A extensão faz isso para detetar se a operação de salvamento foi concluída com êxito.

As solicitações de método OID de OID_SWITCH_NIC_SAVE_COMPLETE são, por fim, geridas pela camada de miniportas subjacente do switch extensível. Uma vez que essa solicitação de método OID tenha sido recebida pela borda da miniporta, ela conclui a solicitação OID com NDIS_STATUS_SUCCESS. Isso notifica a borda do protocolo do switch extensível de que todas as extensões na pilha de driver do switch extensível concluíram a operação de salvamento.

Restaurando dados do switch extensível Hyper-V Run-Time

Quando uma partição filha Hyper-V que tem uma conexão de adaptador de rede com uma porta de comutador extensível é retomada após uma pausa, a interface de comutador extensível Hyper-V é notificada. Isso faz com que a borda de protocolo do switch extensível emita uma solicitação de definição do identificador de objeto (OID) de OID_SWITCH_NIC_RESTORE na pilha de drivers do switch extensível. Quando uma extensão recebe essa solicitação OID, ela pode restaurar seus dados de tempo de execução para a porta de switch extensível que é usada pela partição filho.

O membro InformationBuffer da estrutura NDIS_OID_REQUEST para a solicitação OID_SWITCH_NIC_RESTORE contém um ponteiro para uma estrutura NDIS_SWITCH_NIC_SAVE_STATE . Esta estrutura é alocada pelo limite do protocolo do switch extensível.

Quando recebe o pedido de definição do OID OID_SWITCH_NIC_RESTORE, a extensão do switch extensível deve primeiro determinar se possui os dados de execução. A extensão faz isso comparando o valor do ExtensionId membro da estrutura NDIS_SWITCH_NIC_SAVE_STATE com o valor GUID que a extensão usa para se identificar.

Se a extensão possuir os dados de tempo de execução para uma NIC de switch extensível, ela restaurará esses dados da seguinte maneira:

  1. A extensão copia os dados de tempo de execução no membro SaveData para o armazenamento alocado pelo driver.

    Observação O valor do PortId membro da estrutura NDIS_SWITCH_NIC_SAVE_STATE pode ser diferente do valor PortId no momento em que os dados de tempo de execução foram salvos. Isso pode ocorrer se os dados em tempo de execução foram salvos durante uma migração ao vivo de um host para outro. No entanto, a configuração da NIC do switch extensível é mantida durante a Migração em Tempo Real. Isso permite que a extensão restaure os dados de tempo de execução para o NIC do switch extensível usando o novo valor PortId.

  2. A extensão completa o pedido de definição de OID com NDIS_STATUS_SUCCESS.

Se a extensão não possuir os dados de tempo de execução especificados para salvar, a extensão chamará NdisFOidRequest. Encaminha a requisição de definição do OID para os drivers subjacentes na stack de drivers de comutador extensível. Nesse caso, a extensão não deve modificar a estrutura de NDIS_SWITCH_NIC_SAVE_STATE associada à solicitação OID. Para obter mais informações sobre como encaminhar solicitações OID, consulte Filtrando solicitações OID em um driver de filtro NDIS.

Se a solicitação de conjunto OID de OID_SWITCH_NIC_RESTORE for concluída com NDIS_STATUS_SUCCESS, a extremidade do protocolo do switch extensível emitirá outra solicitação de conjunto OID. Quando recebe essa nova solicitação de conjunto OID, a extensão pode fazer o seguinte:

  • Caso possua os dados de tempo de execução na nova solicitação OID, a extensão restaura os dados adicionais de tempo de execução dentro da estrutura NDIS_SWITCH_NIC_SAVE_STATE. Em seguida, a extensão conclui a solicitação OID com NDIS_STATUS_SUCCESS.

  • Se ele não possui os dados de tempo de execução na nova solicitação OID, a extensão chama NdisFOidRequest para encaminhar essa solicitação de conjunto OID para drivers subjacentes.

OID_SWITCH_NIC_RESTORE_COMPLETE
A interface do switch extensível sinaliza a extremidade do protocolo do switch para emitir este OID quando é concluída a operação de restauração dos dados de execução em tempo real para um adaptador de rede do switch extensível.

Essa solicitação OID notifica a extensão de que a operação de restauração foi concluída somente para uma NIC de switch extensível especificada.

Para obter mais informações sobre esta solicitação OID, consulte OID_SWITCH_NIC_RESTORE_COMPLETE.

Observação Se a solicitação de definição OID_SWITCH_NIC_RESTORE for recebida pela borda do miniport do switch extensível, a solicitação OID será concluída com NDIS_STATUS_SUCCESS. Isto notifica a extremidade do protocolo do switch extensível de que nenhuma extensão detém os dados de tempo de execução. Se isso acontecer, a interface do switch extensível regista um evento que documenta os valores de membro ExtensionId e PortId para a extensão que guardou originalmente os dados da porta em tempo de execução.