---
# System prepended metadata

title: P4 07
tags: [P4]

---

# P4 07
## 20201102 龍帆軒
==這次的練習是試著使用p4runtime來實作control plane==

使用的topology如下，3個switch分別有host，然後有一個tunnel連接h1 h2
![](https://i.imgur.com/uR2ztym.png)

要實作controller要先了解p4runtime_lib的一些東西

先從helper.py開始看



++helper.py++
1.	Contains the P4InfoHelper class which is used to parse the p4info files.
2.	Provides translation methods from entity name to and from ID number.
3.	Builds P4 program-dependent sections of P4Runtime table entries.

  
    
    

p4info是一個將table action ID 都寫在裡面的檔案
可以在執行make run指令後在build資料夾裡找到 

下圖為p4info.txt
![](https://i.imgur.com/AENhVrY.png)






helper.py裡面只有一個class 叫做 P4InfoHelper

一開始的初始化(init)是將 p4info 檔案丟進一個空的 p4info 物件
![](https://i.imgur.com/bJbOmcQ.png)

接下來的get函式會將 p4info 裡的 entity_type 丟進 o 這個變數 去尋找對應的名稱或ID
![](https://i.imgur.com/dJVGkYT.png)

get_id 會還傳self的ID
get_name會回傳self的name
get_alias會回傳self的alias
![](https://i.imgur.com/LsdQzAM.png)


getattr就是將 id 搜尋的函式與 name 搜尋函式合成
![](https://i.imgur.com/J8TsGrs.png)


get match field 就是在 p4info.helper 裡的 table 搜尋所提供的 name 或 ID
![](https://i.imgur.com/4mdVlBy.png)

get match field id 就是搜尋對應的ID
get match field name 就是搜尋對應的name
get match field pb 就是去找到對應的p4runtime_pb2
![](https://i.imgur.com/V8kxezy.png)



###### tags: `P4`