POX l3_learning 示例

POX l3_learning example

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

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

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

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

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

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

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