当前位置:首页 > 技术分析 > 正文内容

ONOS编程系列(一)之简单应用开发

ruisui882个月前 (03-06)技术分析7

一个ONOS application是使用maven做管理的OSGi bundle。 因此,ONOS application 可以归结为Java类和POM文件的集合。本教程以基于intent的交互式转发application为例,讨论了如何从零开始建立一个新应用。

本教程假设读者已经具备ONOS的运行经验,能够熟练启动ONOS实例。有关ONOS的启动不做过多描述。如果出现启动上的问题,请移步官方wiki文档自行寻找答案。

本文章结束后,你应该学会:

  • 应用的组织与结构;
  • 如何在多个服务中注册你的应用;
  • 北向API的基本应用;
  • 如何运行一个应用。

一、在Eclipse中导入工程

直接按照maven项目导入就可以,详情请见ONOS环境部署。

1.1 注意

在ONOS项目中,对代码有着格式上的一些要求,不管是正式代码,还是测试用例。请根据要求修改增加代码的格式。 如果想要跳过代码checkstyle,可以在onos项目根目录下的pom。xml文件中,注释掉关于checkstyle的plugin:

不过非常不建议这样做。最好的方法还是按照官方的要求,进行编程。关于代码格式检查,如果使用的是Eclipse,可以配置checkstyle进行检查: 一路点击eclipse-->help-->Eclipse Marketplace,进入界面:

在输入框里输入“checkstyle”,然后选择框住的那个插件进行傻瓜式安装,就是一路next。这个过程很有可能会报错,Eclipse提示找不到下载网址。如果这种情况,可在
http://eclipse-cs.sourceforge.net/update/这个地方下载,在本地安装就可以了。 安装好以后,在window-->preference弹出的界面里就能看到checkstyle的选项了。单击该选项,右面出现相关界面:

然后点击NEW按钮,增加一个checkstyle文件,在本地ONOS工程里找到onos自己的checkstyle文件,别忘记起个名字。

然后就能在checkstyle文件列表里看到刚刚新添加的文件了。我给它的命名是ONOS。接下来选中该项,点击右边的“Set as Default”,再点击OK,就大功告成了。

后面再新加的文件任意处右键,就能在菜单列表里看到checkstyle的选项了。只需要点击“Check Code with Checkstyle”,就能检查本文件的代码格式是否符合onos的要求了。

二、项目骨架

2.1 设置项目的目录结构

应用的根目录设置在apps/之下:

Shell

$ mkdir -p ${ONOS_ROOT}/apps/ifwd

应用的源文件定义在src/main/java/之下:

Shell

$ mkdir -p ${ONOS_ROOT}/apps/ifwd/src/main/java/org/onosproject/ifwd

类似的,测试文件定义在src/test/java/之下:

Shell

$ mkdir -p ${ONOS_ROOT}/apps/ifwd/src/test/java/org/onosproject/ifwd

2.2 添加并编辑pom文件

在应用的根目录/apps/ifwd/下编辑pom文件:

在本例中,应用的名字是onos-app-ifwd。在启动karaf/ONOS命令行界面以后,直接用feature:install加上名字,即可安装此应用。 然后,编辑apps/pom.xml,在文件中以形式包含该项目:

2.3 在karaf中注册该应用

Karaf在运行时若要部署该应用module,需要名为feature.xml的描述性文件,编辑 ${ONOS_ROOT}/features/features.xml:

三、完成项目代码

该应用的核心是名为
IntentReactiveForwarding.java的文件,被定义在${ONOS_ROOT}/apps/
src/main/java/org/onosproject/ifwd/ 里。 为了便于对文档进行注释,在main/java/下需要添加一个package-info.java文件,其包含一下内容:

一般IDE会提供生成这个文件的选项。Eclipse在新建包的时候会提供该选项:

剩下的部分将会描述如何编辑IntentReactiveForwarding类。

3.1 注册Karaf,使其自动加载

karaf的模块加载机制需要几个annotations,即注解,去注册。可用的注解尤其是以下四个尤为重要:

  • @Component(immediate = true) - declares a class as a component to activate, and forces immediate activation;
  • @Activate - marks a method as the method to call during the component startup routine;
  • @Deactivate - marks a method as the method to call during component shutdown;
  • @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - Marks a service as an application's dependency,and requires one instance of such a service to be loaded before this application's activation.

