標籤:
一個使用java語言編寫的基於Openflow協議的SDN控制器。
基本架構同webserver一樣,有一個維護交換器串連資訊的底層模組,當有交換器同控制器串連時,floodlight會將此串連儲存到串連池中,並通過NIO的方式同交換器進行通訊。
控制器還包含其他交換器資料包儲存處理模組,比如網路拓撲模組(計算最短通訊路徑)、鏈路發現模組(使用LLDP協議發現網路的拓撲的變化)、裝置管理模組(負責完成MAC地址同IP地址之間的映射)、儲存模組(負載儲存每台交換器的儲存狀態,比如儲存的流表項等)、RESTAPI模組(負責通過RESTAPI的形式,完成流表項的管理)、webui模組(提供一個web介面,查詢控制器狀態)。
floodlight通過配置資訊決定載入哪些模組,模組同時會註冊其會理哪些訊息。
Floodlight總體上有兩個主要功能:
- 處理交換器串連並將OpenFlow訊息轉換為事件(events)以使其他模組能夠監聽處理。比如發現交換器、鏈路失效、連接埠失效、接收到資料包等訊息。
- 決策某些特定OpenFlow訊息(例如,PacketIn, FlowRemoved, PortStatus等),並將其按順序轉寄到配置的監聽模組。然後每個模組決定是否處理此訊息並傳遞到下一個監聽者或者停止處理訊息。
能夠處理的事件訊息,需要處理OpenFlow訊息的模組實現IOFMessageListener介面。
事件中有交換器的串連資訊,可通過對交換器進行操作,同時還可通過全域方法擷取其他交換器的資訊,並對其進行操作。
總體感覺,其與webserver的模式很像。
- 有維護用戶端串連的模組,java的servlet(控制器維護交換器的串連,netty)
- 有處理用戶端請求的模組,將request和response發送到controller中(控制器將交換器的變化抽象成事件,發送給相應模組處理,模組處理時可以對交換器進行操作)
不足:目前控制器的自訂模組網路編程模式依然需要編寫大量的代碼,是一種面向電腦語言的程式便攜模式,而不是面向網路的。導致實現自訂模組的編寫工作量巨大,開發週期長,並且不易調試並發現流表項決策的錯誤。
FloodLight使用感受