1

我正在学习YANG。我想要一个由 Uri 和 IpAddress 列表组成的 typedef。所以我尝试了以下方法:

  typedef mapping {
      type union {

                type inet:uri;

                 list addresses {
                     type inet:IpAddress;
                 }
         }
    }

我稍后想在容器中使用这个定义的类型。但是上面的定义给了我一个编译错误。YANG typedefs 是否类似于 c++ typedefs?如何在 YANG 中定义这样的结构?

4

1 回答 1

2

根据您的描述,在我看来,您想创建一个具有两个字段的结构的可重用定义:单个uriaddresses. 完成这项工作的最佳工具是YANG 的分组。RFC 说“分组就像传统编程语言中的“结构”或“记录”。以下分组应该是您正在寻找的:

grouping mapping {
   leaf uri {
     type inet:uri;
   }
   list address {
     type inet:IpAddress;
   }
 }

然后您可以grouping通过 以下示例中uses语句引用此类:

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的本节中进行了解释。RFC 7950。它旨在指定叶的类型,因此它不能用于创建您想要的结构。当您使用时,typedef您定义了该类型的所有可能值的集合。这称为价值空间。您尝试使用的union内置类型旨在组合其中列出的类型的值空间。list不是类型,因此不能在那里使用。

于 2017-10-17T07:06:46.603 回答