Encaminhando pacotes para adaptadores de rede física
Nota Esta página pressupõe que você esteja familiarizado com as informações e diagramas nas seguintes páginas:
- Extensões de encaminhamento
- Encaminhamento híbrido
- Extensões de comutador extensível do Hyper-V
- Visão geral do comutador extensível do Hyper-V
- Extensões do provedor de agrupamento
Esta página descreve como as extensões de encaminhamento de comutador extensível do Hyper-V podem encaminhar solicitações de envio de pacotes para adaptadores físicos subjacentes. Um ou mais adaptadores de rede física podem ser associados ao adaptador de rede externa comutador extensível.
Por exemplo, o adaptador de rede externa comutador extensível pode ser associado à borda do miniporto virtual de um driver intermediário MUX (multiplexador NDIS). O driver intermediário do MUX em si pode ser associado a uma equipe de uma ou mais redes físicas no host. Essa configuração é conhecida como uma equipe de comutador extensível. Para obter mais informações sobre equipes de comutador extensíveis, consulte Tipos de configurações de adaptador de rede física.
Nessa configuração, as extensíveis são expostas a cada adaptador de rede na equipe de comutador extensível. Isso permite que uma extensão de encaminhamento na pilha de driver de comutador extensível gerencie a configuração e o uso de adaptadores de rede individuais na equipe. Por exemplo, a extensão pode fornecer suporte para uma solução de LBFO (failover de balanceamento de carga) sobre a equipe encaminhando pacotes de saída para adaptadores individuais. Como a extensão é conhecida como um provedor de agrupamento. Para obter mais informações sobre provedores de agrupamento, consulte Extensões do provedor de agrupamento.
Se uma extensão de encaminhamento estiver instalada e habilitada na pilha de driver de comutador extensível, ela será responsável por tomar decisões de encaminhamento para cada pacote obtido no caminho de dados de entrada do comutador extensível, a menos que o pacote seja um pacote NVGRE. (Para obter mais informações sobre pacotes NVGRE, consulte Encaminhamento Híbrido.) Com base nessas decisões de encaminhamento, a extensão pode adicionar portas de destino aos dados OOB (fora de banda) da estrutura NET_BUFFER_LIST do pacote. Depois que o pacote tiver concluído a passagem do caminho de dados do comutador extensível, a interface de comutador extensível entregará o pacote às portas de destino especificadas.
Nota Se uma extensão de encaminhamento não estiver instalada ou habilitada, a própria opção extensível tomará as decisões de encaminhamento para pacotes obtidos do caminho de dados de entrada. A opção adiciona as portas de destino aos dados OOB da estrutura de NET_BUFFER_LIST do pacote antes de encaminhar o pacote até o caminho de dados de saída do comutador extensível.
Quando a função FilterSendNetBufferLists da extensão de encaminhamento é chamada, o parâmetro NetBufferList contém um ponteiro para uma lista vinculada de estruturas de NET_BUFFER_LIST . Cada uma dessas estruturas especifica um pacote obtido do caminho de dados de entrada. Dentro dos dados OOB da estrutura de NET_BUFFER_LIST de cada pacote, os dados das portas de destino estão contidos em uma estrutura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY . A extensão obtém a estrutura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY e seus elementos chamando GetNetBufferListDestinations.
Nota Para melhorar o desempenho, uma extensão de encaminhamento pode chamar a função GrowNetBufferListDestinations em vez de GetNetBufferListDestinations para obter um ponteiro para a estrutura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY . A extensão fará isso se determinar que precisa de elementos de matriz adicionais nos dados OOB do pacote para portas de destino. Para obter mais informações, consulte Adicionando dados de porta de destino de comutador extensível a um pacote.
Cada elemento na matriz NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY define uma porta de destino e é formatado como uma estrutura NDIS_SWITCH_PORT_DESTINATION . Essa estrutura contém os seguintes membros:
O membro PortId contém um valor que especifica a porta de destino na opção extensível.
O membro NicIndex especifica o índice do adaptador de rede que está conectado à porta de comutador extensível especificada pelo membro PortId .
Para obter mais informações sobre esses valores de índice, consulte Valores de índice do adaptador de rede.
Se a extensão de encaminhamento adicionar uma porta de destino conectada ao adaptador de rede externo, a extensão poderá especificar o índice de um adaptador de rede física subjacente. Por exemplo, a extensão pode operar como um provedor de agrupamento para suporte a LBFO em uma equipe de comutador extensível. Isso permite que a extensão equilibre a sobrecarga de tráfego encaminhando solicitações de envio para diferentes adaptadores da equipe.
A extensão de encaminhamento deve seguir estas diretrizes ao adicionar ou modificar uma estrutura NDIS_SWITCH_PORT_DESTINATION para encaminhar solicitações de envio para um adaptador de rede física subjacente:
Se o membro PortId especificar a porta de comutador extensível à qual o adaptador de rede externo está conectado, a extensão deverá definir o membro NicIndex como um dos seguintes valores de índice:
Se apenas um adaptador de rede física estiver associado ao adaptador de rede externo, a extensão deverá definir o membro NicIndexcomo NDIS_SWITCH_DEFAULT_NIC_INDEX ou um.
Se vários adaptadores de rede física estiverem associados ao adaptador de rede externo, a extensão deverá definir o membro NicIndex como o valor de índice diferente de zero do adaptador de rede de destino na equipe de comutador extensível.
Nota Se o membro PortId não especificar a porta de comutador extensível à qual o adaptador de rede externo está conectado, a extensão deverá definir o membro NicIndex como NDIS_SWITCH_DEFAULT_NIC_INDEX.
Depois que a extensão tiver adicionado todas as portas de destino para o pacote, ela deverá chamar NdisFSendNetBufferLists para encaminhar o pacote no caminho de dados de entrada.
Para obter mais informações sobre como adicionar portas de destino a um pacote, consulte Encaminhando pacotes para portas de comutador extensíveis do Hyper-V.
Para obter mais informações sobre o caminho de dados de saída, consulte Caminho de dados do Comutador Extensível do Hyper-V.