2015-06-26 53 views
3

我在學習POX控制器中的forwarding.l3_learning示例。
在到期處理程序中,如果緩衝區中的數據包的時間已過期,則會從控制器中刪除 。
後來控制器指示開關在這些行丟棄分組:POX l3_learning示例

po = of.ofp_packet_out(buffer_id = buffer_id, in_port = in_port) 
core.openflow.sendToDPID(dpid, po) 

我沒有看到所創建的消息以切換在這樣的特定指令。 我不明白交換機如何知道它應該丟棄數據包。

回答

1

這是一個沒有任何操作的PACKET_OUT消息。由於沒有動作,交換機只丟棄數據包。如果您希望交換機再次應用匹配(例如當數據包從網絡進入時),您需要明確將操作設置爲output:OFPP_TABLE

這在OpenFlow規範中沒有明確說明,但所有交換機實現都是這樣工作的(例如參見here)。

這之所以沒有行動,在一切完成後發送PACKET_OUT是因爲開關保持存儲在其緩衝器中的分組(在由buffer_id指定的插槽),直到控制器告訴交換機如何處理它。隨着時間的推移,如果控制器從不對數據包做任何事情,這些緩衝區將會填滿,因此通過將它們明確地發送出去而不執行任何操作,緩衝區將被釋放。

如果交換機中的所有緩衝區都已滿,則會在PACKET_IN消息內將數據包(而不是buffer_id)發送到控制器,從而降低性能。