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


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

В этом разделе описывается, как 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 для внедрения пакета в входящий путь передачи данных, должно задать параметр Флаги с соответствующими настройками флагов расширяемого коммутатора. Дополнительные сведения об этих параметрах флагов см. в Hyper-V флагах отправки и получения для расширяемого коммутатора.

  • Когда NDIS вызывает функцию FilterSendNetBufferListsComplete для завершения запроса на отправку нового пакета, расширение должно вызвать FreeNetBufferListForwardingContext, чтобы освободить выделенный контекст пересылки. Расширение должно сделать это, прежде чем освободить или повторно использовать NET_BUFFER_LIST структуру пакета.

Дополнительные сведения о входящем и исходящем путях данных расширяемого коммутатора см. в Hyper-V Extensible Switch Data Path.