实施组播

 

目录

介绍

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

步骤2:执行L2多播

步骤3:执行您的解决方案

个人思考理解


介绍

本练习的目的是编写一个P4程序,该程序将数据包多播到一组端口。

交换机收到以太网数据包后,将根据目标MAC地址查找输出端口。 如果未命中,则交换机在属于多播组的端口上广播数据包(如果ingress port入口端口出现在该组中,则该数据包将被丢弃在egress pipeline出口管道中)。

您的交换机将只有一个表,控制平面将使用静态规则填充该表。 每个规则都会将以太网MAC地址映射到输出端口。 我们已经定义了控制平面规则,因此您只需要实现P4程序的数据平面逻辑即可。

在本练习中,我们将使用星形拓扑。 它是一台连接四个主机的交换机,如图所示:

我们的P4程序将针对在P4.org的bmv2软件交换机上实现的V1Model架构编写。 可以在以下位置找到V1Model的体系结构文件:/usr/local/share/p4c/p4include/v1model.p4。 该文件描述了体系结构中P4可编程元素的接口,受支持的外部元素以及体系结构的标准元数据字段。 我们鼓励您看看它。

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

该README文件所在的目录还包含一个框架P4程序multicast.p4,该程序最初会丢弃所有数据包。 您的工作将是扩展此框架程序,以正确转发以太网数据包。在此之前,让我们编译不完整的multicast.p4,并在Mininet中调出一个交换机来测试其行为。

1.在您的shell中,运行命令:

make run

这将:编译multicast.p4,并在Mininet中启动sig-topo,并使用适当的P4程序+表条目配置所有交换机,并且使用pod-topo/topology.json中列出的命令配置所有主机

2.现在,您应该会看到一个Mininet命令提示符。 尝试在拓扑中的主机之间ping通:

mininet> h1 ping h2
mininet> pingall

3.键入exit以离开每个xterm和Mininet命令行。 然后,停止mininet,并删除所有pcap,构建文件和日志:

make stop
make clean

4.结果会显示ping失败,因为每个交换机都是根据multicast.p4进行编程的,这会在到达时丢弃所有数据包。 您的工作是扩展此文件,以便它转发数据包。

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

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

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

步骤2:执行L2多播

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

完整的multicast.p4将包含以下组件:

1.以太网的标头类型定义(ethernet_t)

2.使用mark_to_drop()丢弃数据包的动作。

3.TODO:action(称为multicast,将数据包的多个副本发送到一组输出端口。

4.TODO:将multicast操作添加到可用actions列表中

5.TODO:将multicast设置为表mac_lookup的默认操作

步骤3:执行您的解决方案

按照步骤1中的说明进行操作。这一次,您应该能够在拓扑中的h1,h2和h3之间成功ping通,但不能成功在h4之间进行ping。

6.TODO:将端口4添加到文件sig-topo/s1-runtime.json中的多播组中

 

个人思考理解

s1-runtime.json中并没有IP地址,只有mac地址,第一次ping的时候mac_lookup的目的mac地址为ff:ff:ff:ff:ff:ff广播地址,第二次ping才会学习到目的mac地址。

 

其他要考虑的问题:您将如何增强程序以响应ARP请求?您将如何增强程序以支持从控制器学习MAC?

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值