您的位置:首页 > 运维架构

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

2015-04-22 09:00 288 查看

一、摘要

本文主要在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的学习笔记。本人知识水平有限,不足之处还请谅解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: