资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
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。PicYANG 模型通过树形结构的节点定义描述了数据模型的层级嵌套结构以及各属性的数据类型。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 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 list StatementThe augment StatementThe when StatementThe union StatementThe grouping StatementThe choice StatementThe anyxml StatementThe rpc StatementThe notification Statement 图 4https:/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 处以下的值才是有效的,没有值,但包含一系列的子节点图 6Grouping Statement定义树形结构的“暂时”树干,这么说主要是区别于 container,从形式上看两者及其相似都是具有树形结构,但在运行过程中 grouping 是无效的数据,只有当它作为衍生类型(uses)存在于 container 中时才有效.图 7Leaf Statementleaf:用来定义属性值,如 name,ID 等。有值,但不包含任何子节点List Statement定义了一组具有相同数据结构的数据,在 json 格式的实例中是一个数组,在xml 格式的实例中是一系列名称和结构相同的 xml 节点 。List 中的各个元素之间通过 key 来唯一标识;例如 nodes图 8兼具 leaf 和 list 的特点,定义了一组相同类型的值。不包含子节点。在 json格式实例中是一个数组且数组中每个元素都是一个值,在 xml 格式的实例中是一系列名称相同值不同的 xml 节点Choice & case Statementchoice:定义的节点结构是不完全确定的。它包含多个 case 子节点,代表不同的分支,分别定义了该节点的一种可能的结构。最终节点的结构是且仅能是所有分支中的一种。AugmentYANG 模型允许一个 module 插入附加节点到 data models 中,包括当前的module(以及子 mudule)或者一个外部 module. 对于供应商来说,增加 vendor-specific 参数到标注的 data model 中可协作使用。图 9Configuration & Operational Data StoreData 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”.RPCrpc:用于定义 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控制器中多种服务和元素中所使用的数据结构。为了描述控制
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号