YANG模型介绍及语法_第1页
YANG模型介绍及语法_第2页
YANG模型介绍及语法_第3页
YANG模型介绍及语法_第4页
YANG模型介绍及语法_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、YANG 模型介绍及语法YANG模型是什么?YANG模型是一种数据建模语言,用来建模由NETCONF协议、NETCONF远端过程调用(RPCs)、和NETCONF通知(notification)操作的配置数据和状态数据。YANG建模NETCONF协议的操作和内容层(RFC4741,Section 1.1)。 YANG模型特性:建模XML格式数据并由控制器元素提供功能:具有自己的语法格式,可以无差地转化为XML格式,同时通过yangtools plugin可以生成相应的java接口、类及方法等,为OpenDaylight内部数据(控制器元素)处理编程提供了便利。定义语义元素和他们的关系,模拟所有

2、的元素作为一个系统,YANG模型是一种树形结构的建模语言,通过YANG模型本身的语法和语义关系可以看出其定义方式的灵活性。YANG数据模型的XML特性提供了一种自表述数据的方式,控制器元素和采用控制器北向接口API的应用可以以一种原生格式与数据模型一起调用。利用一种模式语言简化控制器元素和应用的开发。模块中提供功能的开发者可以定义一个模型,从而可以创建对于所提供功能的更简单的、数据类型的API。因此降低了通过服务抽象层提供的数据结构的错误交互。YANG模型与NETCONF由最初YANG模型的定义可知,YANG模型与NETCONF密切相关,其产生是为了对NETCONF协议所操作的数据进行建模。最

3、初的网络管理协议SNMP也有对应的建模语言SMI。下图给出NETCONF/YANG与SNMP/SMI相关概念对比。 图1如图中所示,NETCONF在很多方面体现出对于SNMP协议的优越性,NETCONF协议由XML编码,以SSH加密,采用TCP连接,体现出更好的安全性和可靠性。下面简单引出NETCONF协议的configuration data store。PicYANG模型通过树形结构的节点定义描述了数据模型的层级嵌套结构以及各属性的数据类型。YANG具有自己的语法格式,也可以无差别地转换为XML格式,称之为YIN。可以使用第三方工具pyang进行转换。pyang地址:http:/www.y

