侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Run P4 without P4factory - A Simple Example In Tutorials.

2023-11-09 星期四 / 0 评论 / 0 点赞 / 36 阅读 / 4726 字

一、安装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()动作。

广告 广告

评论区