> 文章列表 > SRv6实践项目(五):ONOS控制平面实现控制

SRv6实践项目(五):ONOS控制平面实现控制

SRv6实践项目(五):ONOS控制平面实现控制

在先前的几个小结中,一共了解了:

  • 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控制平面,控制平面集成了几个重要功能:

  1. gui2: ONOS的用户界面
  2. drivers.bmv2: 基于 P4Runtime, gNMI, and gNOI的BMv2/Stratum驱动,stratum中最下层就是bmv2,然后第二层就是它提供的P4RT,gNMI,gNOI,因此在ONOS中需要在协议上一一对应他们的驱动实现,双方以gRPC交流(gNMI/gNOI作为交换机的配置/操作接口)
  3. lldpprovider: 基于LLDP的链路发现运用
  4. 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 查看设备上的流表信息