一、实验目的
1.掌握V1Model框架下P4_16的程序结构和基本语法
2.能够运用 P4 进行简单数据平面编程
二、实验环境
1.下载虚拟机软件Oracle VisualBox或VMware;
2.在虚拟机中安装Ubuntu 16.04 Desktop amd64,并安装完整Mininet和P4开发环境;
3.提供P4镜像P4-Suite2018.ova,提取码:egwf
三、实验要求
学习P4官方示例教程,链接:(https://github.com/p4lang/tutorials),了解P4-16版本的基本语法、基于V1Model的P4代码结构,完成如下练习:
(一)基本要求
熟悉使用P4实现交换机IPv4的基本转发原理,编写P4程序,在下面的拓扑中实现IPV4 隧道转发。
- 进入文件夹
/P4/tutorials/exercises/basic_tunnel
- 在
basic_tunnel.p4
中补全代码后,在终端输入make run
运行,并启动mininet
- 输入
pingall
测试连通性
- 输入
xterm h1 h2 h3
打开主机模拟终端
没有采用隧道转发时
- 在h2终端下输入
./receive.py
- 在h1终端下输入
./send.py 10.0.2.2 "031902335 h1 to h2"
,没有采用隧道转发,h1向h2发送消息,h3无法收到
- 在h3终端下输入
./receive.py
- 在h1终端下输入
./send.py 10.0.3.3 "031902335 h1 to h3"
,没有采用隧道转发,h1向h3发送消息,h2无法收到
采用隧道转发时
- 在h1终端下输入
./send.py 10.0.2.2 "031902335 hi 1-2" --dst_id 2
,采用隧道转发,h2收到消息
- 在h1终端下输入
./send.py 10.0.3.3 "031902335 hi 1-3" --dst_id 2
,采用隧道转发,虽然IP改变,但是经过隧道转发,交换机仍然将该报文发送给h2
三、个人总结
-
实验难度:难
-
实验过程遇到的困难及解决办法:
- 导入镜像后,发现虚拟机页面很小,而且也不能粘贴代码,查询资料后才知道要安装VMware Tools,安装后得以解决。
- 在补全代码上遇到了困难,通过翻找官方文档、查询资料、询问同学,才编写出代码。查看github源码时一开始还不太理解,后来发现,源码中有todo的地方就是我要加入代码的地方,并且通过readme可以了解如何操作运行。
- 补全代码后输入
make run
命令报错,查询资料和通过参考同学博客的解决问题部分发现,应该要修改P4 程序,使调用 mark_to_drop()函数 时不携带参数,修改后能成功运行。
-
个人感想:
本次实验最难的部分就是代码编写,查看官方代码时又是通过翻译和英文结合才能勉强理解其中的步骤和含义,通过本次实验,学习老师给出的教程了解P4-16版本的基本语法、基于V1Model的P4代码结构后,对p4有了更深的了解,这次实验只涉及到了p4的一部分,所以对p4的学习还不够深,还有很多地方要了解学习。通过这几次实验,对mininet的使用已经很熟练了,也提高了查看英文文档,编写代码的能力,学到了很多知识。