如何使用 leafref 在 YANG 模型中实现递归?
How to implement recursion in YANG model using leafref?
我有以下 XML 想用 YANG 建模。 XML 包含一个节点列表,每个节点包含一个邻居节点列表。
<nodes>
<node>
<id>1</id>
<node>
<id>2</id>
</node>
</node>
<node>
<id>3</id>
<node>
<id>4</id>
</node>
</node>
</nodes>
请在下面找到我尝试创建的 YANG 模型。可惜Yang不支持分组循环引用
grouping node {
list node {
leaf id {
type int32;
}
uses node;
}
}
container nodes {
uses node;
}
我在 draft-ietf-netmod-routing-cfg-16 and on ietf mail archive 中看到模拟递归的一种方法是使用 leafref。上面的 xml 如何用分组和 leafref 建模?
如您所说,不支持使用分组的递归。
最简单的方法是拥有一个平面节点列表,其中每个节点都有一个父节点,称为 leafref。
类似于:
container nodes {
list node {
key id;
leaf id { type int32; }
leaf parent-id {
type leafref {
path "../../node/id";
}
}
}
}
等价的 XML 将是:
<nodes>
<node>
<id>1</id>
<node>
<node>
<id>2</id>
<parent-id>1</parent-id>
</node>
<node>
<id>3</id>
<node>
<node>
<id>4</id>
<parent-id>3</parent-id>
</node>
</nodes>
你可以做相反的事情,一个节点引用它的子节点(通过 leafref 叶列表)而不是它的父节点。
当然,直接递归使用同一个数据节点是可行的:
container nodes {
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
// and so on
}
}
}
}
但这不允许无限深的层次结构。不过,我会避免这种模式,而不是干净的模型设计。
我有以下 XML 想用 YANG 建模。 XML 包含一个节点列表,每个节点包含一个邻居节点列表。
<nodes>
<node>
<id>1</id>
<node>
<id>2</id>
</node>
</node>
<node>
<id>3</id>
<node>
<id>4</id>
</node>
</node>
</nodes>
请在下面找到我尝试创建的 YANG 模型。可惜Yang不支持分组循环引用
grouping node {
list node {
leaf id {
type int32;
}
uses node;
}
}
container nodes {
uses node;
}
我在 draft-ietf-netmod-routing-cfg-16 and on ietf mail archive 中看到模拟递归的一种方法是使用 leafref。上面的 xml 如何用分组和 leafref 建模?
如您所说,不支持使用分组的递归。 最简单的方法是拥有一个平面节点列表,其中每个节点都有一个父节点,称为 leafref。 类似于:
container nodes {
list node {
key id;
leaf id { type int32; }
leaf parent-id {
type leafref {
path "../../node/id";
}
}
}
}
等价的 XML 将是:
<nodes>
<node>
<id>1</id>
<node>
<node>
<id>2</id>
<parent-id>1</parent-id>
</node>
<node>
<id>3</id>
<node>
<node>
<id>4</id>
<parent-id>3</parent-id>
</node>
</nodes>
你可以做相反的事情,一个节点引用它的子节点(通过 leafref 叶列表)而不是它的父节点。
当然,直接递归使用同一个数据节点是可行的:
container nodes {
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
// and so on
}
}
}
}
但这不允许无限深的层次结构。不过,我会避免这种模式,而不是干净的模型设计。