Partilhar via


Originando tráfego de pacotes

Este tópico descreve como as extensões Hyper-V originam novos pacotes e os injetam no caminho de dados do comutador extensível.

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

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

As extensões do comutador extensível só podem injetar novos pacotes na trajetória de dados de entrada do comutador extensível. Isso garante que a interface do switch extensível possa filtrar e encaminhar esses pacotes corretamente. As extensões devem seguir estas diretrizes para injetar novos pacotes no caminho de dados de entrada:

  • A extensão deve primeiro alocar uma estrutura NET_BUFFER_LIST para um novo pacote.

  • Depois de a extensão alocar uma estrutura NET_BUFFER_LIST para um novo pacote, deve chamar a função manipuladora AllocateNetBufferListForwardingContext para alocar o contexto de encaminhamento do switch extensível para o pacote.

    O contexto de encaminhamento reside nos dados fora de banda (OOB) do pacote. Ele contém informações de encaminhamento para o pacote, como sua porta de origem e uma matriz de uma ou mais portas de destino.

    Para obter mais informações sobre o contexto de encaminhamento, consulte Hyper-V Extensible Switch Forwarding Context.

  • Depois de a extensão efetuar a chamada a AllocateNetBufferListForwardingContext, a porta de origem do pacote será configurada para NDIS_SWITCH_DEFAULT_PORT_ID. Um pacote com um identificador de porta de origem de NDIS_SWITCH_DEFAULT_PORT_ID é confiável e ignora as políticas de portas de switch extensíveis, como listas de controle de acesso (ACLs) e qualidade de serviço (QoS).

    A extensão pode querer que o pacote seja tratado como se tivesse sido originado de uma porta específica. Isso permite que as políticas dessa porta sejam aplicadas ao pacote. A extensão chama SetNetBufferListSource para alterar a porta de origem do pacote.

    No entanto, pode haver situações em que a extensão pode querer atribuir o identificador de porta de origem do pacote a NDIS_SWITCH_DEFAULT_PORT_ID. Por exemplo, a extensão pode querer definir o identificador da porta de origem como NDIS_SWITCH_DEFAULT_PORT_ID para pacotes de controle proprietários que são enviados para um dispositivo na rede externa.

  • Se a extensão de encaminhamento estiver enviando um novo pacote no caminho de dados de entrada, ela deverá determinar as portas de destino para o pacote. Para obter mais informações sobre este procedimento, consulte Adicionando dados de porta de destino do switch extensível a um pacote.

    Observação uma extensão de captura ou filtragem não pode adicionar novas portas de destino ao novo pacote.

  • Quando a extensão cria um novo pacote, os dados do pacote são localizados na memória local ou na memória confiável , no sistema operativo principal da partição mãe Hyper-V. Esta memória não é acessível pela partição secundária. Portanto, é considerado "seguro" contra atualizações não sincronizadas pelo sistema operacional convidado que é executado nessa partição.

    A extensão deve obter a união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO para o novo pacote usando a macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL. A extensão deve definir o IsPacketDataSafe membro como TRUE. Isso especifica que todos os dados do pacote estão localizados na memória confiável.

  • Quando a extensão chama NdisFSendNetBufferLists para injetar o pacote no caminho de dados de entrada, ela deve definir o parâmetro Flags com as configurações apropriadas do sinalizador de switch extensível. Para saber mais sobre estas definições de sinalizador, consulte Hyper-V Extensible Switch Send and Receive Flags.

  • Quando o NDIS chama a funçãoFilterSendNetBufferListsComplete da extensão para concluir a solicitação de envio do novo pacote, a extensão deve chamar FreeNetBufferListForwardingContext para liberar o contexto de encaminhamento alocado. A extensão deve fazer isso antes de liberar ou reutilizar a estrutura NET_BUFFER_LIST para o pacote.

Para obter mais informações sobre os caminhos de dados de entrada e saída do comutador extensível, consulte Hyper-V Caminho de dados do comutador extensível.