POX l3_learning示例

时间:2015-06-26 07:39:28

标签: python openflow pox

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

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

我没有在创建的消息中看到这样的特定指令要切换。 我不明白交换机如何知道它应该丢弃数据包。

1 个答案:

答案 0 :(得分:1)

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

OpenFlow规范中并未明确说明,但所有交换机实现都以这种方式工作(例如,请参阅here)。

完全没有动作发送PACKET_OUT的原因是因为交换机将数据包保存在缓冲区中(在buffer_id指定的插槽中)直到控制器告诉交换机什么与它有关。随着时间的推移,如果控制器从不对数据包执行任何操作,这些缓冲区将会填满,因此通过显式发送它们而不执行任何操作,缓冲区将被释放。

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