POX l3?学习考试

2024-06-16 13:01:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从POX控制器中的forwarding.l3_学习示例中学习。
在过期处理程序中,如果缓冲区中的数据包时间已过期,则 已从控制器中删除。
随后,控制器指示交换机丢弃这些行中的数据包:

po = of.ofp_packet_out(buffer_id = buffer_id, in_port = in_port)
core.openflow.sendToDPID(dpid, po)

我在创建的要切换的消息中没有看到这样具体的说明。 我不明白交换机怎么知道应该丢弃数据包。在


Tags: inid处理程序示例portbuffer时间控制器
1条回答
网友
1楼 · 发布于 2024-06-16 13:01:59

这是一条没有操作的PACKET_OUT消息。由于没有动作,交换机只会丢弃数据包。如果您希望交换机再次应用匹配(比如当数据包从网络传入时),您需要显式地将操作设置为output:OFPP_TABLE。在

这在OpenFlow规范中并没有明确说明,但是所有的开关实现都是这样工作的(例如,请参见here)。在

发送PACKET_OUT而不执行任何操作的原因是交换机将数据包保存在其缓冲区中(在buffer_id指定的插槽中),直到控制器告诉交换机该如何处理它。随着时间的推移,如果控制器从不对数据包做任何处理,这些缓冲区就会被填满,所以通过显式地不执行任何操作地发送它们,缓冲区就会被释放。在

如果交换机中的所有缓冲区都已满,则包(而不仅仅是buffer_id)将在PACKET_IN消息中发送给控制器,这会降低性能。在

相关问题 更多 >