Compartilhar via


Diretrizes de Gerenciamento de Pacotes para o Caminho de Dados do Switch Extensível

Este tópico descreve as diretrizes que as extensões de comutador extensível Hyper-V devem seguir para gerenciar pacotes obtidos no caminho de dados do comutador extensível.

Observação Na interface de comutador extensível, os drivers de filtro NDIS são conhecidos como extensões de comutador extensíveis e a pilha de drivers é conhecida como pilha de drivers de comutador extensível. Para obter mais informações sobre as extensões, consulte Hyper-V Extensible Switch Extensions.

Nota Esta página pressupõe que você esteja familiarizado com as informações e diagramas em Visão geral do Comutador Extensível Hyper-V e Encaminhamento Híbrido.

As extensões devem seguir estas diretrizes para o gerenciamento de pacotes no caminho de dados de comutador extensível:

  • As extensões que originam pacotes devem chamar NdisFSendNetBufferLists para iniciar uma solicitação de envio no caminho de dados de entrada. Isso deve ser feito dessa forma para permitir o encaminhamento adequado do pacote por meio do comutador extensível.

  • Uma extensão de captura pode monitorar pacotes no caminho de dados de entrada e saída do comutador extensível. No entanto, esse tipo de extensão deve sempre encaminhar pacotes e não deve descartar os pacotes. Além disso, a extensão de captura não deve modificar os dados do pacote antes de encaminhar o pacote.

  • No caminho de dados de entrada do comutador extensível, as extensões de filtragem e encaminhamento podem fazer o seguinte:

    • As extensões de filtragem podem filtrar o tráfego de pacotes e impor apenas políticas personalizadas de porta ou comutador para entrega de pacotes por meio do comutador extensível. Quando a extensão filtra pacotes no caminho de dados de entrada, ela só pode aplicar regras de filtragem com base apenas na porta de origem e na conexão do adaptador de rede da qual o pacote se originou. Essas informações são armazenadas nos dados OOB da estrutura de NET_BUFFER_LIST de um pacote e podem ser obtidas usando a macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .

      Nota Os pacotes obtidos no caminho de dados de entrada não contêm portas de destino. A filtragem de pacotes com base em portas de destino só pode ser feita em pacotes obtidos no caminho de saída de dados.

    • As extensões de encaminhamento podem filtrar o tráfego de pacotes e impor políticas personalizadas e padrão de porta ou de comutador para a entrega de pacotes por meio do comutador extensível. Quando a extensão de encaminhamento filtra pacotes no caminho de dados de entrada, ela aplica regras de filtragem com base na porta de origem, bem como nas portas de destino que a extensão de encaminhamento atribui ao pacote.

  • Na trajetória de saída de dados do comutador extensível, as extensões de filtragem e encaminhamento podem executar as seguintes funções:

    • As extensões de filtragem podem filtrar o tráfego de pacotes e impor apenas políticas personalizadas de porta ou comutador para entrega de pacotes por meio do comutador extensível. Quando a extensão de filtragem filtra pacotes no caminho de dados de saída, ela pode aplicar regras de filtragem com base apenas nas portas de destino de um pacote.

      Os dados da porta de destino são armazenados na seção OOB dos dados de uma estrutura NET_BUFFER_LIST de um pacote. As extensões obtêm essas informações chamando a função GetNetBufferListDestinations .

    • As extensões de encaminhamento podem filtrar o tráfego de pacotes e impor políticas de porta ou de comutador personalizadas e padrão para a entrega de pacotes por meio do comutador extensível. Quando a extensão de encaminhamento filtra pacotes no caminho de dados de saída, ela pode aplicar regras de filtragem com base nas portas de origem ou de destino para um pacote.

    • Com base nas políticas impostas em um pacote, a extensão de filtragem ou encaminhamento pode excluir a entrega do pacote para um ou mais destinos. Para obter mais informações sobre este procedimento, consulte Excluindo a entrega de pacotes para portas de destino de comutador extensível.

      Com base nas políticas aplicadas a um pacote, a extensão de encaminhamento pode excluir o encaminhamento do pacote para um ou mais destinos. Para obter mais informações, consulte de Encaminhamento Híbrido.

  • No caminho de dados de saída do comutador extensível, as extensões de filtragem e encaminhamento não devem realizar as seguintes ações:

    • Modifique os dados do pacote antes de encaminhar o pacote no caminho de dados de saída.

      Se uma extensão de filtragem precisar modificar os dados em um pacote, ela deverá primeiro clonar o pacote sem preservar destinos de porta. Em seguida, a extensão deve injetar o pacote modificado no caminho de dados de entrada. Isso permite que as extensões subjacentes imponham políticas no pacote modificado e a extensão de encaminhamento pode adicionar destinos de porta.

      Se a extensão de encaminhamento precisar modificar os dados em um pacote, ela deverá primeiro clonar o pacote antes de atribuir destinos de porta. Depois que o pacote tiver sido modificado e os destinos de porta atribuídos, a extensão deverá injetar o pacote modificado no caminho de dados de entrada.

      Para obter mais informações, consulte Cloning Packet Traffic.

      Nota Se a extensão clonar um pacote que foi obtido no caminho de dados de saída, ele poderá injetar o novo pacote no caminho de dados de saída somente se ele não tiver alterado os dados do pacote e preservado os dados originais da porta de destino.

    • Adicione portas de destino ao pacote antes de encaminhar o pacote.

      Nota As extensões de encaminhamento têm permissão para adicionar portas de destino a pacotes obtidos no caminho de dados de entrada.

    • Insira pacotes de dados novos ou clonados no caminho de dados de saída.

  • Na trajetória de dados padrão do NDIS, os dados OOB do comutador não extensível geralmente têm formatos diferentes, dependendo se o pacote está sendo indicado como uma operação de envio ou de recebimento. Por exemplo, os dados OOB NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO são uma união de estruturas específicas de envio e recebimento.

    No caminho de dados do comutador extensível, todos os pacotes transitam pela pilha de drivers de extensão tanto para envio quanto para recebimento. Por isso, os dados OOB do comutador não extensível dentro da estrutura NET_BUFFER_LIST do pacote estarão em um formato de envio ou recebimento ao longo da pilha de drivers durante a duração do fluxo.

    O formato desses dados OOB depende da porta de comutador extensível de origem da qual o pacote chegou ao comutador extensível. Se a porta de origem estiver conectada ao adaptador de rede externo, os dados OOB do comutador não extensível estarão no formato de recebimento. Para outras portas, esses dados OOB estarão em um formato de envio.

    Nota Se a extensão clonar a estrutura NET_BUFFER_LIST de um pacote, ela deverá levar em consideração os dados de OOB do comutador não extensível caso esta adicione ou modifique os dados do OOB. A extensão deve chamar CopyNetBufferListInfo para copiar os dados OOB associados ao caminho de dados de comutador extensível de um pacote de origem para um pacote clonado. Essa função manterá o formato de envio ou recebimento do OOB quando os dados forem copiados para o pacote clonado.

  • Se uma extensão remover um pacote de qualquer um dos caminhos de dados de entrada ou saída, ela deverá chamar ReportFilteredNetBufferLists. Quando essa função é chamada, a interface de comutador extensível incrementa os contadores e registra eventos para os pacotes descartados ou excluídos.