yang学习

YANG学习

1 YANG语言概述

  • YANG是一种数据建模语言。
  • YANG模型定义了数据的层次化结构,可用于基于NETCONF的操作。建模对象包括配置、状态数据、远程过程调用(RPC)和通知。它可以对NETCONF客户端和服务器端之间发送的所有数据进行一个完整的描述。(YANG模型最终呈现是.yang为后缀的文件)

YANG语言的特点:

  • 基于层次化的树状结构建模。
  • 数据模型以模块(module)和子模块(submodule)呈现。
  • 可以和基于XML的语法YIN模型无损转换。
  • 定义内置的数据模型和允许可扩展类型。

YANG文件与XML之间的关系

在这里插入图片描述

YANG文件就类似模板,填上数据,就可以生成一致的XML,设备使用YANG文件,校验XML、解析出数据。

2 Yang的基本元素

module是YANG的基本单元,是写yang文件的基本框架,包括以下几种类型语句:
1、head语句(yang-version/namespace/prefix)
2、连接语句(import/include)、
3、元信息(organization/contract)、
4、revision语句、
5、定义语句(container/leaf/leaf-list/grouping等等)。

3 yang模型的语法结构

​ YANG模型是一种树形结构,是由无数的叶子、列表、叶列表、容器组成的描述整个设备的一棵树。下面介绍YANG模型的五种主要类型的数据节点,包括叶节点(leaf)、列表节点(list)、叶列表节点(leaf-list)、容器节点(container)和组(grouping)。

3.1 基本数据类型

​ 在定义叶节点和叶列表节点时,须指定值类型。YANG原生支持的基础数据类型有binary、bits、boolean、decimal64、empty、enumeration、instance-identifier、int8/16/32/64、leafref、string、uint8/16/32/64、union。注意没有float,double这种类型。

在这里插入图片描述

3.2 Leaf Node

  • Leaf节点用于定义一个简单指定类型的变量,使用关键字“leaf”申明。
  • 在Leaf节点内有子声明和值,没有子节点
leaf host-name {
    type string;
    description "hostname for system";
}

yang + 数据 = xml,比如数据 为: www.tengxu.com,对应的xml就如下

<host-name>www.tengxu.com</host-name>

3.3 leaf-list

  • Leaf List用于定义一个数组类型变量,使用“leaf-list”关键字申明。
  • 叶列表定义了特定类型的值序列。它是只有一个叶子的列表,只能创建和删除。作用相当于只有一个节点的表。
leaf-list board-config {
    type string;
    description "list of board config";
}

对应的xml

<board-config>tng2spl</board-config>
<board-config>tngcpl</board-config>

3.4 List Nodes

  • 列表用于定义一个更高层次的数据节点。一个List节点使用”key“唯一标识,可以包含多个leaf节点。子节点可以是容器、叶节点、叶列表。
list board {
    key "boardname";
    leaf boardname {
        type string;
    }
    leaf boardid {
        type uint16;
    }
    leaf boardtype {
        type string;
    }
}

定义了一个名为baord的list,这个list包含了三个leaf,分别为 boardname, boardid, boardtype;其中boardname为key,即boardname是唯一值。其他值可以相同。

<board>
	<boardname>tng2spl</boardname>
    <boardid>0x1234</boardid>
    <boardtype>mux_xxx</boardtype>
</board>
<board>
	<boardname>tng2cpl</boardname>
    <boardid>0x1235</boardid>
    <boardtype>dmux_xxx</boardtype>
</board>

3.5 容器 container

容器节点用于在子树中组织相关的节点。容器只有子节点而没有具体值。容器可以包含任何数量的任何类型(包括叶节点,列表节点,叶列表节点和容器)的子节点。

container systeminfo {
    container login {
        leaf username {
            type string;
        }
        leaf passwd {
            type string;
        }
        list user {
            key "name";
            leaf name {
                type string;
            }
            leaf loginpasswd {
                type string;
            }
        }
    }
}
<systeminfo>
	<login>
    	<username>xiaoming</username>
        <passwd>123456</passwd>
        <user>
        	<name>xiaoming</name>
            <loginpasswd>123456</loginpasswd>
        </user>
        <user>
        	<name>xiaohong</name>
            <loginpasswd>23456</loginpasswd>
        </user>
        <user>
        	<name>xiaohei</name>
            <loginpasswd>654123</loginpasswd>
        </user>
	</login>
</systeminfo>

3.6 grouping

Grouping用于定义可以重复使用的节点,一般和uses一起使用。

grouping stdport {
    leaf port {
        type uint16;
    }
    leaf board {
        type uint16;
    }
    leaf neid {
        type uint32;
    }
}

container oxc {
    leaf freq {
        type uint32;
    }
    leaf width {
        type uint32;
    }
    leaf-list srcdst {
        uses stdport;
    }
}
<oxc>
	<freq>1965000000</freq>
    <width>50000</width>
	<srcdst>
    	<port>12</port>
        <board>1</board>
    </srcdst>
    <srcdst>
    	<port>13</port>
        <board>1</board>
    </srcdst>
</oxc>

4 yang应用

4.1 统一模型

​ yang生成proto,proto自动生成代码,rpc通信等。

5 参考博客

YANG模型简介(一)-云社区-华为云 (huaweicloud.com)

(47条消息) YANG建模语言_yang模型_illusion2000的博客-CSDN博客

yang模型中rpc_NETCONF、YANG、ncclient理论和实战(上)_shift0ogg的技术博客_51CTO博客

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值