Исключение доставки пакетов в порты назначения расширяемого коммутатора
В этом разделе описывается, как расширения расширяемого коммутатора Hyper-V могут исключить доставку пакетов в порты расширяемого коммутатора. Порты назначения для пакета указываются в контексте внеполосной пересылки (OOB) в структуре NET_BUFFER_LIST пакета. Дополнительные сведения об этом контексте см. в разделе Контекст переадресации расширяемого коммутатора Hyper-V.
Примечание На этой странице предполагается, что вы знакомы со сведениями и схемами в статье Обзор расширяемого коммутатора Hyper-V и гибридной пересылки.
Примечание В интерфейсе расширяемого коммутатора драйверы фильтров NDIS называются расширяемыми расширениями коммутаторов , а стек драйверов называется стеком драйверов расширяемого коммутатора. Дополнительные сведения о расширениях см. в разделе Расширения коммутатора Hyper-V.
Модули фильтрации и пересылки могут исключить доставку пакетов, полученных по путям входящего или исходящего трафика расширяемого коммутатора. Исключить доставку пакетов можно следующими способами:
Расширение может удалить пакет, выполнив запрос или указание пакета. Это исключает доставку пакета на любой расширяемый порт коммутатора. Этот метод можно использовать для пакетов с одним или несколькими портами назначения.
Для пакетов, полученных по пути входящего трафика расширяемого коммутатора, расширение завершает запрос на отправку пакетов, вызывая NdisFSendNetBufferListsComplete.
Для пакетов, полученных по пути исходящих данных расширяемого коммутатора, расширение завершает указание получения пакетов путем вызова NdisFReturnNetBufferLists.
Для пакетов, полученных по пути исходящих данных с несколькими портами назначения, расширение может исключить доставку пакетов, изменив данные для одного или нескольких портов назначения. Расширение делает это, задав для элемента IsExcludedструктуры NDIS_SWITCH_PORT_DESTINATION порта назначения значение , равное одному. Этот метод позволяет доставлять пакет в те порты, для которых значение IsExcluded равно нулю.
Примечание Пакеты, полученные по пути данных входящего трафика, не содержат порты назначения. Эти данные доступны только после того, как расширяемый коммутатор перенаправит пакет по пути исходящих данных.
После того как расширение изменило значение IsExcluded порта назначения, оно должно перенаправить пакет в пути исходящих данных в вышестоящее расширение. Однако если для данных IsExcluded для всех портов назначения пакета задано значение , расширение должно удалить пакет, завершив указание получения пакета, а не переадресовыв его.
Примечание После того как расширение задало для порта назначения значение IsExcluded равным 1, избыточные расширения на пути исходящих данных не могут изменить это значение на ноль.
Примечание Сбор расширений не может исключать доставку пакетов в расширяемые порты коммутатора.
Модули фильтрации и пересылки должны соответствовать следующим рекомендациям, чтобы исключить доставку пакетов на расширяемые порты коммутатора:
В пути входящего трафика расширяемого коммутатора модули фильтрации и пересылки могут исключить доставку пакетов на основе критериев политики для исходного порта или данных пакета.
Сведения об исходном порте хранятся в NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO объединении в данных OOB структуры NET_BUFFER_LIST пакета. Расширение получает данные с помощью макроса NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .
Если расширение исключает доставку пакета, полученного из пути данных входящего трафика, оно должно удалить пакет, выполнив запрос на отправку пакета.
На пути входящего трафика расширяемого коммутатора расширения переадресации определяют порты назначения пакета и добавляют эти сведения в данные OOB пакета. На основе критериев политики, применяемых расширением, оно может исключить доставку пакетов на порт, не добавляя сведения о целевом порте в данные OOB.
Дополнительные сведения об этой процедуре см. в разделе Добавление данных порта назначения расширяемого коммутатора в пакет.
В пути к данным исходящего трафика расширяемого коммутатора модули фильтрации и пересылки могут исключить доставку пакета на основе критериев политики. Например, модули фильтрации могут исключить доставку пакетов на основе критериев политики для порта источника или назначения пакета.
Расширения исключают доставку пакета на порты назначения, выполнив следующие действия.
Расширение получает порты назначения пакета, вызывая Метод GetNetBufferListDestinations. Если вызов возвращает NDIS_STATUS_SUCCESS, параметр Destinations содержит указатель на структуру NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY . Эта структура определяет порты назначения расширяемого коммутатора пакета. Каждый порт назначения имеет формат структуры NDIS_SWITCH_PORT_DESTINATION .
Примечание Если элемент NumDestinations структуры NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY содержит нулевое значение, пакет не содержит данных для портов назначения.
Расширение исключает доставку пакетов на расширяемый порт коммутатора, устанавливая для члена IsExcludedструктуры NDIS_SWITCH_PORT_DESTINATION порта назначения значение , равное одному.
Примечание Если расширение исключает доставку пакета на все порты назначения, расширение должно удалить пакет, завершив получение пакета.
Если расширение исключает доставку на один или все порты назначения в пакете, оно должно выполнить следующие действия.
Расширение должно вызвать UpdateNetBufferListDestinations , чтобы зафиксировать эти изменения в данных OOB пакета.
Расширение должно вызывать ReportFilteredNetBufferLists. При вызове этой функции интерфейс расширяемого коммутатора увеличивает счетчики и регистрирует события для исключенного пакета. Расширение должно выполнить этот вызов, прежде чем перенаправит пакет по пути данных расширяемого коммутатора, из которого он получил пакет.
Аналогичным образом, если расширение завершает запрос на отправку пакета или указание исключить доставку на все порты для пакета, оно также должно вызвать ReportFilteredNetBufferLists.
Примечание Расширение может создать связанный список NET_BUFFER_LIST структур для пакетов, исключаемых расширением. Когда расширение вызывает ReportFilteredNetBufferLists, оно задает для параметра NetBufferLists указатель на связанный список.
Дополнительные сведения о путях входящего и исходящего трафика коммутатора см. в статье Hyper-V Extensible Switch Data Path.