OpenFlow Action OUTPUT有什么作用?

时间:2013-10-17 03:07:43

标签: network-protocols

当我阅读Beacon的一些源代码时,我对OPAction_OUTPUT感到困惑。 spec1.3说

  

必需的操作:输出。输出操作将数据包转发到   指定的OpenFlow端口(见4.1)。 OpenFlow交换机必须支持   转发到物理端口,交换机定义的逻辑端口和   所需的保留端口(见4.5)。

但它有两点混淆:

  • 首先,The Output action forwards a *packet*,但这个数据包意味着什么?这是否意味着包含输出操作的OpenFlow packet-out?或者包含在OpenFlow packet-out数据字段中的数据包。

  • 第二,下一步是什么?当OpenFlow Switch收到包含OUTPUT动作的数据包时会做什么?

让我举个例子:当OFcontroller收到数据包时,控制器会(L2交换机):

 if dst in self.mac_to_port[dpid]:
     out_port = self.mac_to_port[dpid][dst]
 else:
     out_port = ofproto.OFPP_FLOOD
 actions = [datapath.ofproto_parser.OFPActionOutput(out_port)]
 out = datapath.ofproto_parser.OFPPacketOut(
     datapath=datapath, buffer_id=msg.buffer_id, in_port=msg.in_port,
     actions=actions)
 datapath.send_msg(out) // send out the PacketOut containing output action

所以,问题是:

  • 此数据包输出中的操作OUTPUT输出了
  • OFSwitch在端口收到此数据包时会做什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

邮件列表OpenFlow-spec回答了这个问题。为了完成问题并帮助他人,我在这里发布。归功于西蒙。

来自Simon Horman:

  

OpenFlow Packet-Out消息,如此解释,将是   通过交换机和控制器之间的OpenFlow通道接收。   通道的流量不会通过OpenFlow管道运行   (OF1.3.2第6.3.1节)。

     

因此,它将包含在数据字段中   由输出操作处理的Packet-Out消息。这个领域   将由交换机转发到OpenFlow管道   通过频道接收Packet-Out消息。

     

如果Packet-Out消息是通过一个频道发送的,那么它就是   由交换机解码,数据字段将被转发到   OpenFlow pipleline如上所述。

     

如果Packet-Out消息不是通过频道发送,而是仅发送   恰好是包含看起来像Packet-Out的数据的数据包   然后它将由OpenFlow管道直接处理   没有任何特殊处理。