共计 1841 个字符,预计需要花费 5 分钟才能阅读完成。
一、Yang 的起源
早在 2003 年,IETF 成立了一个 NETCONF 工作组,提出一种基于 XML 的网络配置管理协定,也就是 NETCONF(Network Configuration Protocol),因为该协定的配置性能十分弱小,同时兼顾监控和故障治理,平安验证和访问控制,所以失去业界的统一认可,所以宽泛采纳 netconfig 来配置网络。
NETCONF 协定分为传输层、RPC 层、操作层和内容层。其中,内容层是惟一没有标准化的层,于是一种新的建模语言 YANG 产生了,它的指标是对 NETCONF 数据模型、操作进行建模,笼罩 NETCONF 协定的操作层和内容层
二、Yang 的根本元素
module
module 是 YANG 的根本单元,是写 yang 文件的根本框架,包含以下几种类型语句:
1、head 语句 (yang-version/namespace/prefix)
2、连贯语句 (import/include)、
3、元信息 (organization/contract)、
4、revision 语句、
5、定义语句 (container/leaf/leaf-list/grouping 等等)。
YANG 模块有如下的布局:
submodule
submodule 是局部模块定义,用于对模块提供反对。
submodule 文件内容布局如下:
submodule 示例如下:
留神:
submodule 必须通过 belongs-to 语句应用,submodule 只能由 belong-to 指定的 module 或这个指定 module 的其它 submodule 进行 include,其它 module(包含 submodule) 都不能 include。同时子模块不能够 import 它的父模块
namespace
module 中必须定义所有节点都属于一个特定的 XML 命名空间,由一个 URI 指定命名空间。例如
Import revision
import 或 include 语句蕴含一个 revision-date 的子句,所有引入的 YANG 定义来自要导入或引入的指定 revision 模块。通过引入特定的模块订正,咱们能够独立公布演变中的模块。YANG 提供了指定的规定,如何公布进化中的模块并且放弃向后的兼容性。比方:
YANG 的数据类型
根本数据类型
YANG 根本数据类型如下。
更加具体的形容请参看 rfc6020 协定,例如
派生类型
YANG 采纳 typedef 语句来定义派生类型。例如以下是定义一个派生类型 percent,限度类型是内建类型 uint8:
三、YANG 数据节点
leaf
leaf 定义的节点只有一个值,是一个叶子节点,只能有一个实例。
leaf-list
leaf-list 定义一组雷同类型的叶节节点,相似数组。与 leaf 区别在于 leaf 只有一个游戏实例,而 leaf-list 能够有多个实例。例如:
container
container 次要定义一个 schema 树的外部节点,它自身没有任何值和意义,只是作为一系列子节点的父亲存在,只有一个实例。例如
list
list 形容了一组节点的汇合,它像一张数据库表一样,表的每一行用 key 来标识其主键,有多个实例。例如
grouping
一个 grouping 定义一个能够重复使用的节点汇合,应用时通过 use 语句,并可通过 refine 语句进行改良。例如
应用 grouping 时,通过 use 语句,它会将 grouping 定义的节点复制到以后的 schema 树 (如果有 refine,并进行更新)。
choice
一个 choice 节点定义了一个可供选择项的汇合,每一个选择项都会在某种状况下存在。一个 choice 由许多分枝,通过 case 子语句定义。比方
anyxml
anyxml 示意任何未知的数据定义。
augment
YANG 提供 augment 语句,扩充一个模块档次,将节点增加到一个已存在的模块或子模块当中。指标结点能够是一个 container, list, choice, case, rpc, input, output, notification 等。
augment 能够是条件的,应用 when,www.sangpi.com 语句,当特定条件满足时,新节点才会呈现。
notification
notification 语句用来定义 Notification 内容,内容数据的定义同 YANG 数据定义一样。上面例子应用上文例子定义的 connection。
rpc
rpc 语句用来定义 NETCONF 协定的 RPCs,input 和 output 应用 YANG 数据定义语句。如下例子,建模一个激活软件图片的 RPC: