P4 Tutorial Python Script 分析
  • 分析 run.sh 與  util/ 中的使用方法,來分解其操作過程

run.sh

開始的腳本,從專案中直接呼叫做使用
這支 shell script 會去打包目前的資料夾內的所有文檔,並建立一個 build/ 資料夾
呼叫開啟 p4apprunner.py (位於 util/ 內),並給予其特定參數做使用:

p4apprunner.py p4app.tgz --build-dir ./build
  • p4app.tgz 是打包目前工作目錄下所有文件(除了 build/ 之外)的所有文檔
  • 並指定 build 資料夾給這支程式

p4apprunner.py

  • 會抓取每個範例練習中的 p4app.json 作為 manifest 的來源(預設值,如果沒有從 run.sh 那層做特別指定的話)
  • 讀取內容後,抽取幾項來做使用:
  • program_name → 為該範例練習主要使用的 P4 程式檔案
  • lauguage → 指定編譯的使用的規格
  • target → 取 p4app.json 這支檔案內,target 欄位下面的 field name (以 basic/ 為例,其 p4app.json target 下的便是 multiswitch
  • 最後一個參數便是取出這個 multiswitch 內的資料( json 格式 )
  • 再來是 compile 使用者寫的 p4 腳本!
  • 產生依據原檔名在加上 .json 的檔案
  • 包裝多個 args 
  • log files 的檔案夾、位置建立
  • 呼叫下一支程式: multi_switch_mininet.py ,並以剛剛包裝的 args 做為其 arguments 來源

multi_switch_mininet.py

  • 傳入的參數:
  • manifest: p4app.json
  • target: multiswitch
  • behavior-exe: simple_switch
  • json: <example>.p4.json (在 p4apprunner.py 內編譯過後產生的)
  • --- (以下是 default)
  • thrift-port: 9090
  • (其餘配置基本上不會影響程式執行)
  • 建立物件 template:
  • AppTopo 
  • AppController
  • 這邊設定還有偵測在 targets 內 multiswitch 這個欄位內如果出現 topo_module 或是 controller_module 的 field 時,則會載入 custom 的 AppTopo 及 AppController template

  • 提取連線內容
  • 偵測在 targets 內 multiswitch 這個欄位內 links 的欄位( json array )
  • host ↔ host , host ↔ switch 之間的關係會紀錄在這邊(以表示中間是否有連線存在)
  • 正常每個 object 長度為 2 (src, dest),如果超出欄位 → 
  • 第3個為 latencies 控制
  • 第4個為 bandwidth 控制
  • 依據 targets 內的 multiswitch 這個欄位中 hosts 的欄位
  • 每個 host 內檢查是否有 latencies 的需求,並紀錄下值
  • 有的話會做紀錄(標示該節點與目標節點之間的連線存在 latency)
  • 使用 template - AppTopo 來建立網路拓僕
  • links