2024-06-16 13:01:59 发布
网友
我试图从POX控制器中的forwarding.l3_学习示例中学习。 在过期处理程序中,如果缓冲区中的数据包时间已过期,则 已从控制器中删除。 随后,控制器指示交换机丢弃这些行中的数据包:
po = of.ofp_packet_out(buffer_id = buffer_id, in_port = in_port) core.openflow.sendToDPID(dpid, po)
我在创建的要切换的消息中没有看到这样具体的说明。 我不明白交换机怎么知道应该丢弃数据包。在
这是一条没有操作的PACKET_OUT消息。由于没有动作,交换机只会丢弃数据包。如果您希望交换机再次应用匹配(比如当数据包从网络传入时),您需要显式地将操作设置为output:OFPP_TABLE。在
PACKET_OUT
output:OFPP_TABLE
这在OpenFlow规范中并没有明确说明,但是所有的开关实现都是这样工作的(例如,请参见here)。在
发送PACKET_OUT而不执行任何操作的原因是交换机将数据包保存在其缓冲区中(在buffer_id指定的插槽中),直到控制器告诉交换机该如何处理它。随着时间的推移,如果控制器从不对数据包做任何处理,这些缓冲区就会被填满,所以通过显式地不执行任何操作地发送它们,缓冲区就会被释放。在
buffer_id
如果交换机中的所有缓冲区都已满,则包(而不仅仅是buffer_id)将在PACKET_IN消息中发送给控制器,这会降低性能。在
PACKET_IN
这是一条没有操作的
PACKET_OUT
消息。由于没有动作,交换机只会丢弃数据包。如果您希望交换机再次应用匹配(比如当数据包从网络传入时),您需要显式地将操作设置为output:OFPP_TABLE
。在这在OpenFlow规范中并没有明确说明,但是所有的开关实现都是这样工作的(例如,请参见here)。在
发送
PACKET_OUT
而不执行任何操作的原因是交换机将数据包保存在其缓冲区中(在buffer_id
指定的插槽中),直到控制器告诉交换机该如何处理它。随着时间的推移,如果控制器从不对数据包做任何处理,这些缓冲区就会被填满,所以通过显式地不执行任何操作地发送它们,缓冲区就会被释放。在如果交换机中的所有缓冲区都已满,则包(而不仅仅是
buffer_id
)将在PACKET_IN
消息中发送给控制器,这会降低性能。在相关问题 更多 >
编程相关推荐