Sinalizadores de envio e recebimento 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.
O tráfego de pacotes que se move sobre o caminho de dados do comutador extensível do Hyper-V é obtido por extensões da seguinte maneira:
Uma extensão obtém um pacote do caminho de dados de entrada quando sua função FilterSendNetBufferLists é chamada. A extensão encaminha o pacote para extensões subjacentes no caminho de dados de entrada chamando NdisFSendNetBufferLists. As extensões de filtragem e encaminhamento também podem remover o pacote do caminho de dados de entrada chamando NdisFSendNetBufferListsComplete.
Uma extensão obtém um pacote do caminho de dados de saída quando sua função FilterReceiveNetBufferLists é chamada. A extensão encaminha o pacote para extensões de sobreposição no caminho de dados de saída chamando NdisFIndicateReceiveNetBufferLists. As extensões de filtragem e encaminhamento também podem remover o pacote do caminho de dados de saída chamando NdisFReturnNetBufferLists.
Os sinalizadores a seguir podem ser definidos no parâmetro SendFlags de FilterSendNetBufferLists ou NdisFSendNetBufferLists:
NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE
Se esse sinalizador for definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST originaram-se da mesma porta de origem do comutador extensível do Hyper-V.
Quando o NDIS chamar FilterSendNetBufferLists, ele definirá esse sinalizador se a interface extensível do comutador extensível tiver agrupado vários pacotes da mesma porta de origem. Para obter o melhor desempenho, as extensões devem manter esse agrupamento em vigor e definir esse sinalizador quando ele chamar NdisFSendNetBufferLists. A extensão também poderá adicionar pacotes originados ou clonados à lista vinculada de estruturas de NET_BUFFER_LIST se a extensão usar a mesma porta de origem que os outros pacotes na lista.
Nota Se cada pacote na lista vinculada de estruturas NET_BUFFER_LIST usar a mesma porta de origem, a extensão deverá definir o sinalizador NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE no parâmetro SendCompleteFlags de NdisFSendNetBufferListsComplete quando concluir a solicitação de envio.
NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP
Se esse sinalizador for definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST deverão ser encaminhados para a mesma porta de destino do comutador extensível.
Uma extensão de encaminhamento pode usar esse sinalizador para uma lista vinculada de estruturas de NET_BUFFER_LIST que ela encaminha no caminho de dados de entrada depois de determinar as portas de destino de cada pacote. Esse sinalizador é consumido e removido pela borda de miniporto subjacente do comutador extensível antes de encaminhar os pacotes até o caminho de dados de saída.
As extensões de captura e filtragem não podem usar esse sinalizador.
Nota A extensão de encaminhamento determina apenas as portas de destino do pacote para pacotes não NVGRE. Se o pacote for um pacote NVGRE, o componente HNV (Virtualização de Rede Hyper-V) determinará as portas de destino do pacote e encaminhará o pacote. Para obter mais informações, consulte Encaminhamento híbrido.
Para obter o melhor desempenho, as extensões de encaminhamento deverão definir esse sinalizador se todos os pacotes na lista vinculada forem encaminhados para a mesma porta de destino. Ao definir esse sinalizador, a extensão reconhece que todos os pacotes na lista vinculada têm os mesmos elementos de porta de destino no contexto de encaminhamento de comutador extensível.
Nota A extensão de encaminhamento não deve definir esse sinalizador para uma lista vinculada de pacotes que têm várias portas de destino.
Os sinalizadores a seguir podem ser definidos no parâmetro ReceiveFlags de FilterReceiveNetBufferLists ou NdisFIndicateReceiveNetBufferLists:
NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE
Se esse sinalizador for definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST originaram-se da mesma porta de origem do comutador extensível do Hyper-V.
Quando o NDIS chamar FilterReceiveNetBufferLists, ele definirá esse sinalizador se a opção extensível tiver agrupado vários pacotes da mesma porta de origem. Para obter o melhor desempenho, as extensões devem manter esse agrupamento no lugar e definir esse sinalizador quando ele chamar NdisMIndicateReceiveNetBufferLists. As extensões também devem adicionar pacotes originados ou clonados à lista vinculada de estruturas de NET_BUFFER_LIST se o pacote tiver a mesma porta de origem que os outros pacotes na lista.
Nota Se cada pacote na lista vinculada de estruturas NET_BUFFER_LIST usar a mesma porta de origem, a extensão deverá definir o sinalizador NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE no parâmetro ReturnFlags de FilterReturnNetBufferLists quando a solicitação de recebimento for concluída. A extensão deverá definir esse sinalizador no parâmetro ReturnFlags se chamar NdisFReturnNetBufferLists para retornar pacotes que ele não originou ou cloneu.
NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP
Se esse sinalizador for definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST deverão ser encaminhados para a mesma porta de destino do comutador extensível.
Quando o NDIS chamar FilterReceiveNetBufferLists, ele definirá esse sinalizador se a opção extensível tiver agrupado vários pacotes que têm as mesmas portas de destino. Para obter o melhor desempenho, as extensões devem manter esse agrupamento no lugar e definir esse sinalizador quando ele chamar NdisMIndicateReceiveNetBufferLists. As extensões também devem adicionar pacotes originados ou clonados à lista vinculada de estruturas de NET_BUFFER_LIST se o pacote tiver as mesmas portas de destino que os outros pacotes na lista.
Nota Quando uma extensão chama NdisFIndicateReceiveNetBufferLists, ela não deve definir o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES no parâmetro ReceiveFlags . A interface de comutador extensível ignora esse sinalizador e concluirá a indicação de recebimento chamando FilterReturnNetBufferLists.