说明: 本文原发布于SDNLAB并做适当修改: http://www.sdnlab.com/18270.html
ODL中Yang模型的通知(Notification)简介及报文接收方法
摘要
本文简要介绍了Opendaylight中Yang模型的通知(Notification)实现技术,并基于Notification方式实现了接收从网络中上送到控制器报文, 并且此方法在Opendaylight版本(铍-Beryllium, 硼-Boron)实现并运行正常。
阅读本文之前,请移步Opendaylight开发入门的前两篇,其中的某些细节本文略过。
OpenDayLight(硼Boron版本)实战开发入门(一)
1 引言
SDN网络是一种控制和转发分离的网络,转发行为由控制器控制。流表下发有先应式(ProActive)和反应式(ReActive)两种方式的区别。 先应式的方法预先下发流表项,存在流表项对应的报文经过网络时直接转发,效率高,但是比较占用流表存储空间。反应式(ReActive)是当网络中第一次出现相应的报文时,才下发相应的流表项,对初始报文有延迟,但是不占用过多流表项。两种方式各有优缺点。
在以Opendaylight作为控制器的网络中,实现反应式(ReActive)响应,需要SDN应用接收到报文上报的消息。Opendaylight的编程模型从AD-SAL(API驱动的服务抽象层) 到MD-SAL(模型驱动的服务抽象层)转变的过程中,编程方式发生了变化。
下面进行说明。
1.1 AD-SAL方式的报文接收接口
在较早的Opendaylight版本(例如氢等), 接收报文需要实现服务接口IListenDataPacket, 接口的方法receiveDataPacket()可以实现报文的接收,如下所示:
@Override
public PacketResult receiveDataPacket(RawPacket inPkt){
……
returnPacketResult.CONSUME;
//return PacketResult.IGNORED;
}
这种方法在较早版本的Opendaylight中可以使用,而在比较新的版本中则不再采用这种方法。
1.2 MD-SAL方式的通知(Notification)简介
模型驱动(MD-ModelDriving)的方式,其中模型指的是YANG模型,YANG模型定义了通知(Notification)和远过程调用(RPC)的标准格式。关于YANG模型的具体情况请参阅[1, 2]。
Opendaylight中通知(notification)的实现方式简介如下:
通知(notification)是一种发布订阅/模式(Publish/Subscribe)。发布者发布通知,接收者接收通知,从而实现消息的交互功能。
定义了YANG模型后,ODL会自动生成相应的Java代码。以如下的YANG定义为例:
module mypacket {
......
notification say{
leaf message{
type string;
}
}