3

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

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

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

4

1 回答 1

1

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

这在 OpenFlow 规范中并没有真正明确说明,但所有交换机实现都以这种方式工作(例如,请参见此处)。

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

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

于 2015-07-08T17:33:18.053 回答