美文网首页
p4学习笔记-1

p4学习笔记-1

作者: SmartSloth | 来源:发表于2018-07-30 16:24 被阅读0次

准备工作

在官网下载p4的虚拟机之后在virtualbox上运行

虚拟机是在https://p4.org/events/2018-06-06-p4-developer-day/里找到的

下载链接如下(需要翻墙)

https://drive.google.com/uc?id=1f22-DYlUV33DsR88_MeMb4s7-1NX_ams&export=download

打开虚拟机之后就可以按GitHub里的tutorials进行学习

第一个是验证实施基本转发(Implementing Basic Forwarding)

但是basic这个文件夹里的basic.p4文件是不完整的,运行这个原本的basic.p4没有收到消息,因为每个交换机都是按照编程的basic.p4,它会在到达时丢弃所有数据包。需要填充以下内容(您的交换机将具有单个表,控制平面将使用静态规则填充该表。每个规则都会将IP地址映射到下一跳的MAC地址和输出端口。我们已经定义了控制平面规则,因此您只需要实现P4程序的数据平面逻辑。)

在solution文件夹里有一个官方提供的完整的可以参考一下的basic.p4文件。


## 官网教程

### 第1步:运行(不完整的)入门代码

在扩展basic.p4文件之前,让我们编译不完整的basic.p4并在Mininet中调出一个开关来测试它的行为。

在你的shell中,运行:

```

make run

```

这会:

- 编译basic.p4,和

- 启动一个Mininet实例与三个开关(s1,s2,s3)以三角形构造中,每个连接到一个主机(h1,h2,和h3)。

- 该主机被分配的IP地址10.0.1.1,10.0.2.2和10.0.3.3。

您现在应该看到Mininet命令提示符。打开两个端子h1和h2,分别为:

```

mininet > xterm h1 h2

```

每个主机都包含一个基于Python的小型消息传递客户端和服务器 在h2的xterm中,启动服务器:

```

./receive.py

```

在h1的xterm中,发送消息给h2:

```

./send.py 10.0.2.2 "P4 is cool"

```

将不会收到该消息。

键入exit以保留每个xterm和Mininet命令行。然后,停止mininet:

```

make stop

```

并删除所有pcaps,构建文件和日志:

```

make clean

```

没有收到消息,因为每个交换机都是按照编程的basic.p4,它会在到达时丢弃所有数据包。您的工作是扩展此文件,以便转发数据包。

#### 关于控制平面的说明

P4程序定义了数据包处理流水线,但每个表中的规则都由控制平面插入。当规则与数据包匹配时,将使用控制平面提供的参数作为规则的一部分来调用其操作。

在本练习中,我们已经为您实现了控制平面逻辑。作为启动Mininet实例的一部分,该 make run命令将在每个交换机的表中安装数据包处理规则。这些在sX-runtime.json文件中定义,其中 X对应于交换机编号。

重要提示:我们使用P4Runtime来安装控制平面规则。文件内容是sX-runtime.json指表,键和操作的特定名称,如编译器生成的P4Info文件中所定义(build/basic.p4info执行后查找文件make run)。添加或重命名表,键或操作的P4程序中的任何更改都需要反映在这些sX-runtime.json文件中。

### 第2步:实施L3转发

该basic.p4文件包含一个骨架P4程序,其中关键的逻辑部分被TODO注释替换。您的实现应遵循此文件中给出的结构---将每个TODO实现替换为实现缺失部分的逻辑。

完整basic.p4包含以下组件:

以太网(ethernet_t)和IPv4(ipv4_t)的标头类型定义。

TODO:

- 用于填充ethernet_t和填充以太网和IPv4的解析器ipv4_t。

- 使用丢弃数据包的操作mark_to_drop()。

TODO:

- 一种行动(称为ipv4_forward):

- 设置下一跳的出口端口。

- 使用下一跳的地址更新以太网目标地址。

- 使用交换机的地址更新以太网源地址。

- 减少TTL。

TODO:

- 一个control:定义一个表,该表将读取IPv4目标地址,并调用其中一个drop或ipv4_forward。

- apply应用表的块。

TODO:

- 一个deparser,用于选择字段插入传出数据包的顺序。

- package解析器,控件和解析器提供的实例化。

通常,包还需要校验和验证和重新计算控制的实例。这些不是本教程所必需的,而是替换为空控件的实例化。

### 第3步:运行您的解决方案

按照步骤1中的说明进行操作。这次,您的消息 h1应该发送到h2。

**值得深思**

“测试套件”为您的解决方案---从发送消息h1到 h2---不是很强劲。您应该测试什么才能对您的实施充满信心?

虽然Python scapy库超出了本教程的范围,但它可用于生成用于测试的数据包。该send.py文件显示了如何使用它。

其他需要考虑的问题:

您如何增强您的计划以支持下一跳?

这个程序足以取代路由器吗?少了什么东西?

故障排除

在开发程序时可能会出现几个问题:

basic.p4可能无法编译。在这种情况下,make run将报告编译器发出的错误并暂停。

basic.p4可能编译但无法支持尝试使用P4Runtime安装的s1-runtime.json直通s3-runtime.json文件中 的控制平面规则make run。在这种情况下,make run如果无法安装控制平面规则,将报告错误。使用这些错误消息来修复您的basic.p4实现。

basic.p4可能会编译,并且可能会安装控制平面规则,但交换机可能无法以所需方式处理数据包。这些/tmp/p4s..log文件包含描述每个交换机如何处理每个数据包的详细日志。输出详细,可以帮助查明实现中的逻辑错误。

```

clean mininet

```

在上面的后两种情况中,make run可能会在后台运行Mininet实例。使用以下命令清除这些实例:

```

make stop

```

## 下一步

恭喜,您的实施工作正常!在下一个练习中,我们将在此基础上构建并添加对基本隧道协议的支持:basic_tunnel

相关文章

  • p4学习笔记-1

    准备工作 在官网下载p4的虚拟机之后在virtualbox上运行 虚拟机是在https://p4.org/even...

  • 《学习的艺术》读书笔记

    ====《学习的艺术》读书笔记==== 摘自豆瓣 前言 p4 读此书时,不要做笔记。首次阅读时,若读小说。浏览后—...

  • p4学习笔记-2

    继续官网的教程 实施基本隧道 介绍 在本练习中,我们将为您在上一个分配中完成的IP路由器添加对基本隧道协议的支持。...

  • p4学习笔记-5

    负载均衡 在本练习中,您将基于简单版本的Equal-Cost Multipath Forwarding实现一种负载...

  • p4学习笔记-3

    接下来是p4Runtime的尝试 使用P4Runtime实现控制平面 介绍 在本练习中,我们将使用P4Runtim...

  • 《没有词是一座孤岛》学习日记

    P4 1.The birds were active(活跃),whirring and fluttering (呼...

  • redis分布式锁实现

    算法 进程P4执行 SETNX lock.foo 以尝试获取锁 由于进程P1已获得了锁,所以P4执行 SETNX ...

  • 张小龙。肯的本周报告

    本周学习心得 1每日三件事:(20) 有结果,可交付, 事件一:完善路书,学习p4商业变现的课程, 事件二:确定本...

  • Elasticsearch学习笔记目录

    Elasticsearch学习笔记(1) Elasticsearch学习笔记(2) Elasticsearch学习...

  • p4数据面编程语言

    p4语言简介 P4(Programming Protocol-Independent Packet Process...

网友评论

      本文标题:p4学习笔记-1

      本文链接:https://www.haomeiwen.com/subject/xorfvftx.html