可扩展交换机数据路径的数据包管理指导原则
本主题介绍 Hyper-V 可扩展交换机扩展在管理在可扩展交换机数据路径上获取的数据包时必须遵循的准则。
注意 在可扩展交换机接口中,NDIS 筛选器驱动程序称为 可扩展交换机扩展 ,驱动程序堆栈称为 可扩展交换机驱动程序堆栈。 有关扩展的详细信息,请参阅 Hyper-V 可扩展交换机扩展。
注意 本页假定你熟悉 Hyper-V 可扩展交换机 和 混合转发概述中的信息和关系图。
扩展必须遵循以下准则进行可扩展交换机数据路径中的数据包管理:
源自数据包的扩展必须调用 NdisFSendNetBufferLists ,以在入口数据路径上启动发送请求。 必须以这种方式执行此操作,以便通过可扩展交换机正确转发数据包。
捕获扩展可以监视可扩展交换机入口和出口数据路径上的数据包。 但是,这种类型的扩展必须始终转发数据包,并且不得删除数据包。 此外,捕获扩展在转发数据包之前不得修改数据包数据。
在可扩展交换机入口数据路径上,筛选和转发扩展可以执行以下操作:
筛选扩展可以筛选数据包流量,并仅强制实施自定义端口或交换机策略,以便通过可扩展交换机传递数据包。 当扩展筛选入口数据路径中的数据包时,它只能基于源端口和源自数据包的网络适配器连接应用筛选规则。 此信息存储在数据包 NET_BUFFER_LIST 结构的 OOB 数据中,可以使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏获取。
注意 在入口数据路径上获取的数据包不包含目标端口。 基于目标端口筛选数据包只能在出口数据路径上获取的数据包上完成。
转发扩展可以筛选数据包流量,并强制实施自定义和标准端口或交换机策略,以便通过可扩展交换机传递数据包。 当转发扩展筛选入口数据路径中的数据包时,它会根据源端口以及转发扩展分配给数据包的目标端口应用筛选规则。
在可扩展交换机出口数据路径上,筛选和转发扩展可以执行以下操作:
筛选扩展可以筛选数据包流量,并仅强制实施自定义端口或交换机策略,以便通过可扩展交换机传递数据包。 当筛选扩展筛选出口数据路径中的数据包时,它只能基于数据包的目标端口应用筛选规则。
目标端口数据存储在数据包 NET_BUFFER_LIST 结构的 OOB 数据中。 扩展通过调用 GetNetBufferListDestinations 函数获取此信息。
转发扩展可以筛选数据包流量,并强制实施自定义和标准端口或交换机策略,以便通过可扩展交换机传递数据包。 当转发扩展筛选出口数据路径中的数据包时,它可以基于数据包的源或目标端口应用筛选规则。
根据对数据包强制执行的策略,筛选或转发扩展可以排除数据包传递到一个或多个目标。 有关此过程的详细信息,请参阅 排除到可扩展交换机目标端口的数据包传递。
根据对数据包强制执行的策略,转发扩展可以排除将数据包传送到一个或多个目标。 有关详细信息,请参阅 混合转发。
在可扩展交换机出口数据路径上,筛选和转发扩展不得执行以下操作:
在转发出口数据路径上的数据包之前,请修改数据包数据。
如果筛选扩展需要修改数据包中的数据,则必须首先克隆数据包,而不保留端口目标。 然后,扩展必须将修改后的数据包注入入口数据路径。 这允许基础扩展对修改后的数据包强制实施策略,转发扩展可以添加端口目标。
如果转发扩展需要修改数据包中的数据,则必须先克隆数据包,然后才能分配端口目标。 修改数据包并分配端口目标后,扩展必须将修改后的数据包注入入口数据路径。
有关详细信息,请参阅 克隆数据包流量。
注意 如果扩展克隆在出口数据路径上获取的数据包,则仅当它未更改数据包数据并保留原始目标端口数据时,它才能将新数据包注入出口数据路径。
在转发数据包之前,将目标端口添加到数据包。
注意 允许转发扩展将目标端口添加到在入口数据路径上获取的数据包。
将新的或克隆的数据包注入出口数据路径。
在标准 NDIS 数据路径中,非可扩展交换机 OOB 数据通常具有不同的格式,具体取决于数据包是被指示为发送还是接收。 例如, NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO OOB 数据是特定于发送和接收的结构的联合。
在可扩展的交换机数据路径中,所有数据包在发送和接收时都通过扩展驱动程序堆栈移动。 因此,数据包 NET_BUFFER_LIST 结构中的非可扩展交换机 OOB 数据将在通过驱动程序堆栈的流持续时间内采用发送或接收格式。
此 OOB 数据的格式取决于数据包从中到达可扩展交换机的源可扩展交换机端口。 如果源端口连接到外部网络适配器,则非可扩展交换机 OOB 数据将采用接收格式。 对于其他端口,此 OOB 数据将采用发送格式。
注意 如果扩展克隆数据包 的NET_BUFFER_LIST 结构,则必须在添加或修改 OOB 数据时考虑非可扩展交换机 OOB 数据。 该扩展必须调用 CopyNetBufferListInfo ,才能将与可扩展交换机数据路径关联的 OOB 数据从源数据包复制到克隆数据包。 将数据复制到克隆的数据包时,此函数将保持 OOB 发送或接收格式。
如果扩展从出口数据路径的入口中删除数据包,则必须调用 ReportFilteredNetBufferLists。 调用此函数时,可扩展交换机接口会递增计数器,并记录已删除或排除的数据包的事件。