YANG模型介绍及语法 - 图文
更新时间:2024-01-19 15:53:01 阅读量: 教育文库 文档下载
- vgg19模型介绍推荐度:
- 相关推荐
YANG 模型介绍及语法
YANG模型是什么?
YANG模型是一种数据建模语言,用来建模由NETCONF协议、NETCONF远端过程调用(RPCs)、和NETCONF通知(notification)操作的配置数据和状态数据。YANG建模NETCONF协议的操作和内容层(RFC4741,Section 1.1)。
YANG模型特性:
?建模XML格式数据并由控制器元素提供功能:具有自己的语法格式,可以无差地转化为XML格式,同时通过yangtools plugin可以生成相应的java接口、类及方法等,为OpenDaylight内部数据(控制器元素)处理编程提供了便利。 ?定义语义元素和他们的关系,模拟所有的元素作为一个系统,YANG模型是一种树形结构的建模语言,通过YANG模型本身的语法和语义关系可以看出其定义方式的灵活性。
?YANG数据模型的XML特性提供了一种自表述数据的方式,控制器元素和采用控制器北向接口API的应用可以以一种原生格式与数据模型一起调用。
?利用一种模式语言简化控制器元素和应用的开发。模块中提供功能的开发者可以定义一个模型,从而可以创建对于所提供功能的更简单的、数据类型的API。因此降低了通过服务抽象层提供的数据结构的错误交互。
YANG模型与NETCONF
由最初YANG模型的定义可知,YANG模型与NETCONF密切相关,其产生是为了对NETCONF协议所操作的数据进行建模。最初的网络管理协议SNMP也有对应的建模语言SMI。下图给出NETCONF/YANG与SNMP/SMI相关概念对比。
图1
如图中所示,NETCONF在很多方面体现出对于SNMP协议的优越性,NETCONF协议由XML编码,以SSH加密,采用TCP连接,体现出更好的安全性和可靠性。
下面简单引出NETCONF协议的configuration data store。 Pic
YANG模型通过树形结构的节点定义描述了数据模型的层级嵌套结构以及各属性的数据类型。YANG具有自己的语法格式,也可以无差别地转换为XML格式,称之为YIN。可以使用第三方工具pyang进行转换。pyang地址:
http://www.yang-central.org/twiki/pub/Main/YangTools/pyang.1.html
接下来将会对YANG模型的语法和语义进行描述,说明在YANG中数据模型是如何定义的,并且以XML格式展示,以及NETCONF操作如何来操作数据。(https://tools.ietf.org/html/rfc6020#section-1)
YANG模型语义及语法
YANG模型主要内容
图2
正如之前所提到的,除去header information、imports&includes、Type definitions之外,YANG模型的主要内容Configuration&Operational 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作为namespace的一种简写,其次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.
YANG TYPES
Data Type
YANG模型的Data Type包括Base Type和Derived Type, Base Type即为一个简单的类型,Derived Type或许是typedefs定义的一个Base Type或许是grouping定义的具有结构的类型。接下来在Typedef Statement和Grouping Statement中将会进一步介绍Derived Type。Base Type
The leaf Statement
The leaf-list Statement
The container Statement
The must Statement
The list Statement
The augment Statement
The when Statement
The union Statement
The grouping Statement
The choice Statement
The anyxml Statement
The rpc Statement
The notification Statement
图4
https://wiki.opendaylight.org/view/YANG Tools:YANG to Java Mapping
Typedef Statement
在Typedef中还包涵诸如“rang”、“length”的细节定义,有兴趣可查看rfc6020
图5
图中定义实现了一个“percent”类型(Derived Type),
Container Statement
作为data store有效入口的存在,可以理解为从container处以下的值才是有效的,没有值,但包含一系列的子节点
图6
Grouping Statement
定义树形结构的“暂时”树干,这么说主要是区别于container,从形式上看两者及其相似都是具有树形结构,但在运行过程中grouping是无效的数据,只有当它作为衍生类型(uses)存在于container中时才有效.
图7
Leaf Statement
leaf:用来定义属性值,如name,ID等。有值,但不包含任何子节点
List Statement
定义了一组具有相同数据结构的数据,在json格式的实例中是一个数组,在xml格式的实例中是一系列名称和结构相同的xml节点 。List中的各个元素之间通过key来唯一标识;例如nodes
图8
兼具leaf和list的特点,定义了一组相同类型的值。不包含子节点。在json格式实例中是一个数组且数组中每个元素都是一个值,在xml格式的实例中是一系列名称相同值不同的xml节点
Choice & case Statement
?choice:定义的节点结构是不完全确定的。它包含多个case子节点,代表不同的分支,分别定义了该节点的一种可能的结构。最终节点的结构是且仅能是所有分支中的一种。
Augment
YANG模型允许一个module插入附加节点到data models中,包括当前的
module(以及子mudule)或者一个外部module. 对于供应商来说,增加vendor-specific参数到标注的data model中可协作使用。
图9
Configuration & Operational Data Store
Data store中的数据存储分两种形式:config和operational ,config持有由应用所写的数据,而operational反映了设备的实际状态,从设备读取数据,如果没有错误即可以看到设备的当前实际信息。
config data store中查询流表通常不包含以路由为目的的流表项(这就是为什么operational方式可以查询到table-miss流表项,即out-port:
controller,而config方式查询不到),但是OpenDaylight开发者表示这个方面未来可以改变,而之所以这样是因为这些流通过外部的流服务(不经过dataStore和config)发送到设备,然后这些流由设备通过数据形式以operational的形式重新报回。
config具有相对于控制器的生命周期(甚至重启都可以依然存活)。这些流表项由应用添加到这里并且当有合适的设备时就会发送给它。
原则上讲openflowplugin和controller都不应该动用config。这个是为应用程序而保留的,比如FRM监听到改变就写到config里面以发送流到设备。这个可以用来做预配置-应用程序可以为一些尚未存在的设备写一些“有用的“流,一旦设备存在相关的流就会下发到其中,而不用任何应用程序的动作。 Config 一般用来下发配置(post,put),也可以获取信息(get)
Operational一般是获取实际设备信息(get),config data store的内容和operational data store的内容可能不同,但是不同模块之间两者的设计可能不太相同,举例说明:
对于openflow协议:operational反映设备的实际信息,假如下发配置,流程是config->device->operational
对于bgp协议:下发配置流程是:config->operational->device
在YANG模型中,只有当 “config true”存在时这段数据才是config data store的内容,否则均为operational data store,不定义则默认”config false”.
RPC
rpc:用于定义netconf的一个rpc操作。它可能包含input和output子节点,分别是该rpc操作所需要的输入和输出数据结构。若没有则表明该操作不需要输入数据或者没有输出数据。
NOTIFICAION
除了rpc,yang还有一个类似的“notification”, notification用于定义netconf的通知消息的内容,也是用来定义一个服务。两者的区别在于rpc是一对一的,即单播,而notification是多播的,当Provider提交一个notification时,所有的订阅该服务的Consumer都会收到通知,如典型的PacketIn消息,所谓的订阅即实现该notification的接口。rpc生成的接口类名后缀都是Service。nontification生成的接口类名后缀是Listener。
OpenDaylight南北向接口
针对以上讨论了这么多关于YANG模型的知识, YANG模型除却本身作为
NETCONF协议的数据建模语言之外,在OpenDaylight中的应用诞生了众所周知的MD-SAL。
MD-SAL简述
对于服务抽象层的Model-driven方法体现出一种统一北向和南向API以及SDN控制器中多种服务和元素中所使用的数据结构。
为了描述控制器元素所提供的数据结构,YANG模型作为一种服务和数据抽象的建模语言就起到了作用。
MD-SAL(Model Driven Service Abstraction Layer)模型驱动服务抽象层的特别就体现在模型(即YANG模型)驱动。如前所述,YANG模型可以无差别地转换为XML格式,同时可以通过yangtools生成java代码,这就是YANG模型实现对OpenDaylight南北向接口数据建模的关键。
下面以实际示例的形式展现YANG模型定义与南北向接口的关系。
YANG模型与北向接口
图3、图6、图7所示为一个简单的北向接口示例的YANG模型截图,在完成YANG模型、java程序实现以后,启动起OpenDaylight可以在北向得到如下RESTCONF接口:
图12
为了看的清楚接下来采用restclient做展示针对以上YANG模型定义,可以知道相应的配置下发为:
图13
下发之后可以通过get方法查到刚刚所下发的配置,如下图所示
图14
以上简单示例了一个yang模型对北向接口数据结构的定义模式,其中还有很多诸如operational data store& config data store、list& key以及格式书写的细节,由于时间关系就暂且不展示了。
YANG模型与南向接口
YANG模型与南向接口的关系主要由java语言体现,也即yangtools将YANG模型生成相应的java代码,对于这部分将以ovsdb代码作展示。
在ovsdb->southbound中定义了ovsdb的具体南向接口,截取southbound-api中ovsdb.yang中的一条主线如下所示,其实由此我们同时也可以分析出ovsdb的北向接口,即为http://localhost: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模型介绍及语法 - 图文01-19
《电工基础》试题库及答案01-19
行业协会筹备工作03-27
发动机基础知识08-08
2011年全国各地中考生物试题考点分类汇编考点2 动物的行为08-28
绩效管理与业务能力提升24套6分题答案(部分整理)11-12
电控党小组事迹材料05-16
2017-2022年中国砂布行业市场分析与发展前景预测报告(目录)08-30
第八章 报表以及图形输出01-30
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 语法
- 模型
- 图文
- 介绍
- YANG
- 湖南省质量技术监督局创建省直机关 文明标兵单位实施方案
- 自治区攻关计划项目 - 自治区项目可行性研究报告
- 本科英语专业毕业论文提纲
- 成交的八大步骤
- 民生工作自查报告
- 脚手架安全管理规范
- 广西良庆经济开发区园区循环化改造实施方案
- 2018年中国电子血压计行业市场分析发展前景报告目录
- DNA鉴定技术及其在刑事侦查中的应用
- 小学生学习之星事迹材料(精简版)
- 儿科复习题
- Diablo2 暗黑破坏神 2.11b版本符文之语(图文版)
- 幸福心理学尔雅课后及考试答案2016年10月
- fluent软件功能操作脚本--入门教程
- 中国银行公司业务贷后管理操作手册(试行)
- 仲恺农业工程学院白云校区规划情况简介
- EDA-VerilogHDL试题
- 赛事大师之乒乓球实例说明书
- 小学生良好书写习惯培养研究结题报告
- 鼎利Pilot Pioneer 外场操作手册 - 图文