ONOS+P4中的流表翻译机制-源码阅读

本文详细介绍了ONOS+P4中流表翻译的机制,通过分析exercise1:fwd和exercise2:myTunnel,揭示了FlowObjective到FlowRules再到TableEntry的转换过程,涉及到Pipeliner、PipelineInterpreter和P4RuntimeFlowRuleProgrammable等关键组件的作用。
摘要由CSDN通过智能技术生成

ONOS+P4中的流表翻译机制-源码阅读

波~澜来更新了!!!波波近日对onos+p4中的流表翻译机制进行了深度探索,感觉颇有收获,特此前来分享一番。
话说自从开始学习P4后,波波就看了下图数次,也大致理解了ONOS中的流表到底是怎么下发到p4设备上的,但真正自己开发时,还是有很多盲区。

在这里插入图片描述

图中的介绍简练却抽象,波波也喜欢抽象的东西,能够在抽象维度思考和交流是一件很酷的事情。抽象的东西优雅而有魅力,原因在于其屏蔽了细节与差异,以一个高纬度的视角给人以呈现,因而具有很高的信息量。抽象带来的神秘感,让人魂牵梦萦为之着迷(:>,而高信息量带来的认知壁垒的后果就是,看不懂。波波如小燕子一般羡慕那些整天能够”四个字四个字说话“的人。
画作中的抽象派和写实派,如有侵权删

然而研发工作不是抽象派创作,波波需要从底层真真切切实实的感受到流表是怎么转换的,理解流程与细节,下面以onos/apps/p4-tutorial下的两个exercises为例一起来看看叭。

exercise1:fwd

从项目p4文件中可以看到,我们定义了三个table,t_l2_fwd,t_tunnel_ingress,t_tunnel_fwd,其中t_l2_fwd在文中有如下介绍:

The pipeline defines table called t_l2_fwd that provides basic L2 forwarding capabilities and actions to send packets to the controller. This table is needed to provide compatibility with existing ONOS applications such as Proxy-ARP, LLDP Link Discovery and Reactive Forwarding.

也就是说,fwd应用会向t_l2_fwd中下表,proxyarp和lldp也会往这里下表,proxyarp, hostprovider, lldpprovider这些应用都是ONOS控制一个简单网络所必须的基础应用,所以这个表是开发P4控制应用时不能忽略的。

我们先来看看要部署的这个pipeconf。PipeconfFactory类囊括了部署的流水线以及翻译机制等等,下面代码中通过链式调用返回了PiPipeconf,PiPipeconf建立时addBehaviour()函数中使用了文件中定义的其他类/接口,PortStatisticsDiscovery接口不是必须的,故我们先来看其他两个。

 private PiPipeconf buildPipeconf() throws P4InfoParserException {

        final PiPipelineModel pipelineModel = P4InfoParser.parse(P4INFO_URL);

        return DefaultPiPipeconf.builder()
                .withId(PIPECONF_ID)
                .withPipelineModel(pipelineModel)
                .addBehaviour(PiPipelineInterpreter.class, PipelineInterpreterImpl.class)
                .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
                // Since mytunnel.p4 defines only 1 table, we re-use the existing single-table pipeliner.
                .addBehavi
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>