我正在学习杨。我想要一个由Uri和IpAddress列表组成的typedef。所以我尝试了以下内容:
typedef mapping {
type union {
type inet:uri;
list addresses {
type inet:IpAddress;
}
}
}
我后来想在容器中使用这个定义的类型。但上面的定义给了我一个编译错误。 YANG typedef是否类似于c ++ typedef?我怎样才能在YANG中定义这样的结构?
答案 0 :(得分:2)
根据您的描述,在我看来,您似乎想要创建一个具有两个字段的结构的可重用定义:单个uri
和addresses
列表。这项工作的最佳工具是YANG's grouping。 RFC表示"分组就像一个"结构"或者记录"在传统的编程语言中#34;以下分组应该是您正在寻找的:
grouping mapping {
leaf uri {
type inet:uri;
}
list address {
type inet:IpAddress;
}
}
然后,您可以通过以下示例中的the uses
statement引用此类grouping
:
container specific_mapping {
uses mapping;
}
和
list my_mapping {
key "uri";
uses mapping;
}
以下实例文档与上述内容兼容:
<specific_mapping>
<uri>some uri</uri>
<address>address 1</address>
<address>address 2</address>
</specific_mapping>
和
<my_mapping>
<uri>some uri</uri>
<address>address 1</address>
<address>address 2</address>
</my_mapping>
<my_mapping>
<uri>other uri</uri>
<address>address 3</address>
<address>address 4</address>
</my_mapping>
typedef
声明在YANG 1.1的this section中有解释。 RFC 7950.它用于指定单个叶的类型,因此不能用于创建您想要的结构。使用typedef
时,您可以为该类型定义所有可能值的集合。这称为值空间。您尝试使用的union
built-in type旨在合并其中列出的类型的值空间。 list
不是类型,因此无法在那里使用。