译OpenDaylight控制器:YANG Schema和Model
Posted 水共禾刀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了译OpenDaylight控制器:YANG Schema和Model相关的知识,希望对你有一定的参考价值。
1. Schema 定义
绑定无关数据模式(BI Data Schema)描述了模块提供的数据结构、过程和通知。
该Schema基于YANG,但是为更好地适应Java类系统并支持Controller用例,一些术语和定义被改编。
Schema用于定义:
- 模块(Modules) - 一组对外提供的功能,特征,类型,RPC和数据结构
- 特征(Features)
- 类型(Types ) - 可以在模块中本地使用的数据类型,包含它的模块或子模块以及其他模块
- 数据结构(Data Structures) - 数据树中数据节点的定义
- RPC() - 模块操作
- 通知(Notifications)
- 数据之间的关系
- 验证约束
- 其他模块的扩展及其功能(扩充)
- YANG扩展
2. 为支持控制器YANG进行的修改和扩展
(1). 处理多个模块修订
本文档介绍了一个隔离层(separation),基于模块的修订本来隔离数据,RPC和通知,以同时支持客户端使用的多个不同版本,而不会有因意外更改数据而产生的风险,这些数据的语义在不同的修订本之间改变。
由于同一模块的多个修订本可以共存在系统中,架构必须提供组件,该组件在不同模块修订之间翻译数据。
(2).QName
原生XML QName由本地元素名称和XML命名空间组成。为了支持版本控制,增加了模块修订。
在YANG的上下文中,QName是定义的节点、类型、过程或通知的全名。 QName由XML命名空间、YANG模型版本和定义类型的本地名称组成。它用于防止具有相同本地名称但不同Schema的节点之间的名称冲突。
QName =(XMLNamespace,Revision,LocalName),其中:
- XMLNamespace - 分配给具有定义的元素,类型,过程或通知的YANG模块的命名空间。
- Revision- 描述元素的YANG模块的修订版
- LocalName - 在YANG模块中为此节点定义的YANG Schema标识符
(3).RPCs
在原生Netconf / YANG用例中,RPC用于建模Netconf服务端提供给Netconf客户端的功能和API,在MD-SAL上下文中,RPC用于建模由生产者提供并由消费者消费的功能;
3. YANG Schema的Java Model
下图展示了YANG Schema的绑定无关表示:
Binding Generator组件中的YANG解析器生成Java Model对象。
4. 未知Schema节点和扩展处理
YANG规范允许存在未在原生YANG规范中定义的模式节点。通常,这些节点在具有一个或多个扩展语句的模块中定义,但是没有以计算机可以理解的形式(例如可以使用节点的有效使用)进一步定义该节点的语义。
为了建模上述场景,我们添加了“未知Schema节点”的概念。未知Schema节点可以是任何Schema节点的子节点。它用于存储扩展信息,并将其提供给了解其语义的组件。
5. 扩展节点类层次结构
- ExtensionDefinition - 定义YANG扩展名的Schema节点。 ExtensionDefinition的QName是YANG语句的基础,用作扩展名的标识符。
- ExtensionSchemaNode - 由扩展名定义的语句的表示。请注意,此模式节点有两个QNames:
name - YANG模块中的模式节点的名称。它是基于扩展的参数和YANG模块的前缀。
nodeTypeQName - 定义此扩展模式节点的扩展定义的Qname。
6. 处理由扩展定义的节点
扩展定义模式节点的实现和处理超出了YANG Schema和model的范围。
原文链接:https://wiki.opendaylight.org/view/OpenDaylight_Controller:YANG_Schema_and_Model
以上是关于译OpenDaylight控制器:YANG Schema和Model的主要内容,如果未能解决你的问题,请参考以下文章
OpenDaylight(一):如何用postman控制ODL查看和下发流表
SDN实战: Practice SDN/OpenFlow with LINC-Switch and OpenDaylight