【问题标题】:YANG: How to specify complex typedefsYANG:如何指定复杂的 typedef
【发布时间】:2017-10-17 15:06:46
【问题描述】:

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

  typedef mapping {
      type union {

                type inet:uri;

                 list addresses {
                     type inet:IpAddress;
                 }
         }
    }

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

【问题讨论】:

  • 我也对此感兴趣。前段时间我问过类似的question,但从未得到答案。你能试试我找到的解决方案吗?它对我不起作用,但我怀疑我可能还有其他问题。

标签: opendaylight ietf-netmod-yang


【解决方案1】:

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

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。它旨在指定 single 叶的类型,因此它不能用于创建您想要的结构。当您使用typedef 时,您定义了该类型的所有可能值的集合。这称为值空间。您尝试使用的 union built-in type 旨在组合其中列出的类型的值空间。 list 不是类型,所以不能在那里使用。

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 2013-10-30
    • 2017-01-03
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多