如何增加 YANG 中的枚举

How to augment an enumeration in YANG

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

知道枚举在一个分组内如下:

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

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

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

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

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


更新:'sort of' 增加枚举的一个选项是在 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,这意味着原始枚举确实是 'augmented'。

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