Изменение данных порта источника расширяемого коммутатора пакета

Порт источника расширяемого коммутатора Hyper-V задается элементом SourcePortId в структуре NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO . Эта структура содержится в контексте внеполосной пересылки (OOB) структуры NET_BUFFER_LIST пакета. Дополнительные сведения об этом контексте см. в разделе Контекст переадресации расширяемого коммутатора Hyper-V.

Расширение расширяемого коммутатора должно соответствовать следующим рекомендациям по изменению идентификатора исходного порта пакета:

  • Расширение расширяемого коммутатора должно вызвать SetNetBufferListSource , чтобы изменить исходный порт для пакета. Расширение не должно напрямую изменять элемент SourcePortIdструктуры NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO .

  • Если расширение создает или клонирует пакет, оно должно вызывать функцию AllocateNetBufferListForwardingContext после вызова NdisAllocateNetBufferList. Эта функция выделяет расширяемую область контекста коммутатора для данных OOB, которая используется для пересылки сведений для пакета.

    Когда расширение вызывает AllocateNetBufferListForwardingContext, члену SourcePortId присваивается значение NDIS_SWITCH_DEFAULT_PORT_ID. Это означает, что пакет поступил из расширения, а не на порт расширяемого коммутатора.

    Пакеты с исходным портом NDIS_SWITCH_DEFAULT_PORT_ID обрабатываются путем к данным расширения расширяемого коммутатора как привилегированные и доверенные. Такой трафик не должен подвергаться политикам, применяемым к пакетам из других исходных портов. Например, пакеты с идентификатором исходного порта NDIS_SWITCH_DEFAULT_PORT_ID обходить встроенные политики расширяемого коммутатора, применяемые базовым краем мини-порта расширяемого коммутатора. К этим политикам относятся списки управления доступом (ACL) и качество обслуживания (QoS).

    Когда расширение создает трафик пакетов, оно должно использовать исходный порт NDIS_SWITCH_DEFAULT_PORT_ID экономно и осторожно. В большинстве случаев расширение должно изменить идентификатор исходного порта на активный порт расширяемого коммутатора. Это позволяет применять политики этого порта к пакету.

    Однако в некоторых ситуациях расширение должно использовать исходный порт NDIS_SWITCH_DEFAULT_PORT_ID для пакетов, которые оно отправляет. Например, если расширение является источником пакета управления, который должен быть отправлен в место назначения в физической или виртуальной сети, оно должно использовать NDIS_SWITCH_DEFAULT_PORT_ID для идентификатора исходного порта. Это гарантирует, что пакет не будет отфильтрован и отклонен базовыми расширениями в стеке драйверов расширяемого коммутатора.