2013-10-17 51 views
2

當我閱讀Beacon的一些源代碼時,我對OPAction_OUTPUT感到困惑。 spec1.3表示OpenFlow Action OUTPUT是做什麼的?

必需操作:輸出。輸出操作會將數據包轉發到指定的OpenFlow端口(參見4.1) 。 OpenFlow交換機必須支持 轉發到物理端口,交換機定義的邏輯端口和 必需的保留端口(見4.5)。

但在兩點迷惑:

  • 第一,The Output action forwards a *packet*,但是這個包是什麼意思?這是否意味着包含輸出操作的OpenFlow packet-out?或者包含在OpenFlow packet-out數據字段中的數據包。

  • 二,下一步是什麼?當OpenFlow交換機收到包含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在其端口收到此封包時會做什麼?

謝謝!

回答

2

郵件列表OpenFlow-spec回答了這個問題。爲了完成這個問題並幫助他人,我在這裏發佈。信貸給西蒙。

從西蒙Horman:

的開放流分組缺貨消息,該消息將被解釋爲這樣的,將接收在所述開關與控制器之間開放流信道 。 通道的流量不通過OpenFlow管道 (OF1.3.2第6.3.1節)。

因此,它將是包含在由輸出操作處理的 分組輸出消息的數據字段中的分組。在 通過信道接收到分組輸出消息之後,該字段 將由交換機轉發到OpenFlow管線。

如果通過信道發送分組輸出消息,則它將由交換機解碼,並且數據字段將被轉發到如上所述的 開放流管線。

如果通過一個通道沒有發送數據包,出消息,而是隻 恰好包含看起來像一個分組輸出 消息,那麼它會直接開放流管道 沒有任何處理的數據包特殊處理。

+0

你應該標記你的答案是正確的。 :) –