Encaminhando solicitações de OID para adaptadores de rede física
Este tópico discute como as extensões de comutador extensível do Hyper-V encaminham solicitações de OID (identificador de objeto) para adaptadores físicos subjacentes no caminho de controle de comutador extensível do Hyper-V. A extensão também pode originar solicitações de OID para adaptadores de rede física subjacentes seguindo os métodos descritos neste tópico.
Por exemplo, o adaptador de rede externo pode ser associado à borda do miniporto virtual de um driver intermediário MUX (multiplexer NDIS). O driver MUX está associado a uma equipe de uma ou mais redes físicas no host. Essa configuração é conhecida como uma equipe de comutador extensível.
Nessa configuração, uma extensão de comutador extensível é exposta a todos os adaptadores de rede da equipe. Isso permite que a extensão gerencie a configuração e o uso de adaptadores de rede individuais na equipe. Por exemplo, uma extensão de encaminhamento pode fornecer suporte para uma solução lbfo (failover de balanceamento de carga) sobre a equipe encaminhando pacotes de saída para adaptadores individuais. Uma extensão de encaminhamento que gerencia uma equipe de comutador extensível é conhecida como um provedor de agrupamento. Para obter mais informações sobre provedores de agrupamento, consulte Extensões de provedor de agrupamento.
A figura a seguir mostra um exemplo de uma equipe de comutador extensível para NDIS 6.40 (Windows Server 2012 R2) e posterior.
A figura a seguir mostra um exemplo de uma equipe de comutador extensível para NDIS 6.30 (Windows Server 2012).
Nota Na interface de comutador extensível do Hyper-V, os drivers de filtro NDIS são conhecidos como extensíveis extensíveis e a pilha de driver é conhecida como a pilha extensível do driver de comutador.
As solicitações de OID devem ser encapsuladas para encaminhar a solicitação para um adaptador de rede física subjacente. As solicitações de OID são encapsuladas primeiro dentro de uma estrutura de NDIS_SWITCH_NIC_OID_REQUEST . Em seguida, as solicitações OID são encaminhadas por meio do caminho de controle de comutador extensível por uma solicitação de conjunto de OID de OID_SWITCH_NIC_REQUEST.
As solicitações de OID para os adaptadores físicos subjacentes são emitidas pelo seguinte:
A interface de comutador extensível.
As solicitações de OID, como solicitações de descarregamentos de hardware, são emitidas por drivers de filtro ou protocolo sobrepostos que são executados em um dos seguintes:
O sistema operacional de gerenciamento executado na partição pai do Hyper-V.
O sistema operacional convidado que é executado na partição filho do Hyper-V.
Quando essas solicitações de OID são recebidas pelo comutador extensível, elas são encapsuladas e encaminhadas pelo caminho de controle de comutador extensível. Quando uma extensão de encaminhamento recebe a solicitação OID encapsulada, ela pode encaminhar a solicitação para um adaptador físico subjacente. Essa capacidade é especialmente útil para configurar a equipe de comutador extensível para descarregamentos de hardware.
Por exemplo, o driver MUX anuncia os recursos comuns de toda a equipe de comutador extensível. No entanto, a extensão de encaminhamento pode emitir solicitações de OID para consultar ou definir os recursos individuais dos adaptadores dentro da equipe. Em seguida, a extensão de encaminhamento pode originar uma indicação de status NDIS do adaptador de rede externo para notificar os drivers sobre os recursos que se aplicam a toda a equipe. Para obter mais informações sobre esse procedimento, consulte Originando indicações de status NDIS de adaptadores de rede física.
Quando a extensão de encaminhamento encaminha a solicitação OID sobre o caminho de controle, ela é recebida pelo adaptador de rede externo. Neste ponto, a solicitação OID é descapsulada e encaminhada para o adaptador de rede física especificado.
Nota Começando com Windows Server 2012, somente as solicitações de OID de descarregamento de hardware são encapsuladas e encaminhadas dessa maneira. Por exemplo, as solicitações de OID de descarregamento para VMQ (fila de máquinas virtuais) ou IPsec (segurança de Protocolo de Internet) são encapsuladas e encaminhadas pelo caminho de controle de comutador extensível. Para obter mais informações, consulte Gerenciando solicitações de OID de descarregamento de hardware para adaptadores de rede física.
Uma extensão de encaminhamento.
A extensão de encaminhamento pode originar suas próprias solicitações OID encapsuladas e encaminhá-las para um adaptador de rede física subjacente. A extensão de encaminhamento pode encapsular solicitações OID NDIS padrão. A extensão de encaminhamento também pode encapsular solicitações de OID privadas definidas pelo IHV (fornecedor independente de hardware) para os adaptadores de rede física. Isso permite uma extensão de encaminhamento que também foi desenvolvida pelo IHV para habilitar ou desabilitar atributos proprietários em adaptadores físicos individuais na equipe.
Além disso, a extensão de encaminhamento pode originar solicitações OID de descarregamento de hardware encapsuladas para alocar recursos para uma partição filho do Hyper-V especificada. Por exemplo, a extensão de encaminhamento pode originar solicitações OID encapsuladas de OID_RECEIVE_FILTER_ALLOCATE_QUEUE para alocar uma VMQ para uma partição filho especificada. Nesse caso, a extensão encapsula a solicitação como proveniente da porta de comutador extensível e da conexão do adaptador de rede associada à partição.
Nota A extensão de encaminhamento só poderá originar sua própria solicitação OID de descarregamento de hardware encapsulada se estiver filtrando a mesma solicitação de OID emitida por drivers sobrepostos. Nesse caso, a extensão não deve encaminhar a solicitação OID original. Em vez disso, a extensão deve chamar NdisFOidRequestComplete para concluir essa solicitação quando o NDIS chamar seu FilterOidRequestComplete para concluir a solicitação OID originada.
Filtrar ou capturar extensões
Uma extensão de filtragem ou captura pode originar suas próprias solicitações de consulta OID encapsuladas e encaminhá-las para um adaptador de rede física subjacente. Essas extensões podem encapsular solicitações de consulta OID NDIS padrão ou solicitações de consulta OID privadas definidas pelo IHV (fornecedor independente de hardware) para os adaptadores de rede física.
Nota Somente as extensões de encaminhamento podem originar solicitações de conjunto de OID encapsuladas para adaptadores físicos subjacentes.
A extensão de encaminhamento deve seguir estas etapas quando encaminhar, redirecionar ou originar uma solicitação OID encapsulada para um adaptador físico subjacente:
Se a extensão de encaminhamento estiver originando uma solicitação OID, ela deverá inicializar uma estrutura de NDIS_OID_REQUEST alocada por extensão com as informações relacionadas à solicitação.
Se a extensão estiver encaminhando uma solicitação OID, ela não deverá alterar a estrutura de NDIS_OID_REQUEST existente referenciada pelo parâmetro OidRequest da função FilterOidRequest . Em vez disso, a extensão deve chamar NdisAllocateCloneOidRequest para alocar memória para uma nova estrutura de NDIS_OID_REQUEST e copiar todas as informações da estrutura de NDIS_OID_REQUEST existente.
A extensão define os membros de uma estrutura de NDIS_SWITCH_NIC_OID_REQUEST alocada por extensão para os seguintes valores:
O membro DestinationPortId deve ser definido como o identificador da porta de comutador extensível à qual o adaptador de rede externo está conectado.
O membro DestinationNicIndex deve ser definido como o valor de índice diferente de zero do adaptador de rede física subjacente.
Para obter mais informações sobre esses valores de índice, consulte Valores de índice do adaptador de rede.
Se a extensão de encaminhamento estiver originando uma solicitação de OID de descarregamento de hardware para uma partição filho do Hyper-V, o membro SourcePortId deverá ser definido como o identificador da porta usada pela partição. Além disso, o membro SourceNicIndex deve ser definido como o índice do adaptador de rede para a conexão de rede com essa porta.
Se a extensão de encaminhamento estiver originando uma solicitação OID padrão ou privada para suas próprias finalidades, os membros SourcePortId e SourceNicIndex deverão ser definidos como zero.
Se a extensão de encaminhamento estiver encaminhando ou redirecionando uma solicitação OID de descarregamento de hardware, ela deverá manter os valores dos membros SourcePortId e SourceNicIndex que foram definidos pela interface de comutador extensível.
O membro OidRequest deve ser definido como um ponteiro para uma estrutura de NDIS_OID_REQUEST inicializada para a solicitação OID encapsulada. A extensão de encaminhamento aloca e inicializa essa estrutura ou usa a cópia clonada da estrutura.
A extensão define os membros de uma estrutura de NDIS_OID_REQUEST alocada por extensão com os seguintes valores:
O membro Oid deve ser definido como OID_SWITCH_NIC_REQUEST.
O membro InformationBuffer deve conter um ponteiro para um buffer que contenha os dados de solicitação OID gerados ou filtrados.
O membro InformationBufferLength deve conter o comprimento, em bytes, do buffer que contém os dados de solicitação OID gerados ou filtrados.
A extensão define os outros membros como valores válidos para a estrutura NDIS_OID_REQUEST .
A extensão chama ReferenceSwitchNic para incrementar um contador de referência para o índice do adaptador de rede física de destino. Isso garante que a interface do comutador extensível não exclua a conexão do adaptador de rede física enquanto o contador de referência não for zero.
Quando a extensão chama ReferenceSwitchNic, ela define o parâmetro SwitchPortId como o valor especificado para o membro DestinationPortId . A extensão também define o parâmetro SwitchNicIndex como o valor especificado para o membro DestinationNicIndex .
Nota Se ReferenceSwitchNic não retornar NDIS_STATUS_SUCCESS, a solicitação OID não poderá ser encaminhada para o adaptador de rede física de destino.
Se a extensão de encaminhamento estiver originando uma solicitação OID de descarregamento de hardware para uma partição filho do Hyper-V, ela também chamará ReferenceSwitchNic para incrementar um contador de referência para o índice da conexão do adaptador de rede de origem associada à partição. Isso garante que a interface do comutador extensível não exclua a conexão do adaptador de rede física enquanto o contador de referência não for zero.
Quando a extensão chama ReferenceSwitchNic, ela define o parâmetro SwitchPortId como o valor especificado para o membro SourcePortId . A extensão também define o parâmetro SwitchNicIndex como o valor especificado para o membro SourceNicIndex .
Nota Se ReferenceSwitchNic não retornar NDIS_STATUS_SUCCESS, a solicitação OID não poderá ser encaminhada para o adaptador de rede física de destino.
A extensão chama NdisFOidRequest para encaminhar a solicitação OID encapsulada para a porta de comutador extensível de destino especificada e o adaptador de rede.
Nota Se a extensão estiver encaminhando uma solicitação OID filtrada, ela deverá chamar NdisFOidRequest dentro do contexto da chamada para sua função FilterOidRequest . Se a extensão estiver encaminhando solicitações de OID geradas, ela chamará NdisFIndicateStatus enquanto estiver nos estados Executando, Reiniciando, Pausado e Pausando . Para obter mais informações sobre esses estados, consulte Filtrar estados e operações do módulo.
Quando o NDIS chama a função FilterOidRequestComplete , a extensão chama DereferenceSwitchNic para limpar o contador de referência para o índice do adaptador de rede física de destino.
Se a extensão de encaminhamento originou uma solicitação OID de descarregamento de hardware para uma partição filho do Hyper-V, ela também chama DereferenceSwitchNic para limpar o contador de referência para o índice da conexão do adaptador de rede de origem para o adaptador.
Em ambos os casos, a extensão define os parâmetros SwitchPortId e SwitchNicIndex com os mesmos valores usados na chamada para ReferenceSwitchNic.
Para obter mais informações sobre como a extensão emite solicitações OID, consulte Gerando solicitações OID de um Driver de Filtro NDIS.
Para obter mais informações sobre drivers MUX, consulte Drivers intermediários do MUX do NDIS.