Excluindo a entrega de pacotes para portas de destino comutador extensível
Este tópico descreve como as extensões de comutador extensível do Hyper-V podem excluir a entrega de pacotes para portas de comutador extensíveis. As portas de destino de um pacote são especificadas dentro do contexto de encaminhamento OOB (fora de banda) dentro da estrutura de NET_BUFFER_LIST do pacote. Para obter mais informações sobre esse contexto, consulte Contexto de encaminhamento extensível 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.
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.
As extensões de filtragem e encaminhamento podem excluir a entrega de pacotes obtidos nos caminhos de dados de entrada ou saída do comutador extensível. A exclusão da entrega de pacotes pode ser feita das seguintes maneiras:
A extensão pode remover o pacote concluindo a solicitação de pacote ou a indicação. Isso exclui a entrega de um pacote para qualquer porta de comutador extensível. Esse método pode ser usado em pacotes que têm uma ou mais portas de destino.
Para pacotes obtidos no caminho de dados de entrada do comutador extensível, a extensão conclui a solicitação de envio de pacote chamando NdisFSendNetBufferListsComplete.
Para pacotes obtidos no caminho de dados de saída do comutador extensível, a extensão conclui a indicação de recebimento de pacote chamando NdisFReturnNetBufferLists.
Para pacotes obtidos no caminho de dados de saída com várias portas de destino, a extensão pode excluir a entrega de pacotes modificando os dados de uma ou mais portas de destino. A extensão faz isso definindo o membro IsExcluded da estrutura NDIS_SWITCH_PORT_DESTINATION da porta de destino como um valor de um. Esse método permite que o pacote seja entregue a essas portas cujo valor IsExcluded está definido como zero.
Nota Os pacotes obtidos no caminho de dados de entrada não contêm portas de destino. Esses dados só estão disponíveis depois que a opção extensível encaminha o pacote até o caminho de dados de saída.
Depois que a extensão tiver modificado o valor IsExcluded da porta de destino, ela deverá encaminhar o pacote no caminho de dados de saída para extensões de sobreposição. No entanto, se os dados IsExcluded de todas as portas de destino do pacote estiverem definidos como um, a extensão deverá remover o pacote concluindo a indicação de recebimento de pacote em vez de encaminhá-lo.
Nota Depois que uma extensão tiver definido o valor IsExcluded da porta de destino como um, as extensões excessivas no caminho de dados de saída não poderão alterar esse valor para zero.
Nota A captura de extensões não pode excluir a entrega de pacotes para portas de comutador extensíveis.
As extensões de filtragem e encaminhamento devem seguir estas diretrizes para excluir a entrega de pacotes para portas de comutador extensíveis:
No caminho de dados de entrada do comutador extensível, as extensões de filtragem e encaminhamento podem excluir a entrega de pacotes com base em critérios de política para a porta de origem ou os dados de um pacote.
As informações da porta de origem são armazenadas na união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO nos dados OOB da estrutura de NET_BUFFER_LIST do pacote. A extensão obtém os dados usando a macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .
Se a extensão excluir a entrega de um pacote obtido do caminho de dados de entrada, ela deverá remover o pacote concluindo a solicitação de envio de pacote.
No caminho de dados de entrada do comutador extensível, as extensões de encaminhamento determinam as portas de destino de um pacote e adicionam essas informações aos dados OOB do pacote. Com base nos critérios de política impostos pela extensão, ele pode excluir a entrega de pacotes para uma porta não adicionando suas informações de porta de destino aos dados OOB.
Para obter mais informações sobre esse procedimento, consulte Adicionando dados de porta de destino de comutador extensível a um pacote.
No caminho de dados de saída do comutador extensível, as extensões de filtragem e encaminhamento podem excluir a entrega do pacote com base em critérios de política. Por exemplo, as extensões de filtragem podem excluir a entrega de pacotes com base nos critérios de política para a porta de origem ou as portas de destino de um pacote.
As extensões excluem a entrega de um pacote para portas de destino seguindo estas etapas:
A extensão obtém as portas de destino do pacote chamando GetNetBufferListDestinations. Se a chamada retornar NDIS_STATUS_SUCCESS, o parâmetro Destinations conterá um ponteiro para uma estrutura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY . Essa estrutura especifica as portas de destino do comutador extensível do pacote. Cada porta de destino é formatada como uma estrutura NDIS_SWITCH_PORT_DESTINATION .
Nota Se o membro NumDestinations da estrutura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY contiver um valor igual a zero, o pacote não terá dados para portas de destino.
A extensão exclui a entrega de pacotes para uma porta de comutador extensível definindo o membro IsExcluded da estrutura NDIS_SWITCH_PORT_DESTINATION da porta de destino como um valor de um.
Nota Se a extensão excluir a entrega do pacote para todas as portas de destino, a extensão deverá remover o pacote concluindo a indicação de recebimento do pacote.
Se a extensão excluir a entrega de uma ou todas as portas de destino em um pacote, ela deverá fazer o seguinte:
A extensão deve chamar UpdateNetBufferListDestinations para confirmar essas alterações nos dados OOB do pacote.
A extensão deve chamar ReportFilteredNetBufferLists. Quando essa função é chamada, a interface de comutador extensível incrementa contadores e registra eventos para o pacote excluído. A extensão deve fazer essa chamada antes de encaminhar o pacote no caminho de dados de comutador extensível do qual obteve o pacote.
Da mesma forma, se a extensão concluir a solicitação de envio de pacotes ou a indicação para excluir a entrega para todas as portas do pacote, ela também deverá chamar ReportFilteredNetBufferLists.
Nota A extensão pode criar uma lista vinculada de estruturas de NET_BUFFER_LIST para pacotes que a extensão está excluindo. Quando a extensão chama ReportFilteredNetBufferLists, ela define o parâmetro NetBufferLists como um ponteiro para a lista vinculada.
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.