leafref require-instance允许携带不存在的值

时间:2016-12-29 18:35:32

标签: ietf-netmod-yang

希望明确以下内容:

say, (omitting key for brevity)
list l1 {
   leaf lx {
     leafref /x/y;
     require-instance false;
     mandatory false;
   }
}
  1. 因为强制性是假的, 我可以有一个没有叶lx的l1实例。
  2. 因为require-instance为false,我可以使用lx为任何值(有效类型)的列表实例,无论是否存在相应的/ x / y。
  3. 并且,假设叶子是强制性的;

    list l1 {
       leaf lx {
         leafref /x/y;
         require-instance false;
         mandatory true;
       }
    }
    

    现在, list实例必须携带叶lx。任何值(正确类型)都是有效的,因为require-instance为false。

    正确吗?

    什么时候应该使用这个设施?

1 个答案:

答案 0 :(得分:0)

如果require-instance设置为false,则leafref节点的值空间与引用节点的值空间相同。如果引用节点的值空间特别复杂,有很多限制等,这可能很有用。因此,基本上,模块创建者可以重用之前定义的内容。

如果require-instance设置为true(或省略),那么当没有叶子实例指定leafref节点的值空间时它的价值空间是空的。因此,您无法创建leafref节点的有效实例,因为它没有可能的值。

以下是YANG 1.1 RFC 7950的相关部分:

  

<强> 9.9。 leafref内置类型

     

leafref内置类型仅限于架构树中某些叶子或叶子列表节点的值空间,并且可选地由数据树中的相应实例节点进一步限制。 &#34;路径&#34;子语句(第9.9.2节)用于标识模式树中的引用叶子或叶子列表节点。引用节点的值空间是引用节点的值空间。

以及关于require-instance语句的片段:

  

<强> 9.9.3。 &#34; require-instance&#34;声明

     

[...]如果此声明不存在,则默认为&#34; true&#34;。

     

如果&#34;要求实例&#34;是&#34; true&#34;,这意味着必须存在被引用的实例才能使数据有效。根据第8节中的规则强制执行此约束。

     

如果&#34;要求实例&#34;是&#34; false&#34;,这意味着被引用的实例可能存在于有效数据中。

恕我直言,YANG 1.1 RFC 7950的这一部分有点误导。首先,它表示引用节点的值空间是引用节点的值空间,但稍后它表示默认情况下存在实例存在限制。这意味着,默认情况下,引用节点的值空间od是引用节点的一组叶子实例值,而该节点的完整值空间。