SDNLAB技术分享(三):OpenDaylight中编程抽象的实现



  • OpenDaylight中编程抽象的实现-图1.png

    这次主要分三部分说一下,首先我会粗略介绍一下maple system。

    之后将以这个为例来阐述一下ODL模块的开发过程。

    最后会说明一下ODL模块的结构。

    OpenDaylight中编程抽象的实现-图2.png

    目前SDN方面已经有了数据和网络层面的抽象,但是对于SDN的编程一直有着诸多的不便。譬如

    • 1.openflow协议相当于一种申明式的语言,只是去规定了交换机去做什么而非如何去做。
    • 2.如此一来,基于openflow的SDN开发会将很多底层的细节暴露给开发者,这样开发者需要明确并且掌握的细节会非常之多,也会导致代码变得十分繁琐。
    • 3.现在市面上的控制器中对于语言使用的灵活性也并不高,并且没有一个在编程层面的抽象。

    OpenDaylight中编程抽象的实现-图3.png

    如果我们定义一个算法模型,可以很抽象得定义一个函数f,对于已经给予的包与网络的参数生成可以重复利用的openflow控制协议。

    第二部分

    OpenDaylight中编程抽象的实现-图4.jpg

    那再简要概括该系统的一些作用之后,我们来看一下在ODL种如何实现这一功能。

    由于项目开始是在今年2月,所以这里使用的helium版本。

    图中红色方框中的就是所开发的模块,于其左侧绿色的模块相同,这一模块也是需要用到ODL中十分重要的SAL。

    一些ODL模块的共有特征

    OpenDaylight中编程抽象的实现-图5.png

    一般在ODL模块中会有这些目录,第一个目录会存放源代码,而后三个则是用于编译后的文件,这一点相信对ODL有过开发经验的会非常熟悉。

    OpenDaylight中编程抽象的实现-图6.png

    从一个入门的角度来说:

    首先需要定义的是该项目各目录下的POM文件,这一点上ODL中l2switch里的pom文件是一个很好的范例:

    OpenDaylight中编程抽象的实现-图7.png

    在MD-SAL的运用部分, https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:MD-SAL_App_Tutorial这个链接里是一个很好的例子,概括来说,一个运用在激活之后首先需要在SAL上注册,之后即可监听ODL中指定的数据变动,以及对其进行修改。

    Q&A

    Q1:吾辈似猫
    话说,那个算法f,是个什么样子呢?
    这个f是一个抽象的概念,具体由开发者定义,而maple system则可以将用户定义的f编译成如openflow之类的底层协议。

    youtube链接里是一个英文的视频,前半部分是对于f的一些具体的介绍。

    Q2:吾辈似猫
    回到这个f上来~~~假设说我们能实现这样一个f。那么数据包的流程会变成什么样呢?还是首包入控制器么?然后首包经过这个算法的处理,生成流表?
    对,还是手包进入控制器,处理后生成流表

    Q3:上海-HL
    假如开发了一个功能类似于l2switch的模块,怎样把它装载到karaf当中呢?
    在pom文件,以及features文件夹下的features.xml文件里修改就可以做到,karaf还有个优势是可以热加载,也可以直接将编译后的模块文件复制到karaf文件夹下加载模块。

    Q4:cqupt-晓武
    修改pom.xml文件只需要修改工程下面的就行吧?子目录下面的pom也要修改吗?
    需要修改,一般子目录下的比较简单,只是告知maven如何编译该目录

    Q5:上海-HL
    能将单独编译后的模块加载到正在运行的锂版本ODL中的karaf?
    可以,在helium版本中将编译后的jar文件放到system下,lithium版本我不太了解。

    分享嘉宾朱士罡:目前就读于芝加哥大学计算机专业硕士。

    原文链接: http://www.sdnlab.com/14164.html


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待