p4runtime
P4 Runtime是一套基於Protobuf以及gRPC框架上的協議,通過P4runtime,SDN控制器可以控制能夠支援p4的設備。
p4runtime當前由p4 API workgroup指定,主要來自於barefoot公司。
barefoot公司,其還設計了第一款原生支持p4的芯片——tofino,以及基於tofino的交換機——wedge 100bf-65x。
控制器也能通過p4runtime去修改裝置上的pipeline。與openflow不同的除了具備高度彈性的信息格式意外,控制器與設備之間連接的順序也不同,以往openflow是需要控制器開始特定的接口,然后設備才能連上控制器。
p4runtime則是在設備上開始gRPC server,由控制器聯系設備,因此設備上會有一個代理人Agent負責處理由控制器來的連接。
關於p4runtime是通過一個protobuf檔案定義出來的,最新的定義現在在github上。
https://github.com/p4lang/p4runtime/blob/master/proto/p4/v1/p4runtime.proto
gRPC除了提供單向的RPC(RPC就是遠程過程調用)界面以外,還提供雙向的stream channel,這個就是雙向流式調用,舉例來說有時候我們會希望switch做出packet-in/out的動作,這部分就需要stream channel,p4runtime也提供了下相關信息格式來使用。
p4 info
p4 info就是p4的infomation。
原則上在編譯階段,前端的編譯器除了將原始的p4檔案編譯成中間碼(IR)以外,也會將名稱與ID訊息轉換成p4 info檔案,p4 info檔案會和編譯好的p4 binary(bmv2->json,Tofino->bin)一起上傳給設備上的Agent,p4 info也會導入給控制器供控制器去查詢。
p4源碼轉換成p4 info如下:
控制器取得p4 info之后,可以通過p4 info來產生p4 runtime的信息。