一、安装bmv2 和 p4c-bm(我把他们安装在~/prg/mypython) 安装p4c-bm很顺利只需依次执行如下命令: cd ~/prg/mypythongit clone https://g
一、安装bmv2 和 p4c-bm(我把他们安装在~/prg/mypython)
安装p4c-bm很顺利只需依次执行如下命令:
cd ~/prg/mypythongit clone https://github.com/p4lang/p4c-bm.gitcd p4c-bm/sudo pip install -r requirements.txtsudo pip install -r requirements_v1_1.txtsudo python setup.py install
bmv2:
先安装依赖包
sudo apt-get install automake cmake libjudy-dev libgmp-dev libpcap-dev libboost-dev libboost-test-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libevent-dev libtool flex bison pkg-config g++ libssl-dev
在执行以下命令:
cd ~/prg/mypythongit clone https://github.com/p4lang/behavioral-model.git bmv2cd bmv2/./autogen.sh ./install_deps.sh
这时会出现下面错误:
Processing /home/mymotif/prg/mypython/bmv2/tmp.7ri1dMUJMg/nnpy Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-ptrGc8-build/setup.py", line 4, in <module> generate.run() File "generate.py", line 60, in run f.write(symbols(headers)) File "generate.py", line 37, in symbols ffi = FFI() File "/usr/local/lib/python2.7/dist-packages/cffi/api.py", line 54, in __init__ backend.__version__, backend.__file__)) Exception: Version mismatch: this is the 'cffi' package version 1.10.0, located in '/usr/local/lib/python2.7/dist-packages/cffi/api.pyc'. When we import the top-level '_cffi_backend' extension module, we get version 1.5.2, located in '/usr/lib/python2.7/dist-packages/_cffi_backend.x86_64-linux-gnu.so'. The two versions should be equal; check your installation.
查看install_deps.sh脚本,发现最后安装的是nnpy模块,提示说和cffi版本不匹配造成的,多次尝试解决此问题未果后决定忽略次错误。
编译安装:
./configuremakesudo make install
二、安装其它工具
sudo pip install scapy thrift networkx
mininet参见:https://my.oschina.net/u/2245781/blog/889820
添加python模块p4_mininet的搜索路径:
$ cat /usr/local/lib/python2.7/dist-packages/p4_mininet.pth ~/prg/mypython/bmv2/mininet
建议改为实际的路径(因为~会随着登录用户不同而改变)
三、下载教程并准备运行前的设置
cd ~/prg/mypythongit clone https://github.com/p4lang/tutorials.gitcd tutorials/
修改env.sh为如下内容
THIS_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )# ---------------- EDIT THIS ------------------BMV2_PATH=~/prg/mypython/bmv2# e.g. BMV2_PATH=$THIS_DIR/../bmv2P4C_BM_PATH=~/prg/mypython/p4c-bm# e.g P4C_BM_PATH=$THIS_DIR/../p4c-bm
执行:
cd SIGCOMM_2015/source_routing/~/prg/mypython/tutorials/SIGCOMM_2015/source_routing$ tar zxvf solution.tar.gz~/prg/mypython/tutorials/SIGCOMM_2015/source_routing$ cp -f solution/p4src/source_routing.p4 p4src/source_routing.p4~/prg/mypython/tutorials/SIGCOMM_2015/source_routing$ cp ../../env.sh .
修改run_demo.sh
将
source $THIS_DIR/../../env.sh
改为:
source $THIS_DIR/env.sh
修改command.txt,内容如下:
table_set_default route_pkt route
四、运行
启动虚拟接口:
sudo ~/prg/mypython/bmv2/tools/veth_setup.sh 停止用sudo ~/prg/mypython/bmv2/tools/veth_teardown.sh
可用ifconfig来验证是否启动/停止成功
运行脚本:
./run_demo.sh
在启动的mininet中打开h1和h3的终端:
mininet>xterm h1mininet>xterm h3
13.分别在h1和h3终端上运行脚本:
先执行h3终端上的脚本:
./receive.py
再执行h1终端上的脚本:
./send.py h1 h3
实验结果:
在h1的xterm上输入文本信息,在h3的xterm上能够接收。但是在mininet中执行h1 ping h3是没有办法ping通的,由此可以证实P4交换机在处理数据报的过程中,进行了协议匹配:当easyroute_port与valid相匹配时,执行route()动作。