Loading...
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
Please turn on JavaScript to use Paper in all of its awesomeness. ^_^
run.sh
p4apprunner.py p4app.tgz --build-dir ./build
p4apprunner.py
multi_switch_mininet.py