【问题标题】:How to augment an enumeration in YANG如何在 YANG 中增加枚举
【发布时间】:2020-08-21 11:03:44
【问题描述】:

有没有办法在 YANG 的另一个模块中增加枚举?就我而言,没有办法将所有值放在定义枚举的第一个模块中。

知道枚举在分组内如下:

grouping mygrouping {
    ...
    container mycontainer {
        ...
        list mylist {
            leaf type {
                type enumeration {
                    enum type1
                    enum type2
                    ...
                    enum typen
                }
            }
        }
    }
}

新模块中使用了分组,但我无法扩充叶类型以在枚举中添加新类型。

【问题讨论】:

    标签: schema ietf-netmod-yang


    【解决方案1】:

    在 YANG 中,枚举用于众所周知的静态选项集。 对于可扩展选项,您可以使用 identityrefs。 这允许在多个文件中使用身份,并定义一个具有 identityref 类型的叶子,然后它可以采用已定义身份的任何值。

    将其视为分散的枚举。它并不是真正的“增强”,但它确实允许在不更改原始模块的情况下为值引入新选项。 当然,这确实假设您实际上可以通过枚举更改原始叶子。

    YANG RFC 中的身份定义:https://www.rfc-editor.org/rfc/rfc6020#section-7.16 关于枚举与身份的一些参考:https://www.rfc-editor.org/rfc/rfc8407#section-4.11.1


    更新:“某种”增强枚举的一种选择是在 typedef 中定义原始枚举,然后通过联合扩展它:

    typedef myenum {
        enum val1 { value 1; }
        enum val2 { value 2; }
        enum val3 { value 3; }
    }
    
    ...
    
    leaf myleaf {
        type union {
            type myenum;
            type enumeration {
                enum val4 { value 4; }
                enum val5 { value 5; }
            }
        }
    }
    

    所以在这种情况下,myleaf 可以具有值 val1、val2、val3、val4、val5,这意味着原始枚举确实是“增强的”。

    当然,这意味着它不是真正的枚举,而是两个枚举之间的联合,它们的排列方式使它们的值不会相交(联合确实允许这样做)。在客户端和服务器端,这可能是也可能不是简化 - 取决于实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多