Исходный трафик пакетов
В этом разделе описывается, как расширения Hyper-V инициируют новые пакеты и внедряют их в путь к данным расширяемого коммутатора.
Примечание На этой странице предполагается, что вы знакомы со сведениями и схемами в статье Обзор расширяемого коммутатора Hyper-V и гибридной пересылки.
Примечание В интерфейсе расширяемого коммутатора драйверы фильтров NDIS называются расширениями расширяемых коммутаторов , а стек драйверов называется стеком драйверов расширяемого коммутатора. Дополнительные сведения о расширениях см. в разделе Расширения расширяемого коммутатора Hyper-V.
Расширения расширяемого коммутатора могут внедрять новые пакеты только в путь данных входящего трафика расширяемого коммутатора. Это гарантирует, что расширяемый интерфейс коммутатора сможет правильно фильтровать и пересылать эти пакеты. Расширения должны соответствовать следующим рекомендациям для внедрения новых пакетов в путь данных входящего трафика:
Сначала расширение должно выделить структуру NET_BUFFER_LIST для нового пакета.
После того как расширение выделяет структуру NET_BUFFER_LIST для нового пакета, оно должно вызвать функцию обработчика AllocateNetBufferListForwardingContext для выделения контекста переадресации расширяемого коммутатора для пакета.
Контекст переадресации находится в данных внеполосного подключения (OOB) пакета. Он содержит сведения о переадресации для пакета, такие как его исходный порт и массив из одного или нескольких портов назначения.
Дополнительные сведения о контексте переадресации см. в разделе Контекст переадресации расширяемого коммутатора Hyper-V.
После того как расширение вызовет AllocateNetBufferListForwardingContext, для исходного порта пакета будет задано значение NDIS_SWITCH_DEFAULT_PORT_ID. Пакет с идентификатором исходного порта NDIS_SWITCH_DEFAULT_PORT_ID является доверенным и обходит расширяемые политики портов коммутатора, такие как списки управления доступом (ACL) и качество обслуживания (QoS).
Расширение может захотеть, чтобы пакет обрабатывался так, как если бы он поступил из определенного порта. Это позволяет применять политики для этого порта к пакету. Расширение вызывает SetNetBufferListSource , чтобы изменить исходный порт для пакета.
Однако могут возникнуть ситуации, когда расширению может потребоваться назначить идентификатор исходного порта пакета NDIS_SWITCH_DEFAULT_PORT_ID. Например, расширению может потребоваться задать идентификатор исходного порта для NDIS_SWITCH_DEFAULT_PORT_ID для собственных пакетов управления, которые отправляются на устройство во внешней сети.
Если расширение переадресации отправляет новый пакет по пути данных входящего трафика, оно должно определить порты назначения для пакета. Дополнительные сведения об этой процедуре см. в статье Добавление данных порта назначения расширяемого коммутатора в пакет.
Примечание Расширение записи или фильтрации не может добавить новые порты назначения в новый пакет.
Когда расширение создает новый пакет, данные пакета находятся в локальной или доверенной памяти в родительской операционной системе родительского раздела Hyper-V. Эта память недоступна дочерней секции. Таким образом, гостевая операционная система, работающая в этом разделе, считается "безопасной" от несинхронизированных обновлений.
Расширение должно получить NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO объединение для нового пакета с помощью макроса NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL . Расширение должно задать для члена IsPacketDataSafe значение TRUE. Это означает, что все данные пакета находятся в доверенной памяти.
Когда расширение вызывает NdisFSendNetBufferLists для внедрения пакета в путь к данным входящего трафика, оно должно задать параметр Flags с соответствующими параметрами флага расширяемого коммутатора. Дополнительные сведения об этих параметрах флагов см. в разделе Флаги отправки и получения расширяемого коммутатора Hyper-V.
Когда NDIS вызывает функцию FilterSendNetBufferListsComplete расширения для выполнения запроса на отправку нового пакета, расширение должно вызвать FreeNetBufferListForwardingContext , чтобы освободить выделенный контекст пересылки. Расширение должно сделать это, прежде чем освобождает или повторно использует структуру NET_BUFFER_LIST для пакета.
Дополнительные сведения о путях данных для входящего и исходящего трафика расширяемого коммутатора см. в разделе Путь к данным расширяемого коммутатора Hyper-V.