前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ONOS编程系列(一)之简单应用开发

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

作者头像
SDNLAB
发布2018-04-02 15:45:00
1.9K0
发布2018-04-02 15:45:00
举报
文章被收录于专栏:SDNLABSDNLAB

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

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

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

1)应用的组织与结构;

2)如何在多个服务中注册你的应用;

3)北向API的基本应用;

4)如何运行一个应用。

一、在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 设置项目的目录结构

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,即注解,去注册。可用的注解尤其是以下四个尤为重要:

1)@Component(immediate = true) - declares a class as a component to activate, and forces immediate activation;

2)@Activate - marks a method as the method to call during the component startup routine;

3)@Deactivate - marks a method as the method to call during component shutdown;

4)@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的命令,用于展示当前应用的相关信息与状态。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档