专注NETCONF/YANG技术科普,接受任何问题,包括我答不上来的问题。欢迎光临!欢迎提问:链接
一、container:容器的概念
container是schema tree里面的单实例的内部数据节点。container的下面会有一系列的子节点(包括:container、leaf、list等)。container本身也属于data node,但是container只有一个节点名称,并没有值。
1.1 container的单实例特点
“单实例”指表项仅有一条数据。举例:
如系统的全局属性:系统名称、系统时间,整机只有一个取值;
或者某个对象是多实例的,但对于单个对象实例仅有一个属性。如:接口的mtu值,接口本身是多实例的(设备上有很多个接口),但一个接口只能有一个mtu值。
container对应单实例节点。
二、两种风格的container:普通container和presence container
YANG支持两种类型的容器,一种是仅用于组织数据节点层次结构的容器,我们称为普通container或者NP-container(non-presence container);另一种是container节点是否存在在数据树中具有明确含义的容器,我们称为存在性容器或者presence container。
第一种普通容器,容器本身没有意义,container存在的意义仅仅是将相关的子节点聚合在一起,让YANG模型在组织形式上更清晰。因此光有普通容器而没有任何子节点(也没有含default值的叶子节点)这样的container是没有意义的。
第二种是存在性容器,顾名思义,此种容器本身的存在与否具有某种意义,代表着某种使能类的数据。
我在ietf-ntp@2022-07-05.yang文件中找到了以下这个例子:
container ntp是存在性容器,仅有此container,没有子节点表示使能了ntp协议开关。按照注释:是能ntp协议开关后,系统会尝试与NTP服务器进行系统时钟的同步。
container ntp下有个“container authentication”,是普通容器。“container authentication”的作用是将NTP协议认证的所有业务模型放在一起,在组织结构上更加清晰。NTP协议认证的业务模型包括了一个认证使能的开关,和多组认证证书(list authentication-keys)
//在ietf-ntp@2022-07-05.yang的基础上做了部分删减
container ntp {
// <-- 存在性容器
presence "NTP is enabled and system should attempt to synchronize the system clock with an NTP server from the 'ntp/associations' list.";
description "Configuration parameters for NTP";
leaf port {
type inet:port-number {
range "123 | 1024..max";
}
default "123";
description "Specify the port used to send and receive NTP packets.";
reference "RFC 5905: Network Time Protocol Version 4...";
}