Diretrizes de gerenciamento de pacotes para o caminho de dados de comutador extensível
Este tópico descreve as diretrizes que as extensões de comutador extensível do Hyper-V devem seguir para gerenciar pacotes obtidos no caminho de dados do comutador extensível.
Nota Na interface de comutador extensível, os drivers de filtro NDIS são conhecidos como extensíveis e a pilha de driver é conhecida como a pilha extensível de driver de comutador. Para obter mais informações sobre as extensões, consulte Extensões de comutador extensível do Hyper-V.
Nota Esta página pressupõe que você esteja familiarizado com as informações e diagramas em Visão geral do Comutador Extensível do 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 foi originado. Essas informações são armazenadas nos dados OOB da estrutura 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 dados de saída.
As extensões de encaminhamento podem filtrar o tráfego de pacotes e impor políticas de porta ou comutador personalizadas e padrão para 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.
No caminho de dados de saída 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 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 nos dados OOB da 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 comutador personalizadas e padrão para 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 destino de 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 esse procedimento, consulte Excluindo a entrega de pacotes para portas de destino de comutador extensível.
Com base nas políticas impostas em um pacote, a extensão de encaminhamento pode excluir a entrega do pacote para um ou mais destinos. Para obter mais informações, consulte Encaminhamento híbrido.
No caminho de dados de saída do comutador extensível, as extensões de filtragem e encaminhamento não devem fazer o seguinte:
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 os 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 Clonando o tráfego de pacotes.
Nota Se a extensão clonar um pacote que foi obtido no caminho de dados de saída, ela poderá injetar o novo pacote no caminho de dados de saída somente se 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.
Injete pacotes de dados novos ou clonados no caminho de dados de saída.
No caminho de dados NDIS padrão, os dados OOB de comutador não extensíveis geralmente têm formatos diferentes, dependendo se o pacote está sendo indicado como um envio ou um recebimento. Por exemplo, o NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO dados OOB é uma união de estruturas específicas de envio e recebimento.
No caminho de dados do comutador extensível, todos os pacotes se movem pela pilha do driver de extensão conforme os envios e recebimentos são enviados. Por isso, os dados OOB do comutador não extensível dentro da estrutura de NET_BUFFER_LIST do pacote estarão em um formato de envio ou recebimento durante a duração do fluxo pela pilha de driver.
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 em um formato de recebimento. Para outras portas, esses dados OOB estarão em um formato de envio.
Nota Se a extensão clonar a estrutura de NET_BUFFER_LIST de um pacote, ela deverá levar em consideração os dados OOB não extensíveis se adicionar ou modificar os dados OOB. A extensão deve chamar CopyNetBufferListInfo para copiar os dados OOB associados ao caminho de dados de opção extensível de um pacote de origem para um pacote clonado. Essa função manterá o formato de envio ou recebimento OOB quando os dados forem copiados para o pacote clonado.
Se uma extensão remover um pacote do caminho de dados de entrada de saída, ela deverá chamar ReportFilteredNetBufferLists. Quando essa função é chamada, a interface de comutador extensível incrementa contadores e logs de eventos para os pacotes descartados ou excluídos.