odl

OpenDaylight中DataStore Tree Notification示例

  DataStore有三种监听事件DataChangeListener、DataTreeChangeListener和DOMDataTreeChangeListener,他们具体的区别可以参考这篇博客,本文主要介绍一下DataTreeChangeListener。DataTreeChangeListener可以用来监听整棵树或者某个子树,子树结点的改变将引发由该子节点递归到根结点整个支路结点都发生改变,原理是version号的变化,具体可以参考我之前的博客。 实验 yang文件   包含多级container的yang文件定义如下: container threshold { description "Threshold configuration"; container temperature {…

Read more

OpenDaylight DataStore分析

  网上关于DataStore内部架构和实现细节太少了,大部分都是讲如何使用DataStore,而很少有分析从client开始读写到内存到硬盘的数据流,也没有相关性能分析之类的。由于不能满足『知其所以然』的需求,我只能自己看了。然而,官方的文档真的是杂而乱,在社区问了几个问题也没有反馈……无力吐槽了。以下是我吐血看文档和源码总结的,版本为Beylium,如果有不当之处,希望各位指出。   本文首先简单讲一下MD-SAL的大体架构,然后介绍DataStore内容,包括其内存db和硬盘db。内存db也就是所谓的In-Memory-DataStore主要存储两棵树:Operational Tree和 Config Tree。硬盘db对内存db序列化后写入硬盘,包括snapshot和journal两部分,用于重启后恢复内存db。 1.MD-SAL &emsp…

Read more

NeXt UI Tutorial Supplement

  NeXt is an awesome toolkit developed by Cisco. It is an HTML5/JavaScript based toolkit for network web application which can be used to draw network topology, e.g., data center, laboratory network experiment. It has been added in OpenDaylight community which is an open source community of SDN controller.   There are some tutorials that we can follow online like Next-Tutorials…

Read more

在OpenDaylight DLUX中添加新的模块

  本文主要介绍如何在DLUX中添加一个模块,加完后我们可以通过http://[host-ip]:8181/index.html的左边侧导航栏访问到我们的页面。添加过程需要对ODL,DLUX和一堆前端的框架比较熟悉,否则会碰到一堆问题,折腾了我好长一段时间,现记录如下,也给有同样问题的人一点帮助。   以下是我从头开始操作的过程以及遇到的问题,注意,本文不是直接安装,而是通过源码编译进行安装。 提前安装软件:grunt、npm、bower。 在github上下载controller,dlux和odlparent,切换到同一分支,然后执行mvn clean install -DskipTests进行分别编译,需要首先安装odlparent,再controller和dlux。此处,注意分支要一致。对于controller和odlparent编译错误较少,…

Read more

OpenDaylight VTN源码及架构分析

  VTN是opendaylight中负责租户隔离的工程,最近对源码和架构研究了一段时间,现将总结如下,希望大家转载注明出处。   从VTN架构图我们可以看出,VTN共分为两个模块:VTN Manager和VTN Coordinator。VTN通过映射机制将虚拟网络资源(比如port,bridge,route)映射到物理资源上,包在租户内转发其实是在物理资源上进行转发,隔离机制是利用OpenFlow协议,转发时通过在支持OpenFlow的交换机上通过流表判断包的转发。 1.VTN Manager   VTN Manager位于controller内部,相当于控制器的一个plugin。它提供了REST接口对其进行增删改查。它还提供了对Openstack l2的网络api。以下是VTN Manager和VTN Coordinator的…

Read more

odl训练营及黑客马拉松比赛总结

  为期一周的odl训练营终于结束了,本来有很多话想要写下来的,等真正开始写的时候却又不知道写些啥了。大概先介绍一下这次训练营吧,这次活动主要是由思科负责,思科,BAT,运营商等牵头举办的,请来了odl的开发团队来给我们讲解odl。这次活动真心是太nice了,几个odl开发团队的老外特别nice,各种问题都耐心解答,思科的support team也非常nice,全程陪同,每天根据我们的反馈不断进行调整,连最后一天马拉松比赛我们通宵的时候他们也有人陪同,还有中饭,下午茶,晚饭,真心是贴心到家了。满分无商量。   这次培训主要讲解如何在odl中开发一个plugin,其实这些东西在社区都可以获取到,不过有人带着你step-by-step上手更快点。北向提供RESTful api,南向协议为netconf,大部分都和我们以前开发相同,不同之处在于南向协议不是…

Read more

OpenDaylight如何集成不同项目到controller中

  我下载了不同的项目,一个vtn,一个ovsdb,还一个controller,但是vtn项目和ovsdb项目又自带controller。我想同时使用vtn和ovsdb成问题。上网搜了好多,感觉odl的资料杂乱而不全,还是在社区上面提问,一个人帮助了我,现记录如下: 本人环境:Helium版本/stable/helium,3个项目都一样。 编译并运行controller $ cd ${CONTROLLER_DIR}/karaf/opendaylight-karaf $ mvn clean install $ cd target/assembly $ ./bin/karaf 编译vtn manager和coordinator(后者并非必须),其中coordinator由于使用C++编写,并非java,需要下载一些环境,具体参考这里。manager一般都能成功编译,参考官网…

Read more

OpenDaylight中一次ping触发的数据流

  下图给出了一次ping触发的大概数据流,由于模块较多,未能全部画出来,一些其他的模块比如UserManager,SwitchManager等都用到了,但是未被我画出来。注意,在Hydron版本中转发报文用的是SimpleForwarding,在Helium用的是l2switch。 host1 ping host4,首先发送一个arp报文,交换机收到arp报文,由于本身流表没有,上传到controller 由于是of 1.0的协议,走的of 1.0 模块,of1.0收到后上传到SAL层。 SAL层之上多个模块监听IListenDataPacket收包,每个监听IListenDataPacket的都会收到一份拷贝。Arp报文将会被ARPHandler模块接收。 ARPHandler通知HostTracker学习源主机地址。 HostTracker学习源主…

Read more

opendaylight ping模块开发中遇到的问题总结

  最近开始学习opendalight二次开发,从官网的给定的文档以及李呈的文档。不过配置时总有点问题,由于之前没怎么倒腾过java这一套东西,包括osgi, RESTful api, maven等这一套。现总结如下,如果有谁有错误的可以帮助到:   新手常问的问题就是:为什么我和xxx配置一模一样,我的就不行?好吧,其实我也一样。 定义yang文件,然后mvn install。此处不会有太大问题,要是mvn报错一般是因为网速不行,有些包download不下来,换个网速快点的就可以了。 创建bundle实现之前yang文件定义的接口。此处会有较大的问题,在配置pom.xml时,我按文档上给的配置,然后将mvn后生成的包拷到controller的plugin中(该文件存放所有运行的jar包),启动一直报错: BundleException: Th…

Read more

OpenDaylight OpenvSwitch ping实验

  在本机安装odl和ovs,本来想安装mininet,结果由于centos 6的版本安装真心麻烦到吐,各种软件依赖,依赖完还是失败T_T。自己用ovs+namespace模拟mininet主机。安装完的主机和交换机的拓扑: 首先启动odl hydron版本 执行脚本: #!/bin/bash #input $1 = controller ip, $2 = controller port if [[ $# -ne 2 ]] then echo "parameter illegal" exit 1 fi #del bridge allbr=`ovs-vsctl --timeout=1 list-br` for i in $allbr do ovs-vsctl del-br $i done ovs-vsctl add-br br…

Read more