SDN开发笔记(四):md-sal应用程序开发

作者简介:鸿哥,硕士研究生,国内某通信设备公司软件研发工程师,主要从事云计算、SDN技术开发

环境搭建

继前3篇文章SDN开发环境的搭建(win7环境)、SDN控制器的使用(ubuntu环境搭建、controller使用、mininet的使用)和ODL源码编译生成发行版控制器之后,终于有时间写第4篇文章,本章主要讲如何开发一个基于MD-SAL的应用程序。开发APP之前请参照之前的文章搭建好jdk环境以及maven环境,搭建环境方法请参照《win7-odl环境搭建》与《ubuntu-odl环境搭建》

生成模块骨架

1、在ubuntu中输入以下命令,会有一个交互的提示

2、在交互提示中输入

3、输入y进行骨架创建

4、创建之后在相应workspace中会生成如下文件夹,表示一个example的模块的骨架相关文件

5、进入example文件夹,输入mvn clean install进行编译

6、编译成功之后进入example\karaf\target\assembly\bin,找到karaf,运行karaf启动控制器。


7、控制器已经起来,但是并未编写任何代码,这里只是为了验证上述生成骨架步骤没有任何问题

模块逻辑代码编写

1、将生成的骨架带入eclipse中,在eclipse中编写example的逻辑处理代码。

2、导入的代码会提示错误,可以不用理会
3、找到example-api中的example.yang文件,编辑如下

4、编译example-api,可以看到已经编译成功

5、生成如下java文件

6、以上的yang文件就已经写好了,找到example-impl中的ExampleModule.java文件,文件中的createInstance自动将ExampleProvider类注入

7、添加ExampleProvider实现类ExampleProviderImpl.java,编辑内容为:

8、编辑example-impl中的ExampleProvider.java文件,编辑内容为:

9、编译example-impl文件夹,编译命令为:mvn clean install

10、上述过程编译都ok,代码编译没有问题,将整个工程放到ubuntu中,重新编译,生成可执行文件karaf。

模块功能测试

1、编译ubuntu中的example,找到example/karaf/target/assembly/bin下的karaf文件,运行karaf。

2、启动karaf。

3、Odl控制台执行log:display | grep Example可以看到以下说明Example模块已经启动

验证模块功能

1、将example模块放入distribution-karaf-0.3.3-Lithium-SR3.tar.gz解压的文件夹对应的位置,运行并安装example的feature。同时又由于通过web浏览器访问odl需要odl-dlux-all组件,因此在控制器控制台输入

通过feature:list -i可以看到已经将我的example模块安装到了odl控制器:

2、通过web浏览器访问odl,可以看到yangui中已经存在Example模块

3、通过yangui发送http请求

4、可以看到控制器返回的结果

5、可以看出Example已经集成至odl控制器并可以正常工作

总结

本例只是做一个简单的demo,完成的功能也很简单,通过web发送请求,由odl反馈一个hello的欢迎提示,下一章将描述如何将这个demo集成至odl控制器。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。
  • 本文链接http://www.sdnlab.com/17555.html
  • 本文标签技术/tech

分享到:
相关阅读
20条评论

