Tráfego de pacote de origem
Este tópico descreve como as extensões do Hyper-V originam novos pacotes e os injetam no caminho de dados do comutador extensível.
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.
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.
Extensíveis Extensible switch extensions can only inject new packets into the extensible switch ingress data path. Isso garante que a interface de comutador 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 que a extensão aloca uma estrutura NET_BUFFER_LIST para um novo pacote, ela deve chamar a função de manipulador AllocateNetBufferListForwardingContext para alocar o contexto de encaminhamento de comutador extensível para o pacote.
O contexto de encaminhamento reside nos dados OOB (fora de banda) 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 Contexto de encaminhamento extensível de comutador extensível do Hyper-V.
Depois que a extensão chamar AllocateNetBufferListForwardingContext, a porta de origem do pacote será definida como 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 porta de comutador extensível, como ACLs (listas de controle de acesso) e QoS (qualidade de serviço).
A extensão pode querer que o pacote seja tratado como se tivesse origem em 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 de porta de origem como NDIS_SWITCH_DEFAULT_PORT_ID para pacotes de controle proprietário 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 esse procedimento, consulte Adicionando dados de porta de destino de comutador extensível a um pacote.
Nota 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 estão localizados na memória local ou confiável no sistema operacional pai da partição pai do Hyper-V. Essa memória não é acessível pela partição filho. Portanto, ele é 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 membro IsPacketDataSafe 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 de sinalizador de comutador extensíveis apropriadas. Para obter mais informações sobre essas configurações de sinalizador, consulte Sinalizadores de envio e recebimento de comutador extensível do Hyper-V.
Quando o NDIS chama a função FilterSendNetBufferListsComplete 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 Caminho de dados de comutador extensível do Hyper-V.