修改数据包的可扩展交换机源端口数据

Hyper-V 可扩展交换机源端口由 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 结构中的 SourcePortId 成员指定。 此结构包含在带外 (OOB) 数据包 NET_BUFFER_LIST 结构的转发上下文中。 有关此上下文的详细信息,请参阅 Hyper-V 可扩展交换机转发上下文

可扩展交换机扩展必须遵循以下准则来修改数据包的源端口标识符:

  • 可扩展交换机扩展必须调用 SetNetBufferListSource 才能修改数据包的源端口。 扩展不得直接修改 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 结构的 SourcePortId 成员。

  • 如果扩展正在创建或克隆数据包,则必须在调用 NdisAllocateNetBufferList 后调用 AllocateNetBufferListForwardingContext 函数。 此函数为用于转发数据包信息的 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 。 这可确保数据包不会被可扩展交换机驱动程序堆栈中的基础扩展筛选和拒绝。