2

当我在阅读 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 在其端口上接收到这个数据包输出时会做什么?

谢谢!

4

1 回答 1

3

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

从西蒙霍曼:

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

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

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

如果 Packet-Out 消息不是通过通道发送的,而是恰好是一个包含看起来像 Packet-Out 消息的数据的数据包,那么它将由 OpenFlow 管道直接处理,无需任何特殊处理。

于 2013-10-18T05:57:21.030 回答