Флаги отправки и получения расширяемого коммутатора 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.