p4学习笔记-4

实施P4计算器

介绍

本教程的目标是使用P4编写的自定义协议头实现基本计算器。标题将包含要执行的操作和两个操作数。当交换机收到计算器包头时,它将对操作数执行操作,并将结果返回给发送方。

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

具有此README的目录还包含骨架P4程序calc.p4,该程序 最初会丢弃所有数据包。您的工作是扩展它以正确实现计算器逻辑。

作为第一步,编译不完整的calc.p4并在Mininet中调出一个开关来测试它的行为。

在你的shell中,运行:

make

1. 这会:

    编译calc.p4,和

    使用一个s1连接到两个主机(h1,h2)的开关()启动Mininet实例。

    主机被分配IP 10.0.1.1和10.0.1.2。

2. 我们编写了一个基于Python的小型驱动程序,可以让您测试计算器。您可以直接从Mininet命令提示符运行驱动程序:

    mininet> h1 python calc.py

3. 驱动程序将提供一个新提示,您可以在其中键入基本表达式。测试工具将解析您的表达式,并使用相应的运算符和操作数准备数据包。然后它会将一个数据包发送到交换机进行评估。当开关返回计算结果时,测试程序将打印结果。但是,由于未实现计算器程序,您应该看到错误消息。

WARNING: No route found for IPv6 destination :: (no default route?)

> 1+1

Didn't receive response

>

第2步:实施计算器

要实现计算器,您需要定义自定义计算器头,并实现切换逻辑以解析头,执行请求的操作,将结果写入头中,然后将数据包返回给发送者。

我们将使用以下标头格式:


p4学习笔记-4_第1张图片

    P是ASCII字母'P'(0x50)

    4是ASCII字母'4'(0x34)

    版本目前为0.1(0x01)

    Op是一项执行操作:

    '+'(0x2b)结果= OperandA + OperandB

    ' - '(0x2d)Result = OperandA - OperandB

    '&'(0x26)结果= OperandA和OperandB

    '|' (0x7c)结果=操作数A | 运算数

    '^'(0x5e)结果=操作数A ^操作数B.

我们假设计算器头是通过以太网传输的,我们将使用以太网类型0x1234来指示头的存在。

根据您到目前为止所学到的知识,您的任务是实施P4计算器程序。没有控制平面逻辑,因此您只需要担心数据平面的实现。

工作计算器实现将解析自定义标头,执行数学运算,将结果写入结果字段,并将数据包返回给发送方。

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

按照步骤1中的说明进行操作。这次,您应该看到正确的结果:

> 1+1

2

>

你可能感兴趣的:(p4学习笔记-4)