4、/twiki/pub/Main/YangTools/pyang.1.html接下来将会对YANG模型的语法和语义进行描述,说明在YANG中数据模型是如何定义的,并且以XML格式展示,以及NETCONF操作如何来操作数据。(/html/rfc6020#section-1)YANG模型语义及语法YANG模型主要内容图2正如之前所提到的,除去header information、imports&includes、Type definitions之外,YANG模型的主要内容Configuration&Operati

5、onal data declarations和Action(RPC)&Notification declarations对应了YANG模型定义中的“NETCONF协议、NETCONF远端过程调用(RPCs)、和NETCONF通知(notification)”。下面将通过基本示例来介绍以上所述主要内容。YANG HEADER图3上图所示是一个YANG文件的HEADER,其中module name(vxlan)要与YANG文件的文件名一致(即这个YANG文件的名字为vxlan.yang),namespace用来唯一标识这个YANG模型与其他YANG模型不同,prefix作为namespac

6、e的一种简写,其次import用来定义导入的其他YANG模型,注意到在后面的大括号中包括这个YANG模型的prefix和revision-data。revision用来唯一定义这个YANG模型的revision。其余一些organization、contact、description定义仅用于描述。YANG模型是一个XML格式定义语言。另外,针对上图示例中没有体现的“include”来说,include是用于将sub-module引入到module里面,这个module不一定要有一个文件。Submodule没有namespace而是以belongs-to来表征属于哪一个main module.

7、 YANG TYPESData TypeYANG模型的Data Type包括Base Type和Derived Type, Base Type即为一个简单的类型,Derived Type或许是typedefs定义的一个Base Type或许是grouping定义的具有结构的类型。接下来在Typedef Statement和Grouping Statement中将会进一步介绍Derived Type。Base Type The leaf StatementThe leaf-list StatementThe container StatementThe must StatementThe lis

8、t StatementThe augment StatementThe when StatementThe union StatementThe grouping StatementThe choice StatementThe anyxml StatementThe rpc StatementThe notification Statement 图4/view/YANG Tools:YANG to Java Mapping Typedef Statement在Typedef中还包涵诸如“rang”、“length”的细节定义,有兴趣可查

9、看rfc6020图5图中定义实现了一个“percent”类型(Derived Type),Container Statement作为data store有效入口的存在,可以理解为从container处以下的值才是有效的,没有值,但包含一系列的子节点图6Grouping Statement定义树形结构的“暂时”树干,这么说主要是区别于container,从形式上看两者及其相似都是具有树形结构,但在运行过程中grouping是无效的数据,只有当它作为衍生类型(uses)存在于container中时才有效.图7Leaf Statementleaf:用来定义属性值,如name,ID等。有值,但不包含任

10、何子节点List Statement定义了一组具有相同数据结构的数据,在json格式的实例中是一个数组,在xml格式的实例中是一系列名称和结构相同的xml节点 。List中的各个元素之间通过key来唯一标识;例如nodes图8兼具leaf和list的特点,定义了一组相同类型的值。不包含子节点。在json格式实例中是一个数组且数组中每个元素都是一个值,在xml格式的实例中是一系列名称相同值不同的xml节点Choice & case Statement´choice:定义的节点结构是不完全确定的。它包含多个case子节点,代表不同的分支,分别定义了该节点的一种可能的结构。最终节点

11、的结构是且仅能是所有分支中的一种。AugmentYANG模型允许一个module插入附加节点到data models中,包括当前的module(以及子mudule)或者一个外部module. 对于供应商来说,增加vendor-specific参数到标注的data model中可协作使用。图9Configuration & Operational Data StoreData store中的数据存储分两种形式:config和operational ,config持有由应用所写的数据,而operational反映了设备的实际状态,从设备读取数据,如果没有错误即可以看到设备的当前实际信息。c

12、onfig data store中查询流表通常不包含以路由为目的的流表项(这就是为什么operational方式可以查询到table-miss流表项,即out-port:controller,而config方式查询不到),但是OpenDaylight开发者表示这个方面未来可以改变,而之所以这样是因为这些流通过外部的流服务(不经过dataStore和config)发送到设备,然后这些流由设备通过数据形式以operational的形式重新报回。config具有相对于控制器的生命周期(甚至重启都可以依然存活)。这些流表项由应用添加到这里并且当有合适的设备时就会发送给它。原则上讲openflowplu

13、gin和controller都不应该动用config。这个是为应用程序而保留的,比如FRM监听到改变就写到config里面以发送流到设备。这个可以用来做预配置-应用程序可以为一些尚未存在的设备写一些“有用的“流,一旦设备存在相关的流就会下发到其中,而不用任何应用程序的动作。Config 一般用来下发配置(post,put),也可以获取信息(get)Operational一般是获取实际设备信息(get),config data store的内容和operational data store的内容可能不同,但是不同模块之间两者的设计可能不太相同,举例说明:对于openflow协议:operatio

14、nal反映设备的实际信息,假如下发配置,流程是config->device->operational对于bgp协议:下发配置流程是:config->operational->device在YANG模型中,只有当 “config true”存在时这段数据才是config data store的内容,否则均为operational data store,不定义则默认”config false”.RPCrpc:用于定义netconf的一个rpc操作。它可能包含input和output子节点,分别是该rpc操作所需要的输入和输出数据结构。若没有则表明该操作不需要输入数据或者没有

15、输出数据。NOTIFICAION除了rpc,yang还有一个类似的“notification”, notification用于定义netconf的通知消息的内容,也是用来定义一个服务。两者的区别在于rpc是一对一的,即单播,而notification是多播的,当Provider提交一个notification时,所有的订阅该服务的Consumer都会收到通知,如典型的PacketIn消息,所谓的订阅即实现该notification的接口。rpc生成的接口类名后缀都是Service。nontification生成的接口类名后缀是Listener。OpenDaylight南北向接口针对以上讨论了这

16、么多关于YANG模型的知识, YANG模型除却本身作为NETCONF协议的数据建模语言之外,在OpenDaylight中的应用诞生了众所周知的MD-SAL。MD-SAL简述对于服务抽象层的Model-driven方法体现出一种统一北向和南向API以及SDN控制器中多种服务和元素中所使用的数据结构。为了描述控制器元素所提供的数据结构,YANG模型作为一种服务和数据抽象的建模语言就起到了作用。MD-SAL(Model Driven Service Abstraction Layer)模型驱动服务抽象层的特别就体现在模型(即YANG模型)驱动。如前所述,YANG模型可以无差别地转换为XML格式,同时

17、可以通过yangtools生成java代码,这就是YANG模型实现对OpenDaylight南北向接口数据建模的关键。下面以实际示例的形式展现YANG模型定义与南北向接口的关系。YANG模型与北向接口图3、图6、图7所示为一个简单的北向接口示例的YANG模型截图,在完成YANG模型、java程序实现以后,启动起OpenDaylight可以在北向得到如下RESTCONF接口:图12为了看的清楚接下来采用restclient做展示针对以上YANG模型定义,可以知道相应的配置下发为: 图13下发之后可以通过get方法查到刚刚所下发的配置,如下图所示图14以上简单示例了一个yang模型对北向接口数据结

18、构的定义模式,其中还有很多诸如operational data store& config data store、list& key以及格式书写的细节,由于时间关系就暂且不展示了。YANG模型与南向接口YANG模型与南向接口的关系主要由java语言体现,也即yangtools将YANG模型生成相应的java代码,对于这部分将以ovsdb代码作展示。在ovsdb->southbound中定义了ovsdb的具体南向接口,截取southbound-api中ovsdb.yang中的一条主线如下所示,其实由此我们同时也可以分析出ovsdb的北向接口,即为http:/localhos

19、t:8181/config/network-topology:network-topology/topology/topology-id/node/node-id/termination-point/tp-id/下面我们来找一下这样的YANG模型会生成什么样子的java代码:跟从YANG模型定义的路径就可以追踪到想要找到的接口生成代码,对于这个例子来说,YANG模型生成的代码如上图所示。上图是针对augment来说所生成的代码,图中容易看到,在ovsdb-port-interface-attributes中所具有的leaf节点,在ovsdbTerminationPointAugmentationBuilder.java中都有相应的getter和setter方法(如图中灰色部分的getOptions)。在中很容易搜到yang-java mapping的页面,在此不再敖述。Tips:仔细观察yang模型与生成的代码不难发现,本例中的list都是具有interface的java文件,而leaf则没有,yang模型生成的代码多很容易混乱,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论