2

Beacon のソース コードを読んでいるときに、OPAction_OUTPUT. spec1.3は言った

必要なアクション: 出力。Output アクションは、指定された OpenFlow ポートにパケットを転送します (4.1 を参照)。OpenFlow スイッチは、物理ポート、スイッチ定義の論理ポート、および必要な予約済みポートへの転送をサポートする必要があります (4.5 を参照)。

しかし、次の 2 つの点で混乱しています。

  • 最初にThe Output action forwards a *packet*、しかし、このパケットは何を意味するのでしょうか? packet-outOutput Action を含むOpenFlow ということですか?またはOpenFlowのData フィールドに含まれるパケットpacket-out

  • 第二に、次は何ですか?OUTPUTアクションを含むパケットアウトを取得した場合、OpenFlow スイッチは何をしますか?

例を挙げましょう: 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 がそのポートでこのパケットアウトを受信すると、OFSwitch は何をしますか?

ありがとう!

4

1 に答える 1

3

メーリングリストOpenFlow-specが質問に答えました。質問を完成させて他の人を助けるために、ここに投稿します。クレジットはサイモンに行きます。

サイモン・ホーマン より:

そのように解釈される OpenFlow Packet-Out メッセージは、スイッチとコントローラ間の OpenFlow チャネルを介して受信されます。チャネルのトラフィックは OpenFlow パイプラインを通過しません (OF1.3.2 セクション 6.3.1)。

したがって、Output アクションによって処理されるのは、Packet-Out メッセージのデータ フィールドに含まれるパケットです。このフィールドは、チャネル経由で Packet-Out メッセージを受信した後、スイッチによって OpenFlow パイプラインに転送されます。

Packet-Out メッセージがチャネル経由で送信される場合、スイッチによってデコードされ、データ フィールドが上記のように OpenFlow パイプラインに転送されます。

Packet-Out メッセージがチャネル経由で送信されたのではなく、たまたま Packet-Out メッセージのように見えるデータを含むパケットである場合、それは特別な処理なしで OpenFlow パイプラインによって直接処理されます。

于 2013-10-18T05:57:21.030 に答える