Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается, как расширяемые расширения коммутатора 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, вышележащие расширения в пути выхода данных не могут изменить это значение на 0.
Заметка Захват расширений не может исключить доставку пакетов в порты расширяемого коммутатора.
Фильтрация и пересылка расширений должны соответствовать этим рекомендациям, чтобы исключить доставку пакетов в расширяемые порты коммутаторов:
На пути входящего трафика расширяемого коммутатора фильтры и расширения пересылки могут исключить доставку пакетов на основе критериев политики порта-источника или данных пакета.
Сведения о исходном порту хранятся в союзе NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO в данных OOB NET_BUFFER_LIST структуры пакета . Расширение получает данные с помощью макроса NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .
Если расширение исключает доставку пакета, полученного из пути входящих данных, оно должно отбросить пакет, завершив запрос на отправку пакета.
На входящем пути данных расширяемого коммутатора расширения пересылки определяют порты, в которые направляется пакет, и добавляют это в его внеканальные данные. В зависимости от критериев политики, применяемых расширением, он может исключить доставку пакетов в порт, не добавляя сведения о целевом порту в данные 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.