Флаги отправки и получения расширяемого коммутатора Hyper-V

Примечание На этой странице предполагается, что вы знакомы со сведениями и схемами в статье Обзор расширяемого коммутатора Hyper-V и гибридной пересылки.

Трафик пакетов, перемещающийся по пути данных расширяемого коммутатора Hyper-V, получается расширениями следующим образом:

  • Расширение получает пакет из пути данных входящего трафика при вызове его функции FilterSendNetBufferLists . Расширение перенаправляет пакет базовым расширениям по пути данных входящего трафика, вызывая NdisFSendNetBufferLists. Расширения фильтрации и пересылки также могут удалять пакет из пути данных входящего трафика путем вызова NdisFSendNetBufferListsComplete.

  • Расширение получает пакет из пути данных исходящего трафика при вызове его функции FilterReceiveNetBufferLists . Расширение перенаправит пакет в сверхрасположенные расширения по пути исходящих данных, вызывая NdisFIndicateReceiveNetBufferLists. Расширения фильтрации и пересылки также могут удалять пакет из пути исходящих данных путем вызова NdisFReturnNetBufferLists.

В параметре SendFlags объекта FilterSendNetBufferLists или NdisFSendNetBufferLists можно задать следующие флаги:

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE
Если этот флаг установлен, все пакеты в связанном списке NET_BUFFER_LIST структур поступили из одного порта источника расширяемого коммутатора Hyper-V.

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

Примечание Если каждый пакет в связанном списке NET_BUFFER_LIST структур использует один и тот же исходный порт, расширение должно установить флаг NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE в параметре SendCompleteFlagsобъекта NdisFSendNetBufferListsComplete при выполнении запроса на отправку.

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP
Если этот флаг установлен, все пакеты в связанном списке NET_BUFFER_LIST структур будут перенаправляются на один и тот же порт назначения расширяемого коммутатора.

Расширение переадресации может использовать этот флаг для связанного списка NET_BUFFER_LIST структур, которые он перенаправит по пути данных входящего трафика после определения портов назначения каждого пакета. Этот флаг используется и удаляется базовым краем минипорта расширяемого коммутатора, прежде чем он перенаправит пакеты по пути исходящих данных.

При записи и фильтрации расширений нельзя использовать этот флаг.

Примечание Расширение переадресации определяет только порты назначения пакета для пакетов, не относящихся к NVGRE. Если пакет является пакетом NVGRE, компонент виртуализации сети Hyper-V (HNV) определяет порты назначения пакета и пересылает пакет. Дополнительные сведения см. в разделе Гибридная пересылка.

Для обеспечения оптимальной производительности расширения переадресации должны устанавливать этот флаг, если все пакеты в связанном списке должны быть переадресованы на один и тот же порт назначения. Устанавливая этот флаг, расширение подтверждает, что все пакеты в связанном списке имеют одинаковые элементы порта назначения в контексте переадресации расширяемого коммутатора.

Примечание Расширение пересылки не должно устанавливать этот флаг для связанного списка пакетов с несколькими портами назначения.

В параметре ReceiveFlags объекта FilterReceiveNetBufferLists или NdisFIndicateReceiveNetBufferLists можно задать следующие флаги:

NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE
Если этот флаг установлен, все пакеты в связанном списке NET_BUFFER_LIST структур поступили из одного порта источника расширяемого коммутатора Hyper-V.

Когда NDIS вызывает FilterReceiveNetBufferLists, он устанавливает этот флаг, если расширяемый коммутатор сгруппировал несколько пакетов из одного исходного порта. Для обеспечения максимальной производительности расширения должны сохранять такое группирование и устанавливать этот флаг при вызове NdisMIndicateReceiveNetBufferLists. Расширения также должны добавлять все исходные или клонированные пакеты в связанный список NET_BUFFER_LIST структур, если пакет имеет тот же исходный порт, что и другие пакеты в списке.

Примечание Если каждый пакет в связанном списке NET_BUFFER_LIST структур использует один и тот же исходный порт, расширение должно установить флаг NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE в параметре ReturnFlagsобъекта FilterReturnNetBufferLists по завершении запроса на получение. Расширение должно установить этот флаг в параметре ReturnFlags , если оно вызывает NdisFReturnNetBufferLists для возврата пакетов, которые не были получены или клонироваться.

NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP
Если этот флаг установлен, все пакеты в связанном списке NET_BUFFER_LIST структур будут перенаправляются на один и тот же порт назначения расширяемого коммутатора.

Когда NDIS вызывает FilterReceiveNetBufferLists, он устанавливает этот флаг, если расширяемый коммутатор сгруппировал несколько пакетов с одинаковыми портами назначения. Для обеспечения максимальной производительности расширения должны сохранять такое группирование и устанавливать этот флаг при вызове NdisMIndicateReceiveNetBufferLists. Расширения также должны добавлять все исходные или клонированные пакеты в связанный список NET_BUFFER_LIST структур, если пакет имеет те же порты назначения, что и другие пакеты в списке.

Примечание Когда расширение вызывает NdisFIndicateReceiveNetBufferLists, оно не должно задавать флаг NDIS_RECEIVE_FLAGS_RESOURCES в параметре ReceiveFlags . Интерфейс расширяемого коммутатора игнорирует этот флаг и завершит индикацию получения путем вызова FilterReturnNetBufferLists.