最近在研究SDN P4 的編譯器(p4factory),以下是關於P4的安裝和簡要使用。
p4factory安裝
1.下載P4源碼
github上(https://github.com/p4lang/p4factory) 有開源的P4源碼下載,在這裏,我採用的是ssh的下載方式。
git clone git@github.com:p4lang/p4factory.git
記得此步驟需要在自己電腦上設置ssh key,不然會提示no RSA,具體設置比較簡單,自行百度。
2.安裝git submodules
cd p4factory
git submodule update –init –recursive
3.下載安裝依賴 (以下命令均在…/p4factory下執行)
./install_deps.sh
這一步要注意了:
1.官方readme上的運行環境明確寫明是Ubuntu 14.04,親測12.04不能使用(apt-get install thrift-compiler會失敗),更高版本的Ubuntu應該也能用;
2.關於在虛擬機安裝的,最重要的一點,內存一定要夠大,不然這步會失敗(因爲宿主機的系統是Ubuntu12.04,由於種種原因沒有升級系統,於是在虛擬機上裝了個Ubuntu14.04,分配1G內存,重複多次Readme上的安裝步驟,都沒有成功,居然也沒有提示是內存不夠0.0,後來在google上才發現了這個困擾已久的問題,於是果斷跑去服務器虛擬機上裝了個8G的Ubuntu14.04,內存大,任性,終於運行成功了。
4.設定veth和makefile,安裝完畢
第3步通過之後,接下來應該沒什麼問題了。
sudo ./tools/veth_setup.sh
./autogen.sh
./configure
5.啓動
接下來進入p4factory/target,target裏面的便是完整的model了,隨便選擇一個編譯就可以了,下面選擇的是simple_router
cd p4factory/targets/simple_router/
make bm
sudo ./behavioral-model
啓動如下:
p4@ubuntu:~/p4factory/targets/simple_router$ sudo ./behavioral-model
[sudo] password for p4:
No PD RPC server address specified, using 127.0.0.1:9090
No listener specified, switch will run in standalone mode
P4 Program: simple_router
Starting RPC server on port 9090
至此,p4factory安裝完畢了。
p4factory的簡單使用
下面簡要介紹一下p4 compiler的使用,compiler一般分爲前端(front)和後端(back),p4–>target switch的編譯器也是,這裏的前端主要是生成P4的依賴關係圖(TDG),有利於分析流水線的步驟和挖掘流水線的併發性,而後端主要就是做映射了,把流表映射到各個流水級裏。這裏主要是簡單使用p4factory生成TDG。
其實很簡單,我們選擇一個完整的P4程序(p4factory/target裏面的每一個model就是完整的p4程序裏),這裏,我們採用上述的simple_router。
cd p4factory/targets/simple_router/p4src
p4-graphs simple_router.p4
就會在 …/simple_router的文件夾上生成3個png文件了:
simple_router.parser.png simple_router.ingress.tables_dep.png simple_router.tables.png
具體的代碼和關係依賴接下來再分析。
參考鏈接:
1 https://github.com/p4lang/p4factory
2 https://takeshi.tw/%E6%9E%B6%E8%A8%AD-p4-%E6%A8%A1%E6%93%AC%E9%96%8B%E7%99%BC%E7%92%B0%E5%A2%83/