v1model 是廠商提供 Architecture 的一種,其中P4主要定義了 Data Plane的資料流,包含解封裝、封裝、checksum計算、表格查找及對應的動作。
Bmv2 (Behavior Model Version 2)是 P4 提供的簡易軟體交換器(Simple switch)範例。
對於解封裝的函式定義而言,對於參數要清楚定義是否只有進入,還是有進有出。
當封包解封裝完成後,會開始table lookup的動作,若有Match則執行對應的action ID,若沒有Match則執行預設的Action ID。
在此過程中,控制平面會動態的來更改Table 的Entries。
當決定好Action ID後,搭配解封裝過來的Header、Table傳過來的Action Data(無方向性)、Data plane傳來的參數(有方向性),就可以執行這些Action。
最後再經過封裝後將封包傳出去。
這裡詳細描述了表格Key、Action、Action Data 的例子。
資料層負責的行為包括,定義表格內容、執行查找、執行對應的Action。
控制層負責的行為包括,根據設定、自動發現、協定運算來產生表格的Entries。
MakeFile的流程
1. 由Compiler轉成json檔。
2. 接下來將Linux kernel的網路阜內外對應。例如由封包產生器連接到BMv2軟體交換器。
3. 執行BMv2讀取編譯器轉成的 json檔,形成解封裝、Match/Action、封裝等模組,並將Log另外儲存起來且所有經由BMv2的封包會存成一個pcap檔。
4. 在Control plane 開啟BMv2 CLI來對Data plane的表格做更新/刪除等動作。
5. 開始發送跟接收封包。
P4程式經過編譯後會產生Json檔或Bin檔,主要是在描述控制層的行為跟資料轉送層的行為。
但編譯過程中需要廠商來提供P4架構模組、編譯器、以及可執行P4程式的Target(如BMv2或Barefoot的ASIC)。
P4 RunTime有點像OpenFlow負責做控制層跟資料層(南向)的溝通,但是P4 RunTime沒有目標及協定依賴的,也就是說對什麼目標或是協定都可以運作。
P4 RunTime功能包括,表格entries新增移除,外部控制、封包由在資料層跟控制層互相傳送。
OpenFlow只要交換器有支援便都可以運作,所以說他是Target Independent,但是對於協定的支援要看OpenFlow的版本有更新有增加才有,所以說他沒有協定獨立。
P4info用來存表格名稱跟表格ID之間的對應關係以及其他的參數包括,action ID, 表格結構等等