当我在阅读 Beacon 的一些源代码时,我被OPAction_OUTPUT
. spec1.3 说
所需操作:输出。输出动作将数据包转发到指定的 OpenFlow 端口(见 4.1)。OpenFlow 交换机必须支持转发到物理端口、交换机定义的逻辑端口和所需的保留端口(参见 4.5)。
但它混淆了两点:
首先,
The Output action forwards a *packet*
,但是这个数据包是什么意思?这是否意味着packet-out
包含输出操作的 OpenFlow?或者OpenFlow的Data 字段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 在其端口上接收到这个数据包输出时会做什么?
谢谢!