流规则子系统
说明:翻译自自学https://wiki.onosproject.org/display/ONOS/Flow+Rule+Subsystem
介绍
流规则子系统负责管理系统中的流规则并将其安装在网络中的设备中。
该子系统实现了分布式权威流表的语义,其中流规则的主副本位于控制器中,并将其下推到设备中。这意味着流规则子系统永远不会尝试从网络中发现信息,也不会尝试解决设备上已经存在的流。如果ONOS根据其权威流表在设备上检测到不应存在的流,则该流将被删除。
流规则子系统实现的通用模型也适用于组子系统和度量标准子系统。
管理流程
流通过FlowRuleService API安装到流规则子系统中。系统中的流以下列状态之一存在:
- PENDING_ADD — 这表明流规则子系统已从应用程序接收到安装流规则的请求,但是子系统尚未在设备上观察到该流。在内部,请求被转发到所讨论设备的主节点,该节点将使用适当的FlowRuleProvider将流安装到设备。
- ADDED — 一旦流规则子系统观察到设备上的流,它将转换到此状态。FlowRuleProvider负责将有关观察到的流的信息报告给流规则子系统。
- PENDING_REMOVE — 流规则子系统已从应用程序收到删除流的请求,但尚未收到确认已从设备中删除流的确认。将指示FlowRuleProvider从设备中删除流。
- REMOVED — 流规则子系统已从FlowRuleProvider接收到已从设备中删除流的确认,并且该流将很快从商店中删除。
- FAILED — 设备指示流规则安装失败。
流规则子系统支持批量安装相互依赖的流。这是使用FlowRuleOperations对象完成的,该对象包含FlowRuleOperation的阶段列表。语义是在流规则系统可以在后续阶段开始工作之前,必须完全完成每个阶段中的操作。此功能的一个示例用法是,当您要在头流规则之前安装路径的尾部,以防止在建立路径时产生流量黑洞。
数据平面协调
流规则提供者负责收集有关网络中安装的流的统计信息,并将这些统计信息报告给流规则子系统。流规则子系统使用这些报告来确保其对权威状态的想法仍然存在于网络上的设备上。
例如,OpenFlowRuleProvider使用OpenFlow的FLOW_STATS_REQUEST
消息定期查询设备上的流。当设备以FLOW_STATS_REPLIES
进行响应时,提供程序将使用FlowRuleProviderService的pushFlowMetrics()
方法将此信息发送到流规则子系统。如果流规则子系统可以将这些流度量标准与其存储中的流进行匹配,它将更新这些流的统计信息。如果发现数据平面上没有多余的数据流,它将从数据平面中删除这些数据流。如果检测到数据平面中缺少流,它将尝试重新安装它。
应用子系统
说明:翻译自学自https://wiki.onosproject.org/display/ONOS/Application+Subsystem
总览
应用子系统的目的是简化集群中所有ONOS实例之间的软件交付和管理。子系统使用ONOS最终一致的映射和节点间通信机制在整个ONOS群集中完全复制应用程序清单。要将OSGi捆绑软件作为一组安装和点燃,子系统依赖于底层的Apache Karaf功能机制。
现在,ONOS提供的所有内置样本和测试应用程序都是使用此机制交付的,并且作为标准ONOS发行版的一部分已预先安装(尽管未激活)。这包括任何提供程序,例如OpenFlow提供程序。这样,所有可选软件组件都可以安装到ONOS或从ONOS撤回,而无需重建,甚至无需重新配置ONOS本身。
应用包
可以将应用程序打包到一个.oar(ONOS Application aRchive)文件中,以便将软件轻松交付给正在运行的ONOS集群。.oar文件是一个ZIP文件,其中包含所有工件,例如功能定义或OSGi捆绑包,否则它们在Maven Central上可能不可用。下面介绍.oar文件的结构:
- app.xml — 应用程序描述符
- m2/<groupId>/<artifactId>/<version>/<featuresRepo>
- m2/<groupId>/<artifactId>/<version>/<artifact>
- ...
可以很容易地使用onos-maven-plugin生成应用程序包文件。pom.xml文件需要在其构建部分中包含onos-maven-plugin,如果pom.xml定义了onos.app.name属性,或者如果模块基本目录包含app.xml文件,则插件将构建该应用程序.oar文件,此文件将在Maven安装阶段安装到M2存储库中。请参见下面的Maven示例。
应用定义
通过在捆绑软件的pom.xml文件中指定以下属性,可以轻松生成单个捆绑软件应用程序:
- onos.app.name — 应用程序名称,应以反向DNS表示法指定,例如org.onosproject.fwd
- onos.app.origin — 发起实体或公司的名称,例如ON.Lab
- onos.app.requires — 此应用程序所需的应用程序的逗号分隔列表
可以使用模块基础目录中的app.xml文件定义多捆绑应用程序,或需要引入其他工件或自定义功能依赖项的应用程序。app.xml的文件指定以下属性:
- name — 应用程序名称,以反向DNS表示法指定
- version — 应用程序版本
- origin — 发起申请的公司或组织
- description — 应用程序的简短描述
- features — 组成应用程序的Apache Karaf功能列表
- featuresRepo — 应用程序功能定义工件的可选URL
- apps — 该应用程序所需的应用程序的逗号分隔列表
- artifact — 列出应用程序包中将包含的构件
以下是应用程序app.xml文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<app name="org.onosproject.sample" origin="ON.Lab" version="${project.version}"
featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
features="sample-app">
<description>${project.description}</description>
<artifact>mvn:...</artifact>
</app>
app.xml文件可以包含Maven属性,例如{project.groupId},{project.artifactId},{project.version},{project.description},这将导致从Maven pom.xml文件。强烈建议使用它们,以减少所需的维护量。
ONOS代码库在apps源代码树下包含这两种方法的示例。
CLI命令
管理员可以使用以下控制台命令与应用程序清单进行交互:
- apps — 列出所有已安装的应用程序
- app install <mvn-url> ... — 通过从指定的URL下载来安装应用程序
- app activate <app-name> ... — 激活所有指定的应用程序
- app deactivate <app-name> ... — 停用所有指定的应用程序
- app uninstall <app-name> ... — 卸载所有指定的应用程序
REST API和Shell实用程序
编排系统和工具可以使用REST API直接与应用程序子系统交互,也可以使用onos-app的shell实用程序,该实用程序使用REST API并具有以下用法:
- onos-app install <app.xml or app.zip> ... — 通过上传指定的app.xml或应用程序包文件来安装应用程序
- onos-app install! <app.xml or app.zip> ... — 通过上载指定的 *app.xml * 或应用程序包文件来安装和激活应用 程序
- onos-app reinstall <app-name> <app.xml or app.zip> ... — 通过上传指定的app.xml 或应用程序包文件来重新安装应用 程序
- onos-app reinstall! <app-name> <app.xml or app.zip> ... — 通过上传指定的app.xml 或应用程序包文件来重新安装并激活应用 程序
- onos-app activate <app-name> ... — 激活指定的应用程序
- onos-app deactivate <app-name> ... — 停用指定的应用程序
- onos-app uninstall <app-name> ... — 卸载指定的应用程序
Maven的例子
以下代码段显示了所需的onos-maven-plugin配置。ONOS内置和示例应用程序模块从ONOS根pom继承此配置,但是外部应用程序需要在其POM层次结构中包括此配置,或者它们需要从ONOS根POM继承:
<plugins>
...
<plugin>
<groupId>org.onosproject</groupId>
<artifactId>onos-maven-plugin</artifactId>
<version>1.4-SNAPSHOT</version>
<executions>
<execution>
<id>app</id>
<phase>package</phase>
<goals>
<goal>app</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
请注意,该插件会将.oar文件标记为安装工件,从而在调用Maven 安装或部署目标时将其安装或部署到Maven存储库中。
内置的样品和测试应用
下表描述了所有内置驱动程序,提供程序以及各种示例和测试应用程序的清单:
- org.onosproject.drivers — 内置设备驱动程序
- org.onosproject.openflow — OpenFlow协议南向提供者
- org.onosproject.bgprouter — BGP路由器应用程序,功能
- org.onosproject.config — 网络配置应用程序
- org.onosproject.demo — 流吞吐量测试应用程序
- org.onosproject.election — 主选举测试应用程序
- org.onosproject.fwd — 使用流子系统的反应式转发应用程序
- org.onosproject.intentperf — 目的性能测试应用程序
- org.onosproject.metrics — 性能指标集合
- org.onosproject.mobility — 主机移动性应用
- org.onosproject.null — 空南向提供程序进行测试
- org.onosproject.optical — 数据包/光学用例应用程序
- org.onosproject.proxyarp — 代理ARP / NDP应用程序
- org.onosproject.sdnip — SDN / IP用例应用程序
- ...