首页 文章

POX l3_learning示例

提问于
浏览
3

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

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

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

1 回答

  • 1

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

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

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

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

相关问题