Hyper-V 可扩展交换机的源端口由 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 结构中的 SourcePortId 成员指定。 此结构包含在数据包 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 用于源端口标识符。 这可确保扩展交换机驱动程序堆栈中的基础扩展不会筛选和拒绝数据包。