Поделиться через


Исходный трафик пакетов

В этом разделе описывается, как расширения 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.