Рекомендации по управлению пакетами для пути данных расширяемого коммутатора
В этом разделе описываются рекомендации, которым должны следовать расширения расширяемого коммутатора Hyper-V для управления пакетами, полученными по пути данных расширяемого коммутатора.
Примечание В интерфейсе расширяемого коммутатора драйверы фильтров NDIS называются расширяемыми расширениями коммутаторов , а стек драйверов называется стеком драйверов расширяемого коммутатора. Дополнительные сведения о расширениях см. в разделе Расширения коммутатора Hyper-V.
Примечание На этой странице предполагается, что вы знакомы со сведениями и схемами в статье Обзор расширяемого коммутатора Hyper-V и гибридной пересылки.
Расширения должны соответствовать следующим рекомендациям по управлению пакетами в пути к данным расширяемого коммутатора:
Расширения, которые являются источником пакетов, должны вызывать NdisFSendNetBufferLists , чтобы инициировать запрос на отправку по пути данных входящего трафика. Это необходимо сделать таким образом, чтобы обеспечить правильную пересылку пакета через расширяемый коммутатор.
Расширение записи может отслеживать пакеты по пути входящего и исходящего трафика расширяемого коммутатора. Однако этот тип расширения всегда должен пересылать пакеты и не удалять пакеты. Кроме того, расширение записи не должно изменять данные пакета перед пересылкой пакета.
На пути входящего трафика расширяемого коммутатора расширения фильтрации и пересылки могут выполнять следующие действия.
Расширения фильтрации могут фильтровать трафик пакетов и применять только настраиваемые политики портов или коммутаторов для доставки пакетов через расширяемый коммутатор. Когда расширение фильтрует пакеты в пути данных входящего трафика, оно может применять только правила фильтрации, основанные только на исходном порте и подключении сетевого адаптера, из которого был получен пакет. Эти сведения хранятся в данных OOB NET_BUFFER_LIST структуры пакета и могут быть получены с помощью макроса NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .
Примечание Пакеты, полученные по пути данных входящего трафика, не содержат порты назначения. Фильтрация пакетов на основе портов назначения может выполняться только для пакетов, полученных по пути исходящих данных.
Расширения пересылки могут фильтровать трафик пакетов и применять пользовательские и стандартные политики портов или коммутаторов для доставки пакетов через расширяемый коммутатор. Когда модуль пересылки фильтрует пакеты в пути данных входящего трафика, он применяет правила фильтрации на основе исходного порта, а также портов назначения, которые расширение переадресации назначает пакету.
На пути к данным исходящего трафика расширяемого коммутатора расширения фильтрации и пересылки могут выполнять следующие действия.
Расширения фильтрации могут фильтровать трафик пакетов и применять только настраиваемые политики портов или коммутаторов для доставки пакетов через расширяемый коммутатор. Когда расширение фильтрации фильтрует пакеты по пути исходящих данных, оно может применять правила фильтрации только на основе портов назначения для пакета.
Данные порта назначения хранятся в данных OOB NET_BUFFER_LIST структуры пакета. Расширения получают эти сведения, вызывая функцию GetNetBufferListDestinations .
Расширения пересылки могут фильтровать трафик пакетов и применять пользовательские и стандартные политики портов или коммутаторов для доставки пакетов через расширяемый коммутатор. Когда расширение переадресации фильтрует пакеты по пути исходящих данных, оно может применять правила фильтрации на основе портов источника или назначения для пакета.
В зависимости от политик, применяемых к пакету, расширение фильтрации или пересылки может исключить доставку пакета в одно или несколько назначений. Дополнительные сведения об этой процедуре см. в разделе Исключение доставки пакетов в порты назначения расширяемого коммутатора.
В зависимости от политик, применяемых к пакету, расширение переадресации может исключить доставку пакета в одно или несколько назначений. Дополнительные сведения см. в разделе Гибридная пересылка.
В пути к данным исходящего трафика расширяемого коммутатора расширения фильтрации и пересылки не должны выполнять следующие действия.
Измените данные пакета перед пересылкой пакета по пути исходящих данных.
Если расширению фильтрации необходимо изменить данные в пакете, необходимо сначала клонировать пакет без сохранения назначений портов. Затем расширение должно внедрить измененный пакет в путь к данным входящего трафика. Это позволяет базовым расширениям применять политики к измененным пакетам, а расширение переадресации может добавлять назначения портов.
Если модулем пересылки необходимо изменить данные в пакете, ему необходимо сначала клонировать пакет, прежде чем назначать назначения портов. После изменения пакета и назначения портов расширение должно внедрить измененный пакет в путь данных входящего трафика.
Дополнительные сведения см. в разделе Клонирование трафика пакетов.
Примечание Если расширение клонирует пакет, полученный по пути исходящих данных, оно может внедрить новый пакет в путь исходящих данных только в том случае, если он не изменил данные пакета и сохранил исходные данные порта назначения.
Добавьте порты назначения в пакет перед перенаправлением пакета.
Примечание Расширениям пересылки разрешено добавлять порты назначения к пакетам, полученным по пути входящего трафика.
Внедрение новых или клонированных пакетов данных в путь исходящих данных.
В стандартном пути к данным NDIS не расширяемые данные OOB коммутатора часто имеют разные форматы в зависимости от того, указан ли пакет как отправка или получение. Например, NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO данных OOB представляет собой объединение структур отправки и получения.
В пути к данным расширяемого коммутатора все пакеты перемещаются через стек драйверов расширения по мере отправки и получения. Из-за этого не расширяемые данные OOB коммутатора в структуре NET_BUFFER_LIST пакета будут находиться в формате отправки или получения в течение потока через стек драйверов.
Формат данных OOB зависит от порта расширяемого коммутатора источника, из которого пакет поступил на расширяемый коммутатор. Если исходный порт подключен к внешнему сетевому адаптеру, данные OOB коммутатора, не расширяемые, будут иметь формат получения. Для других портов эти данные OOB будут иметь формат отправки.
Примечание Если расширение клонирует NET_BUFFER_LIST структуру пакета, оно должно принимать во внимание не расширяемые данные OOB коммутатора, если оно добавляет или изменяет данные OOB. Расширение должно вызвать CopyNetBufferListInfo , чтобы скопировать данные OOB, связанные с путем данных расширяемого коммутатора, из исходного пакета в клонируемый пакет. Эта функция будет поддерживать формат отправки или получения OOB при копировании данных в клонированный пакет.
Если расширение удаляет пакет из входящего пути исходящих данных, оно должно вызвать ReportFilteredNetBufferLists. При вызове этой функции расширяемый интерфейс коммутатора увеличивает счетчики и регистрирует события для удаленных или исключенных пакетов.