当我阅读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
输出了。谢谢!
答案 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管道直接处理 没有任何特殊处理。