Управление контекстом переадресации расширяемого коммутатора Hyper-V
Примечание На этой странице предполагается, что вы знакомы со сведениями и схемами в статье Обзор расширяемого коммутатора Hyper-V и гибридной пересылки.
Структура NET_BUFFER_LIST для каждого пакета, который проходит по пути данных расширяемого коммутатора Hyper-V, содержит данные вне диапазона (OOB). Эти данные указывают исходный порт, из которого поступил пакет, а также один или несколько портов назначения для доставки пакетов. Эти данные OOB называются контекстом переадресации расширяемого коммутатора.
Примечание Контекст переадресации расширяемого коммутатора отличается от NET_BUFFER_LIST_CONTEXT структуры. Это позволяет расширениям выделять собственные структуры контекста, не затрагивая контекст переадресации.
Контекст переадресации расширяемого коммутатора выделяется и освобождается следующим образом:
Когда пакет поступает на расширяемый коммутатор из сетевого адаптера, интерфейс расширяемого коммутатора выделяет контекст переадресации и связывает его со структурой NET_BUFFER_LIST пакета.
Когда пакет доставляется на порты назначения, интерфейс освобождает контекст пересылки из структуры NET_BUFFER_LIST пакета.
Если расширение расширяемого коммутатора внедряет новый или клонируемый пакет в путь к данным расширяемого коммутатора, оно должно выделить контекст переадресации перед вызовом NdisFSendNetBufferLists.
После того как расширение выделяет структуру NET_BUFFER_LIST для нового или клонированного пакета, оно должно вызвать функцию AllocateNetBufferListForwardingContext , чтобы выделить контекст пересылки для пакета. После завершения запроса на отправку пакета расширение должно вызвать FreeNetBufferListForwardingContext , прежде чем освободить или повторно использовать структуру NET_BUFFER_LIST .
Примечание Когда расширение вызывает AllocateNetBufferListForwardingContext, для исходного порта пакета устанавливается значение NDIS_SWITCH_DEFAULT_PORT_ID. Это означает, что пакет поступил из расширения, а не на порт расширяемого коммутатора. При определенных условиях расширению может потребоваться изменить исходный порт для пакета. Дополнительные сведения см. в статье Изменение данных порта источника расширяемого коммутатора пакета.
Дополнительные сведения см. в статье Операции отправки и получения расширяемого коммутатора Hyper-V.
Все расширения расширяемого коммутатора могут вызывать следующие функции обработчика расширяемого коммутатора для доступа к данным в контексте переадресации пакета:
AllocateNetBufferListForwardingContext
Выделяет контекст переадресации расширяемого коммутатора и подготавливает структуру NET_BUFFER_LIST для операций отправки или получения в расширяемом коммутаторе.
CopyNetBufferListInfo
Копирует контекст пересылки из структуры NET_BUFFER_LIST исходного пакета в структуру NET_BUFFER_LIST конечного пакета. Эти данные включают в себя порт источника расширяемого коммутатора и сведения о сетевом адаптере. Сведения о портах назначения расширяемого коммутатора также можно скопировать в пакет назначения.
FreeNetBufferListForwardingContext
Освобождает ресурсы в контексте переадресации расширяемого коммутатора структуры NET_BUFFER_LIST . Эти данные использовались для операций отправки и получения в расширяемом коммутаторе Hyper-V и ранее были выделены путем вызова функции AllocateNetBufferListForwardingContext .
GetNetBufferListDestinations
Возвращает порты назначения из контекста переадресации структуры NET_BUFFER_LIST пакета.
Расширение переадресации отвечает за добавление портов назначения для пакета, если пакет не является пакетом NVGRE. (Дополнительные сведения см. в разделе Гибридная пересылка.) Расширение вызывает следующие функции обработчика расширяемого коммутатора для добавления или обновления портов назначения в контексте переадресации пакета:
AddNetBufferListDestination
Добавляет одно назначение в область контекста переадресации расширяемого коммутатора для пакета, указанного в структуре NET_BUFFER_LIST .
Примечание Этот вызов фиксирует изменение в области контекста переадресации. В этом случае расширению переадресации не нужно вызывать UpdateNetBufferListDestinations.
GrowNetBufferListDestinations
Увеличивает размер массива портов назначения в области контекста пересылки структуры NET_BUFFER_LIST пакета.
UpdateNetBufferListDestinations
Фиксирует изменения, внесенные расширением в один или несколько портов назначения расширяемого коммутатора пакета. Эта функция обновляет контекст пересылки NET_BUFFER_LIST структуры пакета с помощью этих изменений.
Примечание После того как расширение переадресации зафиксирует изменения портов назначения в контексте переадресации, конечные порты нельзя удалить, и можно изменить только элемент IsExcludedструктуры NDIS_SWITCH_PORT_DESTINATION порта назначения. Дополнительные сведения см. в разделе Исключение доставки пакетов в порты назначения расширяемого коммутатора.
Связанные темы
Контекст переадресации расширяемого коммутатора Hyper-V
Типы данных контекста переадресации расширяемого коммутатора Hyper-V