Gerenciando o contexto de encaminhamento 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.
A estrutura NET_BUFFER_LIST para cada pacote que atravessa o caminho de dados de comutador extensível do Hyper-V contém dados OOB (fora de banda). Esses dados especificam a porta de origem de onde o pacote se originou, bem como uma ou mais portas de destino para entrega de pacotes. Esses dados OOB são conhecidos como o contexto extensível de encaminhamento de comutador.
Nota O contexto de encaminhamento de comutador extensível é diferente da estrutura de NET_BUFFER_LIST_CONTEXT . Isso permite que as extensões aloquem suas próprias estruturas de contexto sem afetar o contexto de encaminhamento.
O contexto de encaminhamento de comutador extensível é alocado e liberado da seguinte maneira:
Quando um pacote chega ao comutador extensível de um adaptador de rede, a interface de comutador extensível aloca o contexto de encaminhamento e o associa à estrutura NET_BUFFER_LIST do pacote.
Quando o pacote é entregue às portas de destino, a interface libera o contexto de encaminhamento da estrutura NET_BUFFER_LIST do pacote.
Se uma extensão de comutador extensível injetar um pacote novo ou clonado no caminho de dados de comutador extensível, ele deverá alocar o contexto de encaminhamento antes de chamar NdisFSendNetBufferLists.
Depois que a extensão aloca uma estrutura NET_BUFFER_LIST para um pacote novo ou clonado, ela deve chamar a função AllocateNetBufferListForwardingContext para alocar o contexto de encaminhamento para o pacote. Quando a solicitação de envio de pacotes for concluída, a extensão deverá chamar FreeNetBufferListForwardingContext antes de liberar ou reutilizar a estrutura NET_BUFFER_LIST .
Nota Quando a extensão chama AllocateNetBufferListForwardingContext, a porta de origem do pacote é definida como NDIS_SWITCH_DEFAULT_PORT_ID. Isso especifica que o pacote se originou de uma extensão em vez de chegar a uma porta de comutador extensível. Em determinadas condições, a extensão pode querer alterar a porta de origem do pacote. Para obter mais informações, confira Modificando os dados extensíveis da porta de origem do comutador extensível de um pacote.
Para obter mais informações, consulte Operações de envio e recebimento extensíveis do Hyper-V.
Todas as extensíveis extensíveis podem chamar as seguintes funções extensíveis do manipulador de comutador para acessar os dados no contexto de encaminhamento do pacote:
AllocateNetBufferListForwardingContext
Aloca o contexto de encaminhamento de comutador extensível e prepara uma estrutura NET_BUFFER_LIST para operações de envio ou recebimento dentro do comutador extensível.
CopyNetBufferListInfo
Copia o contexto de encaminhamento da estrutura NET_BUFFER_LIST de um pacote de origem para a estrutura NET_BUFFER_LIST de um pacote de destino. Esses dados incluem as informações extensíveis da porta de origem do comutador e do adaptador de rede. As informações de porta de destino do comutador extensível também podem ser copiadas para o pacote de destino.
FreeNetBufferListForwardingContext
Libera os recursos no contexto extensível de encaminhamento de comutador de uma estrutura de NET_BUFFER_LIST . Esses dados foram usados para operações de envio ou recebimento em um comutador extensível do Hyper-V e foram alocados anteriormente chamando a função AllocateNetBufferListForwardingContext .
GetNetBufferListDestinations
Retorna as portas de destino do contexto de encaminhamento da estrutura de NET_BUFFER_LIST de um pacote.
Uma extensão de encaminhamento é responsável por adicionar portas de destino para um pacote, a menos que o pacote seja um pacote NVGRE. (Para obter mais informações, consulte Encaminhamento Híbrido.) A extensão chama as seguintes funções extensíveis do manipulador de comutador para adicionar ou atualizar as portas de destino dentro do contexto de encaminhamento do pacote:
AddNetBufferListDestination
Adiciona um único destino à área de contexto de encaminhamento de comutador extensível para um pacote especificado por uma estrutura NET_BUFFER_LIST .
Nota Essa chamada confirma a alteração na área de contexto de encaminhamento. Nesse caso, a extensão de encaminhamento não precisa chamar UpdateNetBufferListDestinations.
GrowNetBufferListDestinations
Aumenta o tamanho da matriz de porta de destino na área de contexto de encaminhamento da estrutura de NET_BUFFER_LIST de um pacote.
UpdateNetBufferListDestinations
Confirma modificações feitas pela extensão em uma ou mais portas de destino de comutador extensíveis de um pacote. Essa função atualiza o contexto de encaminhamento da estrutura NET_BUFFER_LIST de um pacote com essas alterações.
Nota Depois que a extensão de encaminhamento confirmar as alterações das portas de destino para o contexto de encaminhamento, as portas de destino não poderão ser removidas e somente o membro IsExcluded da estrutura NDIS_SWITCH_PORT_DESTINATION de uma porta de destino poderá ser alterado. Para obter mais informações, consulte Excluindo a entrega de pacotes para portas de destino de comutador extensível.
Tópicos relacionados
Contexto de encaminhamento extensível do Hyper-V
Tipos de dados de contexto de encaminhamento extensível do Hyper-V