前言
NETCONF(Network Configuration Protocol),该协议的配置功能非常强大,同时兼顾监控和故障管理,安全验证和访问控制,得到业界的一致认可,被广泛用来配置网络
NETCONF协议分为传输层、RPC层、操作层和内容层。其中,内容层是唯一没有标准化的层,于是一种新的建模语言YANG产生了,它的目标是对NETCONF数据模型、操作进行建模,覆盖NETCONF协议的操作层和内容层
以下详细介绍yang文件的主要元素与语法格式
一、Modules与Submodules
一个module包含三种类型的声明
- module-header statement(模块头声明) —— 描述了该module,给出了module相关的信息。
- revision statement(版本声明)—— 描述了该module的历史信息。
- definition statement(定义声明) —— 定义了数据模型的内容部分。
二、yang数据建模的节点类型
2.1 leaf nodes
一个leaf nodes包含了像integer或string这样的简单数据,并且没有子节点,如:
leaf host-name{
type string;
description "hostname";
}
2.2 leaf-list nodes
一系列的leaf nodes,每个leaf都有特定类型的值
2.3 container node
将相关的节点归总到一个subtree就是container,只能包含节点,没有值。一个container可能会包含任何类型的任何数量的子节点(包括leafs,lists,leaf-lists以及containers)。
yang表示:
container system {
container login {
leaf message {
type string;
description
"Message given at start of login session";
}
}
}
2.4 list nodes
定义了一系列的列表项,通过名为key的leaf值唯一确定,可以包含任意类型、任意数目的子节点(包括leafs,lists,containers)
通过以上四种类型节点的组合,即可定义module
三、 state node
节点带有"config false"标签时,他的子结构就打上了state data的标签,不可配置,能通过netconf操作获取
四、 内嵌类型
+---------------------+-------------------------------------+ | Name | Description | +---------------------+-------------------------------------+ | binary | Any binary data | | bits | A set of bits or flags | | boolean | "true" or "false" | | decimal64 | 64-bit signed decimal number | | empty | A leaf that does not have any value | | enumeration | Enumerated strings | | identityref | A reference to an abstract identity | | instance-identifier | References a data tree node | | int8 | 8-bit signed integer | | int16 | 16-bit signed integer | | int32 | 32-bit signed integer | | int64 | 64-bit signed integer | | leafref | A reference to a leaf instance | | string | Human-readable string | | uint8 | 8-bit unsigned integer | | uint16 | 16-bit unsigned integer | | uint32 | 32-bit unsigned integer | | uint64 | 64-bit unsigned integer | | union | Choice of member types | +---------------------+-------------------------------------+
五、
typedef 定义衍生类型
grouping 可重用节点组
refine 重定义 重写特定的声明覆盖原有grouping的定义
choice case 申明分离不相容的节点,类似于java中的switch case
augment “augment”声明定义了在数据模型树形结构中,新的节点插入的位置。“when”声明了新节点生效的时间。
RPC(Remote Procedure Call) yang文件可以定义声明RPC的输入输出参数
notification yang可以用来为netconf的notification做内容建模
https://www.cnblogs.com/castielangel/p/10083277.html