如何增加 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'。
当然,这意味着它不是真正的枚举,而是两个枚举之间的并集,它们的值不会相交(并集允许这样做)。这可能是也可能不是客户端和服务器端的简化 - 取决于实现。
有没有办法在 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'。
当然,这意味着它不是真正的枚举,而是两个枚举之间的并集,它们的值不会相交(并集允许这样做)。这可能是也可能不是客户端和服务器端的简化 - 取决于实现。