在開發 P4 時,可以使用 bmv2 來模擬 P4 所寫出來的規則
但是有時候執行的結果會不如同預期
這時候就需要 Debugger 來進行除錯
在 bmv2 資料夾下有一個 tools 的資料夾,裡面有一個 p4dbg.py 的程式,使用方法如下:
- 執行 bmv2 模擬程式(例如用 mininet)
- 執行 p4dbg.py 程式:
sudo ./p4dbg.py --thrift-ip 127.0.0.1 --thrift-port 9090
thrift-ip 預設是 127.0.0.1,若是在本機執行則可以不用輸入,而 thrift-port 則是開啟 bmv2 時所設定的 thrift api port,預設是 9090
在執行 p4dbg 後會進入 debug 的命令列,其功能如下:
名稱(括弧為簡稱) | 用途 |
---|---|
backtrace(bt) | 針對一個封包的內容,顯示他目前執行的堆疊狀態
backtrace <packet id> example: P4DBG: backtrace 1528.0 |
break(b) | 針對 parser, parse_state, pipeline, table, condition, action 或 deparser 設定斷點
break <type> <name> |
break_packet_in | 封包進入 switch 時暫停 |
continue(c) | 繼續至下個中斷點 |
delete(d) | 刪除中斷點,參數同 break
delete <type> <name> |
filter_notifications | 只會顯示特定 id 的封包
filter_notifications <packet id> |
help(?) | 顯示說明,在後方加上指令則可顯示指令說明 |
next(n) | 下一步 |
print(p) | 印出特定資料,像是 register, metadata, header 等
print <packet id> <field name> |
remove_packet_in | 將 break_packet_in 下的斷點移除掉 |
reset | 將所有的狀態重新設定 |
resume_packet_in | 復原 stop_packet_in 所造成的情況,也就是讓 switch 繼續接受新的封包 |
set_wp(w) | 設定 watch point,監看特定 field
set_wp <field name> |
show_bps | 顯示有哪些 brack point |
show_wps | 顯示有哪些 watch point |
skip | 跳過所有在這個封包的訊息,接下來都看不到他 |
skip_all | 跳過所有在這個封包跟這個封包衍生出的封包的訊息,接下來都看不到他們 |
stop_packet_in | 禁止封包進入 switch |
unset_wp | 移除 watch point
unset_wp <field name> |
備註:所有的命令都可以透過按下 tab 按鍵來補齊。
備註2:當 debugger 開啟後,除非讓他跑 continue,否則他不會繼續處理下一個封包或是繼續下一個步驟,所有的動作都是 single thread 的,所以如果一個不動,基本上全部都不會動。
您好:
我在安裝p4 bmv2時,make check時 一直產生錯誤訊息:
…
FAIL: test_switch
….
make[4]: *** [test-suite.log] Error 1
make[4]: Leaving directory `/home/kiki/behavioral-model/tests’
make[3]: *** [check-TESTS] Error 2
make[3]: Leaving directory `/home/kiki/behavioral-model/tests’
make[2]: *** [check-am] Error 2
make[2]: Leaving directory `/home/kiki/behavioral-model/tests’
make[1]: *** [check-recursive] Error 1
make[1]: Leaving directory `/home/kiki/behavioral-model/tests’
make: *** [check-recursive] Error 1
進 tests/test-suite.log 檔看到:
FAIL: test_switch
=================
[==========] Running 6 tests from 1 test case.
[———-] Global test environment set-up.
[———-] 6 tests from Switch
[ RUN ] Switch.GetConfig
[ OK ] Switch.GetConfig (0 ms)
[ RUN ] Switch.SerializeState1
[ OK ] Switch.SerializeState1 (4 ms)
[ RUN ] Switch.SerializeState2
Traceback (most recent call last):
File “../tools/runtime_CLI.py”, line 30, in
import bmpy_utils as utils
File “/home/kiki/behavioral-model/tools/bmpy_utils.py”, line 26, in
from thrift import Thrift
ImportError: No module named thrift
lt-test_switch: utils.cpp:56: CLIWrapperImp::~CLIWrapperImp(): Assertion `pclose(CLI_f) == 0′ failed.
Thrift server was started
不知道是哪個安裝步驟出現問題
1. ./install_deps.sh
2. ./autogen.sh
3. ./configure
4. make
5. make check
不好意思我是p4的新手,有些東西還不太了解,麻煩您幫我看一下哪裡出錯了,謝謝!
您好
你需要先安裝 thrift library
https://thrift.apache.org/
您好
最近在試著學習使用p4
不過在運行debugger的部分遇到困難
在使用bmv2內的simple_switch時若附上–debugger的參數,會無法成功啟動switch
也因此在嘗試跑2016 NCTU workshop裡的範例時無法成功
我從p4_mininet.py內消除這項參數就能成功運行switch
目前想到的可能性只有bmv2的安裝問題
我在安裝時有依照github上的指示使用./configure –enable-debugger
configure也顯示會安裝debugger
make check也全數通過
但仍無法在simple_switch上啟用debugger
請問是否有我所遺漏掉的部分?
Hi,
剛剛測試了一下最新版的 bmv2,–debugger 參數似乎還在
你可以透過 simple_switch –help 確認
原先的simple_switch –help內找不到–debugger的參數
更新完bmv2之後的確有找到
也可以啟動帶有–debugger的switch
感謝協助