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


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

Порт-источник Hyper-V расширяемого коммутатора задается членом SourcePortId в структуре NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO. Эта структура содержится во внеполосном контексте переадресации структуры 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 для идентификатора исходного порта. Это гарантирует, что пакет не будет фильтроваться и отклоняться базовыми расширениями в расширяемом стеке драйверов коммутатора.