在先前的几个小结中,一共了解了:
- p4的编译过程
- p4runtime的实现原理
- NDP协议的简单工作流程
- YANG模型的定义以及用处
- 基于YANG的配置和状态的读写
一共实现了:
- Mininet拓扑创建
- p4的基本框架编写
- 对数据平面进行订阅以实现状态读取
- 对数据平面进行进行配置操作
- 对数据平面的p4交换机进行流表操作
1 ONOS的介绍
在本文中,我们将进一步的介绍ONOS作为控制平面的工作原理:
让我们打开docker -compose.yml可以看见ONOS的应用程序有哪些
- ONOS_APPS=gui2,drivers.bmv2,lldpprovider,hostprovider
首先make restart,当我们打开的时候,启动了ONOS控制平面,控制平面集成了几个重要功能:
-
gui2
: ONOS的用户界面 -
drivers.bmv2
: 基于 P4Runtime, gNMI, and gNOI的BMv2/Stratum驱动,stratum中最下层就是bmv2,然后第二层就是它提供的P4RT,gNMI,gNOI,因此在ONOS中需要在协议上一一对应他们的驱动实现,双方以gRPC交流(gNMI/gNOI作为交换机的配置/操作接口) -
lldpprovider
: 基于LLDP的链路发现运用 -
hostprovider
: 主机发现运用
这是Stratum与ONOS在网络的云原生的一些运用,来源云原生视角下的开放网络 | SDNLAB | 专注网络创新技术
这是对ONOS的一些基本介绍:来源:SDN系统方法 | 3. 基本架构 - 掘金 (juejin.cn)
Stratum在交换机与外部世界的所有交互中起到中介作用,包括加载P4编译器生成的目标文件,该文件定义了数据平面和控制平面之间的契约。契约有效的用自动生成的规范替换了OpenFlow的流规则抽象。其他Stratum管理API定义如下:
- P4Runtime: 控制转发行为的运行时接口,是填充转发表和操作转发表状态的关键。P4Runtime独立于任何特定P4程序,并且与底层硬件无关。这与OpenFlow形成了鲜明对比,OpenFlow对转发模型以及如何与控制平面交互有着相当明确的规定。(为了完整起见,图15还列出了OpenFlow作为另一个控制接口。)
- gNMI(gRPC Network Management Interface): 用于设置和检索配置状态。gNMI通常与OpenConfig YANG模型配对,后者定义配置和状态树的结构。
- gNOI(gRPC Network OperationsInterfaces): 用于设置和检索运行状态,如证书管理、设备测试、软件升级、组网故障处理等。
我们基于ONOS(开放网络操作系统, Open Network Operating System) 这一特定网络操作系统作为范例来完整描述这一概念,ONOS在性能、可伸缩性和可用性方面是最好的。简单来说,ONOS负责三件事情:
- 管理拓扑(Managing Topology): 跟踪网络基础设施及其互联设备,为平台和其他应用程序提供网络环境的共享视图。
- 管理配置(Managing Configuration): 帮助在多个网络设备上执行、跟踪、回滚和验证原子配置操作。这可以有效反映每个交换机的配置和操作接口(也使用gNMI和gNOI),但是在网络级别而不是设备级别上实现的。
- 控制交换(Controlling Switches): 控制网络交换机的数据平面数据包处理流水线,并对流水线内的流规则、组、监控等构建块进行后续控制。
使用make onos-cli进入ONOS建立ONOS的连接,并进入命令行:
先看看我们有多少应用程序,有这么多,但是我们总共才4个,其他应用程序时一些驱动应用(org.onosproject.drivers ),以及流水线基础(pipelines.basic )等等
2 ONOS的使用方法
在app文件夹下,有如下几个应用
- PipeconfLoader.java:一个在应用程序激活时注册pipeconf的组件;
- InterpreterImpl.java:PipelineInterpreter驱动程序行为的实现;
- PipelinerImpl.java:Pipeliner驱动程序行为的实现;
我们用make app-build app reload分别build应用程序以及把应用程序装载到ONOS上面,应用程序激活后,您应该会在ONOS日志(make-ons log)中看到以下消息,表明pipeconf已经注册,并且不同的应用程序组件已经启动
在onos指令行键入pipeconfs可以查看流水线的信息:
现在ONOS和Mininet正在运行,是时候让ONOS知道如何到达四个p4交换机并控制它们了,我们通过使用位于mininet/netcfg.json的配置文件来实现这一点,该文件包含以下信息:
-
与每个Stratum设备相关联的gRPC地址和端口;
-
用于每个设备的ONOS驱动程序,在这种情况下均为stratum-bmv2;
- 用于每个设备的pipeconf,在本例中为org.nosproject.ngsdn-tutorial,如PipeconfLoader.java中所定义;
-
特定于我们的自定义应用程序的配置(fabricDeviceConfig)
我们来看看这个json文件的格式,是这样的,后续再解释应用程序的具体实现:
我们使用make netcfg来将网络配置信息装载到ONOS上,这样就使他发现了交换机了
devices -s就可以发现有这么多的设备
portstats device:spine1 查看设备上的端口信息
flows -s any device:leaf1 查看设备上的流表信息文章来源:https://www.toymoban.com/news/detail-422800.html
文章来源地址https://www.toymoban.com/news/detail-422800.html
到了这里,关于SRv6实践项目(五):ONOS控制平面实现控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!