透過 ONOS 來控制 bmv2 switch:簡介

其實 ONOS 早在 1.6 版開始就有支援 bmv2,但是卻是實驗性質的,且當時的 bmv2 使用的是 Thrift API(目前也還有支援),而 P4 API Working Group 將使用新版的 API P4 Runtime 取代,因此 ONOS 也將原本針對舊版 bmv2 的支援捨棄,改支援新版的 bmv2(由 1.11 開始部分支援)。

一個 SDN 控制器在支援 P4 或是可編程的硬體裝置時有幾個問題:

  • 大多數的 SDN 控制器都是基於 OpenFlow,所以控制邏輯上需要另外針對新類型的裝置去改進。
  • 同上,由於 OpenFlow 主要是使用目前有的網路協定(Ethernet, IP….),需要有另外的資料結構以及演算法去處理各式各樣由自己定義出來的網路協定格式。
  • 由於裝置可以任意更換 Pipeline 以及 Protocol,需要有辦法重複利用原本就有的應用程式而非針對不同 Pipeline 重寫(當然,如果是非常特定功能的 Pipeline 則另外考量)

基於以上原因,ONF 的 P4 Brigade 開發出了一套針對 Protocol-independent 裝置的解決方案,透過各式各樣抽象化的方式讓後續開發變得容易,下圖是針對 P4 裝置所新增的模組:

Screen Shot 2017-10-25 at 11.09.25 PM

這邊由上而下說明每一個模組的功能:

首先是在 ONOS 中會有兩種不同類型的應用程式,這兩種分別為:

  • Pipeline-agnostic application:這類型的應用程式並不會知道他即將面對的裝置所用的 Pipeline 長怎麼樣,僅會專心去做他要做的事情,舉例來說 ProxyArp 或是 LLDP provider 等等,透過 ONOS 所提供的 FlowObjective 以及 Intent API 去控制網路。
  • Pipeline-aware application:這類型的則是針對特定 Pipeline 所設計的,他會直接產生出特定的 Flow 以及 Group,並直接安裝到特定的 Table 中,例如在 ONOS 中的 pi-ecmp-fabric 應用程式便是針對 ecmp.p4 所開發,使用 FlowRule API 去控制網路。

接下來是核心層,由於需要支援各式各樣不固定的協定,P4 Brigade 開發了 Protocol Inpendent framework 這一個抽象層,提供不同的資料結構如 PiTable、PiMatchKey 等去儲存相關的資訊,也提供了轉換模組(Flow Rule Translation Service)供特定 App 進行轉換。

而在這層中,也提供了一個名為 Pipeconf 的模組,其為 Pipeline configuration 的縮寫,Pipeconf 中包含了針對特定 P4(或其他 Pipeline 定義)的資訊,像是:

  • 已編譯好的 P4 檔案(bmv2 json, Tofino bin)
  • P4 Info 檔案
  • Pipeline model(Table, Action, Header 等)
  • Interpreter(用於 FlowRule Translation service)
  • 其他針對該 Pipeline 特定的行為(behavior),例如要如何取得 PortCounter 等

在下層是 ONOS 南向中的 Driver 層,ONOS 針對不同類型的裝置提供了具有高度彈性的 Driver 層,開發者僅需針對不同裝置開發 Driver,並在 Driver 中定義好要的行為(Behavior)即可,目前針對 P4 裝置,ONOS 提供了 p4runtime、bmv2(基於 p4runtime)以及 Tofino(於 1.12 版納入) 這幾個 Driver 支援。

在未來,除了 P4 Runtime 之外,還會支援 gNMI,gNMI 主要是用於裝置管理用的協議,像是存取 Port 資訊等等。

最後,ONOS 也提供了足夠彈性的 Protocol 層,針對 P4 裝置提供了 gRPC 以及 p4runtime(基於 gRPC),透過這一層直接跟 P4 裝置進行溝通。

在〈透過 ONOS 來控制 bmv2 switch:簡介〉中有 2 則留言

  1. 不好意思 想問個問題:
    除了透過 ONOS (Network OS) 之外
    如果有支程式能夠運行 P4 Runtime API ,那麼這樣 P4 Controller 能夠在一般的 x86 machine 上面做獨立運行嗎?

    謝謝!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料