OpenDaylight开发学习笔记 基础篇 Controller篇 @北邮-Kobe

来源:互联网 发布:公安打击网络犯罪 编辑:程序博客网 时间:2024/06/06 07:40

一、摘要

本文主要在Helium版本下进行二次开发测试,涉及到controller、与openflowplugin&Java、integration等工程的设计与代码的写入。文章中对于一些概念性问题相比大家已经了解很多,故本文不做过多的解释,只介绍技术。本文目标为以下几点:

 源代码的下载与编译测试以及启动

 三个工程的集体开发,涉及到工程的讲解

   Controller里新建bundle

二、源码下载及编译及启动



图1 -版本架构

    图1所示是新版本的架构图,只简单介绍几个重要的部分,如北向、即功能模块部分、与。工程主体由三部分组成 ,负责及以上各种网络应用。,负责消息的收发以及与上层应用通信。,主要负责消息网络流的编解码。下面进入正题。
(一) Controller编译
Mvn命令新建一个folder :mkdir <name>
cd 到name下
下载源代码:
git clone http://git.opendaylight.org/gerrit/p/controller.git
联网编译整个controller工程 
mvn clean install 
编译后报错误并且controller里的一些目录的编译也会skip



解决办法如下 
现将opendaylight版本切换,我这里是切换到sr2版本相对稳定,
git checkout release/helium-sr2
再下载parent代码
git clone http://git.opendaylight.org/gerrit/p/odlparent.git



将odlparent里setting.xml文件copy到你的本地数据库中(.m2)

cp setting.xml /root/.m2
在进行controller的编译就不会报错了。

(二)Karaf简介与调试
Karafmodule会把Plugin制作成KarafFeature,然后打包成可以导入到Apache karaf的kar文件。
1.Apache Karaf
基于OSGI的运行环境,做为OSGI应用的管理容器提供各种管理utility。
2.KarafFeature
由多个Java运行文件组成的Karaf的功能管理单位。
ODL Helium中,所有应用包括MD-SAL都由Apache Karaf统一管理。



编译好controller后,去opendaylight目录下找到distribution,如下图所示



然后在terminal下cd到bin目录下利用karaf启动controller
./karaf


图2 karaf启动controller

启动controller时会发生一些问题,例如



试着敲入两个命令 
export set JAVA_OPTS=”-Xms256m -Xmx512m”
export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=512m”
这两个命令是更改内存的,但是只是零时的更改,这样再启动controller就不错报错,但是需要将两个命令写进etc的profile文件中。
# gedit /etc/profile 
在最后加入PATH的设置如下: 
export set JAVA_OPTS="-Xmx512m" 
三、controller、openflowPlugin&Java集体开发测试(integration)
integration是一个框架性的工程,所有自己开发和修改的部分(包
括以上三个工程),编译为包后,都可以放在该工程的目录下一起执行。
注意,如果是自己开发的包,则可以直接放到该目录下。但是如果是修改的原本工程,然后编译的包要替换掉上面目录中原来的包,这里有个问题是的目录下的包名和,,中编译出来的包命名方式有点小差别,复制过去之前先重命名下,使之和目录下的原来包文件名一致,再复制替换。
mvn clean install
对于helium版本的代码结构变化较大,目录发生了变化,参考一下目录:
1. openflowJava:
/root/integration/distributions/karaf/target/assembly/system/org/opendaylight/openflowjava/
2. openflowPlugin:
/root/odl_Helium/integration/distributions/karaf/target/assembly/system/org/opendaylight/openflowplugin
3. controller
对于controller,用于接受openflowplugin上报的消,其实现功能模块是model里包括model-flow-service等。
/root/odl_Helium/integration/distributions/karaf/target/assembly/system/org/opendaylight/controller/model
将各个工程的jar包copy到integration里后,运用mvn clean install 编译integration。
四、controller新建一个bundle
控制器功能模块部分,每个模块以一个bundle方式独立开发。开发一个openflowPlugin工程发送OF 数据包 数据包 的 bundle。
1.Bundle建立
为模块新建一个 支持 OSGi框架的 bundle 。联网 环境下,在命令行终端 开发路径下, 用以下 命令 完成 bundle建立,
mvn archetype:generate -DgroupId=org.opendaylight.md.controller.Ted -DartifactId=cvniTed -DarchetypeArtifactId=maven-archetype-quickstart -Dpackage=com.org.opendaylight.md.controller.Ted.cvniTed -DinteractiveMode=falsew
根据Java包名的规范性,一般都是企业的网址倒过来,所以groupId为org.opendaylight.md.controller.Ted,artifactId为你bundle的名字。最后的package是两者加起来。
2. 框架设计
第一步生成的工程目录下只有一个 app.java文件,删除并 新建 Activator.java文件。并写入一下基础代码



Activator.java文件用于启动bundle。

3.Handler
新建一个Tedhandler.java文件用于收发数据包。本文为收发数据包添加接口,并重写接口里的方法。如下所示



图3 TedHandler

如图3 所示 TedHandler实现PacketProcessingListener接口,实现接口一定要重写接口里面的方法,如下图所示:



重写了onPacketReceived方法,并在方法的作用域内添加消息的实例,并进行通过各个消息的类引用调用我们在controller的YANG里定义的那些消息字段。实现收发包。

4.model模块
controller里model模块



图4 model架构

如图4所示model包含的功能模块,我们要在model-flow-service里面的YANG进行添加协议字段用于匹配openflowplugin,model-inventory也会用到。


编译整个model后会在yang-gen-sal生成对应消息类型的jar包,在刚才说的TedHandler里将生成的依赖包要import进去。然后进入cvniTed目录下编译整个bundle。至此南向协议的代码配置基本完成,然后可以连接一个交换机,用wireshark进行抓包测试。

编译bundle时候可能会碰到这样的问题,如下图所示:


如图中黑色标注所示,这种错误是因为maven进行代码格式的checkstyle,针对这种问题可以选择去pom文件中将checkstyle注释掉。即默认不检查代码格式。Pom路径为如下
图所示:


五、总结
    以上就是关于源代码的下载与编译测试以及启动、三个工程的集体开发,涉及到工程的讲解以及Controller里新建bundle的学习笔记。本人知识水平有限,不足之处还请谅解。
0 0
原创粉丝点击