我正在尝试从POX控制器中的forwarding.l3_learning示例中学习。
在过期处理程序中,如果数据包在缓冲区中的时间过期,则从控制器中删除。
稍后,控制器指示交换机将数据包丢弃在以下行中:
po = of.ofp_packet_out(buffer_id = buffer_id, in_port = in_port)
core.openflow.sendToDPID(dpid, po)在创建的要切换的消息中,我没有看到这样的特定指令。我不明白交换机怎么知道它应该丢包。
发布于 2015-07-08 17:33:18
这是一条没有操作的PACKET_OUT消息。由于没有动作,交换机只会丢弃数据包。如果希望交换机再次应用匹配(比如数据包从网络中传入时),则需要显式地将操作设置为output:OFPP_TABLE。
这一点在OpenFlow规范中并没有明确说明,但是所有的开关实现都是这样工作的(例如,参见这里)。
发送没有操作的PACKET_OUT的原因是交换机将数据包保存在缓冲区中(位于buffer_id指定的时隙),直到控制器告诉交换机该如何处理它。随着时间的推移,如果控制器从来不对数据包做任何事情,这些缓冲区将被填满,因此,通过显式地将它们发送出去而不执行任何操作,缓冲区将被释放。
如果交换机中的所有缓冲区都已满,则将数据包(而不是仅buffer_id)发送到PACKET_IN消息中,这会降低控制器的性能。
https://stackoverflow.com/questions/31067661
复制相似问题