安装minindn,安装bmv2,安装p4c-bm,安装python的crcmod库(1)

黄宏旷
2023-12-01

安装教程参考:https://github.com/signorello/NDN.p4   的Readme文档


第一部分:安装minindn

1、安装git程序

sudo apt-get install git

2、下载mini-ndn

git clone https://github.com/named-data/mini-ndn

3、转到mini-ndn目录下

cd mini-ndn

4、安装mini-ndn以及所有相关的依赖

./install.sh -a

5、安装完进行验证 mininet

sudo mn --test pingall

观察结果,应该显示0%dropped(2/2 received)。

6、安装完进行验证minindn

sudo minindn --experiment=pingall --nPings=50

当mini-ndn>出现的时候,这个测试实验就结束了。使用exit退出程序。

使用命令 :grep -c content /tmp/minindn/*/ping-data/*.txt 查看文件,文件中的每一行应该都有50。

使用命令:grep -c timeout /tmp/minindn/*/ping-data/*.txt 查看文件,文件的每一行应该都有0。

值得注意:之前,我装mini-ndn的时候是自己一步一步手工装的,当时是把NFD,NLSR,ndn-tools,ndn-cxx都装到了和mini-ndn同一级的目录下,但是我观察这次试用脚本文件安装的东西,是将NFD,NLSR,ndn-tools,ndn-cxx,ChronoSync,mininet都装到了mini-ndn的目录下,相当于变成了子目录。

观察到,当使用这个实验的时候,会把每个节点相关的所有的数据都会储存在/tmp/minindn下。

另外的话,当mini-ndn>提示出现的时候,输入a nfd-status -b可以看到nfd相关的信息。

第二部分:安装p4 bmv2,也叫作P4软件交换机

bmv2是P4软件交换机的第二个版本。

1、下载bmv2(稍微有一个问题,不知道这个bmv2是和mini-ndn同级目录,还是包含的关系,我在这暂时先将它们装成同级目录的关系)

git clone https://github.com/p4lang/behavioral-model bmv2

2、转到bmv2目录下

cd bmv2

3、安装bmv2所需要的所有依赖

./install_deps.sh

4、安装完依赖后,Building the code构建代码

./autogen.sh

./configure

make

sudo make install

另外,在linux系统中,安装完bmv2后你可能还需要输入:sudo ldconfig ,来更新一下共享库的缓存。

Debug模块是被默认安装的,如果你为了性能考虑想移除掉,那么在上面输入./configure命令时,传入参数将命令变成:

./configure --disable-logging-macros

如果你想添加bmv2新的debugger器,将./configure改成 :

./configure --enable-debugger

5、然后接下来运行测试

make check

如果你在运行测试时得到了nanomsg错误,那试着使用sudo 进行运行:

sudo make check


6、其他的,Integrating with Mininet

你可以使用bmv2的targets文件夹中的simple_router,来快速地进行Mininet集成测试。

在第一个终端,输入下面:

cd mininet   注意,这个mininet目录是bmv2目录下的mininet目录

sudo python 1sw_demo.py --behavioral-exe ../targets/simple_router/simple_router --json ../targets/simple_router/simple_router.json

另外注意,第二句指令中的lsw_demo.py的开头字母,我也不确定是“1”还是“l“,所以保险起见,还是打开mininet目录下将文件名进行粘贴复制吧。

然后第二个终端输入:

cd targets/simple_router
./runtime_CLI < commands.txt

现在switch已经开始运行,而且table已经开始产生。

在终端1出现了mininet>的命令提示符。你在这个命令提示符下输入pingall得到下面的内容

*** Ping: testing ping reachability
h1 -> h2 
h2 -> h1 
*** Results: 0% dropped (2/2 received)

或者输入iperf指令:iperf h1 h2,得到下面内容:

*** Iperf: testing TCP bandwidth between h1 and h2 
*** Results: ['50.8 Mbits/sec', '52.9 Mbits/sec']

上面我们运行采用的是bmv2/targets下面的simple_router,但你想用bmv2/targets下面的simple_switch来运行P4程序时,只需要给lsw_demo.py 用--behavioral-exe 提供合适的simple_switch binary二进制文件。比如说,上面运行例子是采用的是下面的这条指令:

sudo python 1sw_demo.py --behavioral-exe ../targets/simple_router/simple_router --json ../targets/simple_router/simple_router.json
可能用simple_switch运行时只需要修改上面那条指令 中--behavioral-exe后面的部分,也就是说提供合适的JSON文件。

Now the switch is running and the tables have been populated. You can run pingall in Mininet or start a TCP flow with iperf between hosts h1 and h2.

When running a P4 program with simple_switch (instead of simple_router in the above example), just provide the appropriate simple_switch binary to 1sw_demo.py with --behavioral-exe.

第三部分 :安装p4c-bmp4c-bmP4的前端编译器,bmv2P4的后端编译器

在上面第二部分第6步中,提到了p4c-bm,那么现在就来安装一下,现在有一个问题,就是安装到哪?bmv2的同级目录下,还是子级目录下。

这样吧,我先装到同级目录下,因为我看到了bmv2是属于p4lang的,而p4c-bm也是属于p4lang的。

1cdbmv2的同一级目录下(比如说/bishe/bmv2,那么就转到bishe目录下,在bishe目录下安装p4c-bm),下载p4c-bm

gitclone https://github.com/p4lang/p4c-bm

2、转到p4c-bm所在目录下

cdp4c-bm

3、在你的电脑上安装p4c-bm,依次输入下面三条指令:

sudopip install -r requirements.txt

sudopip install -r requirements_v1_1.txt,当你想编译的P4程序是1.1版本,或者

sudopython setup.py install

我查了一下那篇论文,那篇论文里面看的P4语言规格说明是V1.1版本的。

4、安装完p4c-bm后,如何使用呢?

尝试:p4c-bmv2-h

--json产生P4程序的JSON表示

--pd产生P4程序的c++code

--p4-v1.1,如果你输入的程序是p4v1.1.版本的话。

安装完p4c-bm后,在命令行输入p4c-bmv2,弹出以下信息:

usage: p4c-bmv2 [-h] [--json JSON] [--pd PD] [--pd-from-json]
                [--p4-prefix P4_PREFIX] [--field-aliases FIELD_ALIASES]
                [--p4-v1.1] [--version] [--primitives PRIMITIVES]
                [--plugin PLUGIN_LIST]
                [--openflow-mapping-dir OPENFLOW_MAPPING_DIR]
                [--openflow-mapping-mod OPENFLOW_MAPPING_MOD] [--keep-pragmas]
                source

在命令行输入:p4c-bmv2 -h,弹出以下信息:

usage: p4c-bmv2 [-h] [--json JSON] [--pd PD] [--pd-from-json]
                [--p4-prefix P4_PREFIX] [--field-aliases FIELD_ALIASES]
                [--p4-v1.1] [--version] [--primitives PRIMITIVES]
                [--plugin PLUGIN_LIST]
                [--openflow-mapping-dir OPENFLOW_MAPPING_DIR]
                [--openflow-mapping-mod OPENFLOW_MAPPING_MOD] [--keep-pragmas]
                source

p4c-bm arguments

positional arguments:
  source                A source file to include in the P4 program.

optional arguments:
  -h, --help            show this help message and exit
  --json JSON           Dump the JSON representation to this file.
  --pd PD               Generate PD C/C++ code for this P4 program in this
                        directory. Directory must exist.
  --pd-from-json        Generate PD from a JSON file, not a P4 file
  --p4-prefix P4_PREFIX
                        P4 name use for API function prefix
  --field-aliases FIELD_ALIASES
                        Path to file containing field aliases. In this file,
                        each line contains a mapping with this format:
                        "<alias> <full name of field>"
  --p4-v1.1             Run the compiler on a p4 v1.1 program
  --version, -v         show program's version number and exit
  --primitives PRIMITIVES
                        A JSON file which contains additional primitive
                        declarations
  --plugin PLUGIN_LIST  list of plugins to generate templates
  --openflow-mapping-dir OPENFLOW_MAPPING_DIR
                        Directory of openflow mapping files
  --openflow-mapping-mod OPENFLOW_MAPPING_MOD
                        Openflow mapping module name -- not a file name
  --keep-pragmas        Propagate pragmas to JSON file when applicable

到此为止,P4语言的前端编译器p4c-bm和后端编译器bmv2都安装完了。


第四部分 运行P4程序 Running the program

当p4的前段编译器p4c-bm和后端编译器bmv2都安装好了之后,就可以运行P4程序了。

如果要运行你的P4程序,你必须先将P4程序变成一种json文件,bmv2以json形式的文件做为输入,这个json文件将会告诉bmv2软件交换机,需要配置哪个表,如何配置分析器parser...等等等等,这个json文件由前端编译器p4c-bm产生,所以这意味着你必须下载https://github.com/p4lang/p4c-bm,并依照其中的Readme文件进行安装。

当你一旦装好了p4c-bm,你可以输入下面的指令来获得json文件:

p4c-bm --json <path to JSON file> <path to P4 file>

这个json文件一旦产生,就可以做为bmv2的输入文件了(be fed bmv2)。

假定你使用的是simple_switch平台(target)

sudo ./simple_switch -i 0@<iface0> -i 1@<iface1> <path to JSON file>

在这个例子下的<iface0>和<iface1>是和switch交换机相连接的端口(就像端口0和端口1一样)。

一些疑惑:这个simple_switch平台是什么,我尝试着在bmv2目录下找了一下,没有找到,难道是在p4c-bm中吗??暂时不懂

解答:在bmv2目录下有一个文件夹targets,里面就有simple_switch文件夹。

第五部分 安装python 的crcmod库

sudo apt-get install python-crcmod



 类似资料: