logo资料库

Opendaylight学习及开发初级教程.pdf

第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
资料共46页,剩余部分请下载后查看
Opendaylight 学习文档 qq 群#北邮-天依
目录 1. 概述 .................................................................................................................... 3 1.1 Opendaylight 简介 .................................................................................................................... 3 1.2 本文档组织结构 ...................................................................................................................... 7 2. 感受 Opendaylight ............................................................................................... 7 2.1 环境搭建 ................................................................................................................................. 7 2.2 获取代码 .................................................................................................................................. 9 2.3 安装 mininet ........................................................................................................................... 11 2.4 controller 使用及功能介绍 ................................................................................................. 11 2.5 Openflowplugin 功能及使用方法 .......................................................................................... 14 2.6 Hydrogen .............................................................................................................................. 16 3 Maven 和OSGI 基础 ...................................................................................... 16 3.1 Maven .................................................................................................................................. 16 3.2 OSGI ..................................................................................................................................... 20 4 使用IDE ......................................................................................................... 30 4.1 使用 Eclipse ........................................................................................................ 31 4.1.1 导入 controller 项目 ........................................................................................................... 31 4.2 使用 Intellij idea .................................................................................................. 38 5 Controller 代码分析 ..................................................................................... 39 5.1 代码目录 ............................................................................................................................. 40 5.2 收发包过程简介(packet service) ................................................................................... 41 6 Opendaylight 重要技术及文档 ...................................................................... 44
1. 概述 1.1 Opendaylight 简介 Opendaylight(Opendaylight 官网)是 Linux 基金会的一个合作项目。目前, 包括十二个项目,每一个项目都有自己的代码库(Opendaylight 项目列表)。这些 项目中与 openflow 相关的项目的有 controller、openflowjava 和 openflowplugin, 目前,controller 仅支持 openflow 1.0, openflowplugin 是一个单独的项目,将来 它的 core 部分要集成到 controller 中,使 controller 支持 openflow 1.3 及以上的版 本。Opendaylight 的厂商成员分为铂金成员,金牌成员和银牌成员。 图 1 Opendaylight 阵营 Opendaylight controller 使用 java 编写,运行在 JVM 上,理论上来说可以部 署到任何支持 JAVA 的平台上,但是其官网文档推荐的最佳运行环境为最新的 Linux(Ubuntu 12.04+)及 JVM 1.7+。OpenDaylight Controller 提供了一个模块化 的开放 SDN 控制器,它提供了开放的北向 API(开放给应用的接口),同时南 向支持多种包括 openflow 在内的多种 SDN 协议。底层支持混合模式的交换机和 经典的 Openflow 交换机。 Open Daylight Controller 在设计的时候遵循了六个基本的架构原则(以下来
自 opendaylight 官方文档):  运行时模块化和扩展化(Runtime Modularity and Extensibility):支持在控 制器运行时进行服务的安装、删除和更新。  多协议的南向支持(Multiprotocol Southbound):南向支持多种协议。  服务抽象层(Service Abstraction Layer):南向多种协议对上提供统一的北 向服务接口。 MD-SAL( Model Driven Service Abstraction Layer )是 opendaylight 的一个主要 feature。  开放的可扩展北向 API(Open Extensible Northbound API):提供可扩展的 应用 API,通过 REST 或者函数调用方式。两者提供的功能要一致。  支持多租户、切片(Support for Multitenancy/Slicing):允许网络在逻辑上 (或物理上)划分成不同的切片或租户。控制器的部分功能和模块可以管 理指定切片。控制器根据所管理的分片来呈现不同的控制观测面。  一致性聚合(Consistent Clustering):提供细粒度复制的聚合和确保网络 一致性的横向扩展(scale-out)。 Opendaylight controller 的架构框架:
图 2 Opendaylight controller 架构 如图 2 所示,南向通过 plugin 的方式来支持多种协议,包括 OpenFlow1.0、 1.3,BGP-LS 等。这些模块被动态挂载到服务抽象层(SAL),SAL 为上层提供 服务,将来自上层的调用封装为适合底层网络设备的协议格式。控制器需要获取 底层设备功能、可达性等方面的信息,这些信息被存放在拓扑管理器(Topology Manager)中。其他的组件,包括 ARP handler、Host Tracker、Device Manager 和 Switch Manager,则为 Topology Manager 生成拓扑数据。 控制器为应用(App)提供开放的北向 API。支持 OSGI 框架和双向的 REST 接口。OSGI 框架提供给与控制器运行在同一地址空间的应用,而 REST API 则提供给运 行在不同地址空间的应用。所有的逻辑和算法都运行在应用中。 控制器自带了 GUI,这个 GUI 使用了跟应用同样的北向 API,这些北向 API 也可以被其他 的应用调用。
Opendaylight 的 openflowplugin 和 openflowjava 项目的目标是支持 openflow 1.3 及以上的协议,由于 openflow 协议设计时并没有考虑后向兼容性(例如 openflow 1.0 和 openflow 1.3 的连接建立发生了很大的变化),Openflow 1.3 plugin 采用和 Openflow 1.0 完全不同的设计。集成到 controller 的 openflow 1.0 plugin 是 由 openflow plugin 和 openflowj 两部分实现,其中 openflowj 是 openflow 1.0 消息 的静态库,它被 openflow 1.0 plugin 依赖,。Openflow 1.3 plugin 中的 openflowjava 没有了 Openflow 1.3 的消息库(使用了 YANG,支持 Openflow 1.3 以上的版 本 ? ? ? ) 还 包 括 了 连 接 建 立 和 协 议 编 解 码 部 分 , OpenflowPlugin 依 赖 Openflowjava 实现消息处理等功能。Openflowjava 和 OpenflowPlugin 设计框图如 下: 图 3 Openflowplugin 和 Openflowjava 设计框图 如图 3 所示,左侧为 openflowjava 的功能框图,右侧为 Openflowplugin 的框 图。
1.2 本文档组织结构 本文档关注与 openflow 相关的 controller,openflowjava 和 openflowplugin 三 个项目,重点分析 controller。本文本着由浅入深的原则,首先介绍如何获取相 关项目代码,如何编译,运行;其次介绍 OSGI 框架和 maven 的一些基础概念, 与此同时,分析 opendaylight controller 的代码结构,接着介绍如何将 controller 导入到 Eclipse 和 Intellij idea 中(之所以把这步放在 OSGI 和 maven 介绍之后, 是因为导入工程到 IDE 的过程需要对 OSGI 和 maven 有一些了解),分析下这两 种 IDE 在编译调试中各自的优缺点;然后是代码的分析;最后列举 opendaylight 的重要技术及文档。 Opendaylight 有很多重要的技术需要了解,每种技术都需要花一段时间研究, 例如 OSGI 框架的使用,OSGI 服务的注册和调度,maven 工程中 bundle 的编写 方法,sal,YANG,config,等。由于时间精力的限制,本文在最后简单分析了 controller 收发包过程中 openflow plugin, SAL 和上层应用间的关系。文章中对 不太明确和有疑问的地方采用红色字体加问号来标识。 2. 感受 Opendaylight 这里的 Opendaylight 指的是 controller,openflowjava 和 openflowplugin,它 们使用不同的代码库,但编译运行环境相同。 2.1 环境搭建 需要的环境如下: 1) Ubuntu 12.04 32bit 2) JVM 1.7+
3) Maven 3.04+ 对于第 2)和 3)需说明的是,最好先配臵 java 环境再安装 maven,因为我 这边的情况是我本来先安装 maven,挺费时间的(如果网速慢),后来删除 jdk-6, maven 也被删掉了 Step1: 配臵 java 环境  执行 java –version 查看使用的 java 版本 这个版本的 ubuntu 装的应该是 jdk 1.6  执行 apt-get remove openjdk-6-jre-lib openjdk-6-jre-headless 删除 jdk 1.6 相关的 东西 注意:执行这个命令的时候,需要观察下 remove 过程,会发现它会自动安 装 java jre 1.7 的东西,但是不要认为就不需要装 jdk 1.7 了,因为 ubuntu 默 认安装的东西是不全的,至少我安装的过程中遇到了问题。确认是否 java jdk 是否安装全面的方法是,查看 jdk 的安装目录是否完全 flight@flight-virtual-machine:~$ ls /usr/lib/jvm/java-7-openjdk-i386/lib/ ct.sym dt.jar ir.idl jconsole.jar jexec orb.idl sa-jdi.jar tools.jar 以上这个“tools.jar”是必不可少的,因为 maven 编译的时候对它有依赖。如果 发现 java-7-openjdk-i386 下没有 lib 文件夹,那么继续执行下一步  执行 sudo apt-get -y install openjdk-7-jdk 注意:依然要看一下安装过程,如果发现似乎什么都装不上,那么请执行 apt-get remove openjdk-7-jre-lib openjdk-7-jre-headless 删除 ubuntu 给你默认安
分享到:
收藏