登录后才可以评论

  1. comment reply sdn123 2016/08/05 23:39
    您好,我是小白,"将example模块放入distribution-karaf-0.3.3-Lithium-SR3.tar.gz解压的文件夹对应的位置,运行并安装example的feature。"这句是把example整个目录都放到distribution-karaf-0.3.3-Lithium-SR3的一个目录(不知道是哪个目录)里吗?谢谢您!
        1楼
  2. comment reply 空灵恬静 2016/08/06 01:02
    写的不错!如果能多实现些业务逻辑就好了,多实现些具体的功能!
        2楼
  3. comment reply Chicken_Food 2016/08/12 00:19
    您好,我是Michael 在"1. 生成模块骨架"的部分,使用您的命令會自動產生Beryllium的骨架。 還有,進去example文件夹,输入mvn clean install进行编译,我會再example-features這裡編譯失敗,錯誤是 "No karaf base dir found in extracted distribution" 不知道要如何解決?
        3楼
  4. comment reply wellbeing 2016/08/12 08:32
    @Chicken_Food 自动生成铍版的话,你需要指定版本为li-sr3
        4楼
  5. comment reply wellbeing 2016/08/12 08:34
    @sdn123 在/system/下面找,建议你先熟悉下odl各个文件夹的作用
        5楼
  6. comment reply Chicken_Food 2016/08/16 02:34
    @wellbeing 謝謝您的回覆,我有指定版本為Li-SR3,但mvn clean install後還是在example-features這裡編譯失敗。錯誤依就是"No karaf base dir found in extracted distribution"。 有辦法解決嗎?
        6楼
  7. comment reply wellbeing 2016/08/16 08:40
    @Chicken_Food 加我qq 1091986089,给我看看详细信息吧
        7楼
  8. comment reply Chicken_Food 2016/08/16 18:06
    @wellbeing 抱歉我沒有QQ,我只有微信 (ID: chicken_food) 還是您能留email讓我好連絡您?
        8楼
  9. comment reply 浪滕君 2016/08/30 12:04
    @Chicken_Food 请问下怎么指定版本呀
        9楼
  10. comment reply Chicken_Food 2016/08/30 16:29
    @浪滕君 你好~ 你在 -DarchetypeArtifactId=opendaylight-startup-archetype 後面多加 -DarchetypeVersion=1.0.3-Lithium-SR3 就好了
        10楼
  11. comment reply ssssss168999 2016/09/11 11:06
    把你所有的在sdnlab 的文章都看了 很棒 请问这个例子 如果换成 面包机那个例子怎么弄呢 provider和消费者 2个工程需要搭建2个项目骨架吗 还是弄一个 我看网上大部分的例子都是简单的这个 example 如果想把那个面包机的例子也搭建起来 写个业务逻辑进去 需要怎么做 谢谢
        11楼
  12. comment reply liaozw_yy 2016/10/07 12:19
    您好!请问example模块是指整个工程放到/system/org/opendaylight下面吗?怎么启动不了呢?谢谢
        12楼
  13. comment reply sdnxiaohui 2016/11/24 21:09
    写的不详细会给初学者埋下很多坑,大家还是如wiki上看吧, 附链接: https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Startup_Project_Archetype
        13楼
  14. comment reply 一路向西 2016/11/26 12:11
    请问一下,我编译好了,但是在example-impl中没找到ExampleModule.java文件,这是怎么回事呀?
        14楼
  15. comment reply 君子一诺 2016/12/01 09:30
    @一路向西 你用什么显示的?如果你的编译完全没有问题,成功的话,你用eclipse或者Linux系统下,应该是有的,java文件是在classes下的
        15楼
  16. comment reply 君子一诺 2016/12/01 09:30
    @sdnxiaohui 这个是一个系列,可以先看看前面作者写的文章
        16楼
  17. comment reply 君子一诺 2016/12/01 09:39
    @liaozw_yy http://www.sdnlab.com/17399.html可以看下这个
        17楼
  18. comment reply 君子一诺 2016/12/01 09:41
    @liaozw_yy 在/system/下面找,建议你先熟悉下odl各个文件夹的作用
        18楼
  19. comment reply wellbeing 2016/12/14 09:19
    @sdnxiaohui 请注意看前面几篇的odl的版本,别自己不看清楚在这里瞎说
        19楼
  20. comment reply yule0925 2016/12/22 12:23
    @wellbeing 你好,有个问题想请教一下。我尝试过这种方法,没有成功。在使用文中的mvn命令生成的代码框架中,并不能生成ExampleModule,java。我曾经有一次生成的代码有ExampleModule.java,但同时生成了impl/src/main/yang/example-impl.yang。那么我猜想该yang文件与ExampleModule.java应该是有关联的。当我删除这个项目之后。在用同一命令再也没有生成这种框架。所以,想请问一下,生成包含ExampleModelu.java文件的工程的命令该是怎样的?有哪些设置?
        20楼
wellbeing 发表于16-08-05
2