3.2 注册服务

接下来,我们的应用必须使用CoreService注册一个独一无二的application ID,这样才能够使该应用正常使用ONOS的其他服务。我们的应用接下来还要使用PacketService监听PacketIn和PacketOut事件。而PacketService需要一个事件处理器的类,该类用途单一,通常写在其所属类的内部,成为其私有内部类:

3.3 增加包处理代码

在上一步的私有内部类ReactivePacketProcessor里,要覆写扩展自接口PacketProcessor的方法process。每当有网络包进来的时候,PacketService都会调用一下process函数。这意味着我们可以在这个方法里定义我们自己的包转发行为:

接下来我们要实现上图中用到的三个方法,注意,这些方法定义在私有内部类的外面,是IntentReactiveForwarding的成员:

3.4 编译该应用

进入ONOS根目录,键入“mvn clean install”,等待编译结果。 这个时候通常的结果就是BUILD SUCCESS。

当前最有可能遇到的问题,就是checkstyle的时候出现了错误,实在不想改代码了,可以直接注释掉checkstyle的plugin。

3.5 启动该应用

启动分为动态启动与静态启动:

动态启动就是用karaf clean命令启动onos之后,在onos命令行下键入
feature:installonos-app-ifwd命令安装该应用。

静态启动就是修改karaf的启动配置文件。该文件路径为${KARAF_ROOT}
/etc/org.apache.karaf.features.cfg,直接将onos-app-ifwd字样缀到featuresBoot变量的尾部即可。

启动并加载该应用以后,可已键入:

命令查看是否已安装该应用。 该应用安装以后,并不能对其做什么操作,也无法看到它的运行情况,这时我们就需要将该应用扩展为一种服务,以便于其它服务或者应用与其交互,并且需要新建一条karaf的命令,用于展示当前应用的相关信息与状态。

注:此文章由OpenDaylight[194240432]@北京-石头提供,感谢他的投稿,有任何疑问或建议可以与他共同探讨!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2534.html

标签: mvn help:system
分享给朋友:

“ONOS编程系列(一)之简单应用开发” 的相关文章

如何做好精细化管理,实现全流程高效落地,牢记这4点

本文选自头条号@业绩增长系统???????????该资料?共有完整版42页,对于学习之人非常具有参考价值,值得深度学习精细化的费用管理是提升企业费效的必经之路,精细化管理”顾名思义就是“精确、细致、深入、规范”的全面管理模式领取方式:1、?关注?+评论+转发此文?2、主页S信?:999免费?获得?这...

最古老的Linux发行版刚刚进行了重大更新

Slackware 15.0 带来了全新的 KDE Plasma 5 桌面体验。Slackware Linux(仍然维护的最古老的Linux发行版)的制造商刚刚发布了Linux发行版的15.0版本。Slackware Linux于1993年出现,创始人Patrick Volderding今天继续维护...

基于archlinux的发行版有哪些?

Arch Linux 是一个 Linux 发行版,采用滚动更新的模型,这意味着 Arch Linux 不会定期发布新版本,而是持续接收更新和升级,保持系统与最新软件版本的同步。Arch Linux 以其极简主义、简单性和用户定制为中心的特点而闻名,专注于让用户对其系统配置具有完全控制权。然而,它也以...

「 VUE3 + TS + Vite 」父子组件间如何通信?

组件之间传值,大家都很熟悉,涉及到 VUE3 +TS 好多同学就无从下手了,所以分享这篇文章,希望看完后提起 VUE3+TS 能够不慌不忙。平时使用的函数如:ref、reactive、watch、computed 等需要先引入才能使用,但是本篇文章介绍的 defineProps、withDefaul...

「干货」通俗易懂的Deno 入门教程

作者: semlinker转发链接:https://mp.weixin.qq.com/s/2eqRTsf_z7Bcs6dziXe73Q一、Deno 简介Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验。Deno 含有以下功能亮点:默...

Solid State Logic 发布低保真数字失真插件 Digicrush

Solid State Logic 宣布推出低保真数字失真插件 Digicrush ,他们最新的创意工具具有经典数字失真的粗糙、低保真特性,完美模拟早期数字音频的衰减和伪影。Digicrush 充满怀旧气息,深受经典数字采样器和效果器的影响,具有内置抖动、可调比特深度和采样率降低功能,是为音轨添加复...