簡介 P4 PI 函式庫

10 月 30, 2017

在安裝 bmv2 之前,若需要讓 bmv2 能夠支援 P4Runtime 協議,則必須要先下載 PI 函式庫以及安裝它。

PI 函式庫的 Repo:https://github.com/p4lang/PI/

在 Repo 最上方的簡介是寫 P4Runtime – a control plane framework and tools for the P4 programming language

但是它其實包含了幾個部分:

  • P4Runtime protobuf 定義
  • P4Runtime gRPC server 實作
  • P4Runtime 前端(frontend)
  • PI library

而這些元件的關係如下圖:

PI

一個裝置如果要支援 P4Runtime 的話,就必須要有 P4Runtime 相關的 server 實作,這一個 server 僅是依據定義好的 protobuf 檔案去實作相關的 RPC 的函式,而在 server 接收到相關的呼叫之後,會把資訊傳給 P4Runtime frontend,這一層負責將 P4Runtime 轉換成 PI 函式庫所使用的資料結構,並呼叫特定的 PI 函式(如 pi_table_entry_add),且在這一層也會儲存一些資訊,例如已新增的 Table Entry 或是 Group 等等。

在 PI 這一個 Repo 中已經定義好 server 以及前端處理的部份,所以裝置僅需依據 PI 所提供的介面去實作相關的函式即可。

需要實作的函式可以在這邊找到:https://github.com/p4lang/PI/blob/f5799c11d5b9684e8e1a8412dbe80b50d17c18da/include/PI/target/pi_imp.h

在〈簡介 P4 PI 函式庫〉中有 6 則留言

    1. P4 Runtime 主要都是由 Controller 主動發送訊息給 Switch
      而 P4 Runtime 也支援一些由 switch 主動發送的訊息,目前定義了兩種:
      1. MasterArbitrationUpdate:Mastership 回應
      2. PacketIn:與 OpenFlow 差不多,只不過可以自行定義 PacketIn 中夾帶的 metadata

      1. 首先,謝謝你的回復。還有幾個問題希望請教:
        1.PacketIn,可以向上發送訊息,那我在web UI上看到的鏈路的信息(如,pps,Kbs)是用這種方式交互的嗎?
        2.在Controler和Switch交互過程中,我抓了數據包,用WireShark分析,應該是沒有自定義的PacketIn的格式支持,所以無法分析。如果是這樣還有其他方法分析嗎?

        1. 1. 目前 ONOS 所展示的範例都是透過在 P4 原始碼中加入 port counter,然後透過 P4 Runtime 去查詢特定幾個 counter 去計算每一個 port 的流量,與 PacketIn 無關
          2. P4 Runtime 是基於 gRPC/protobuf 協定傳輸,沒有記錯的話傳輸途中都有加密,如果需要看到傳輸的內容的話,請將 controller 中的 enableMessageLog 設定為 true (https://github.com/opennetworkinglab/onos/blob/14e196dbcdbd31cc7007d437bf8642c236d88113/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcControllerImpl.java#L70)
          2-1. PacketIn 的格式主要是由 Metadata + Packet Payload 組成,這兩個部分是基於你的 P4 原始碼所定義出來的,沒有固定格式。

          1. 你好,
            对于counter的反馈是通过RPC远程调用的方式获取,那么对于网络拓扑的监测是用什么实现的呢?
            比如,下面切断一条链路,ONOS控制器是如何感知的?也是RPC调用吗?

          2. 網路拓撲的部份,Link 是透過 LLDP + BDDP 去監測的,Host 則是透過 Arp 封包

            若有一條 Link 斷掉了,則 LLDP 以及 BDDP 封包會無法傳遞,此時 ONOS 便會知道該 Link 無法使用

發佈留言

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

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