【问题标题】:YANG 1.1: RFC7950 Modules and Submodules backward compatibilityYANG 1.1:RFC7950 模块和子模块向后兼容
【发布时间】:2020-04-10 23:45:58
【问题描述】:

我是 YANG 的新手。在阅读Module and Submodule section时,我对子模块的访问权限感到困惑。

RFC7950#section-5.1 表明:

“一个子模块可以在它所属的模块以及该模块包含的所有子模块中引用任何定义

但它也表明:

“对于要引用外部模块中的定义的模块或子模块,外部模块必须被导入”

所以我的理解是,如果 A 有两个子模块 B 和 C,C 导入 D。 然后 B 可以访问 C 中的任何定义,但不能访问 D 中的定义。

我说的对吗? 如果是,B 可以访问在 C 中使用 D 的定义吗?

提前谢谢你

【问题讨论】:

    标签: rfc ietf-netmod-yang


    【解决方案1】:

    如果 A 有两个子模块 B 和 C,C 导入 D。那么 B 可以访问 C 中的任何定义,但不能访问 D 中的定义。我正确吗?

    是的,你是对的。子模块仍然需要自己的导入。这是为了确保每个文件(注意我没有说“模块”)都有明确定义的前缀映射。 YANG 中不继承前缀。

    B 可以访问在 C 中使用 D 的定义吗?

    B 和 C 看到在 A、B 和 C 中定义的所有定义。当您在 C 中导入 D 时,您没有定义任何新定义,您使重复使用已定义的成为可能。 B 需要显式导入 D 才能查看其定义。

    RFC 旨在被整体阅读。我建议您还阅读“import”语句的部分,然后阅读“include”语句的部分以及您所说的部分。这些部分定义了导入和包含背后的实际机制。 “属于”部分也是相关的。

    进口:

    “import”语句使来自一个模块的定义可用 在另一个模块或子模块中。参数是名称 要导入的模块,语句后跟一个块 包含详细导入信息的子语句。当一个模块 被导入,导入模块可能:

    o 使用在顶层定义的任何分组和 typedef 导入的模块或其子模块。

    o 使用导入文件中定义的任何扩展、功能和身份 模块或其子模块。

    o 在“必须”中使用导入模块架构树中的任何节点, “path”和“when”语句,或作为“augment”中的目标节点 和“偏差”陈述。

    RFC7950, Section 7.1.5

    包括:

    “include”语句用于从子模块生成内容 可用于该子模块的父模块。论据是一个 标识符,它是要包含的子模块的名称。模块是 只允许包含属于该模块的子模块,如 由“属于”声明定义(参见第 7.2.2 节)。

    当一个模块包含一个子模块时,它包含的内容 子模块到模块的节点层次结构中。

    RFC7950, Section 7.1.6

    所属:

    “belongs-to”语句指定了 子模块属于。参数是一个标识符,它是 模块。

    子模块必须只包含在它所在的模块中 属于或属于该模块的另一个子模块。

    强制性的“前缀”子语句为模块分配前缀 子模块所属的。模块中的所有定义 子模块所属的所有子模块都可以通过 使用前缀。

    RFC7950, Secction 7.2.2

    请注意,“include”语句的范围规则在 YANG 1 (RFC6020) 中是不同的。我所描述的仅适用于 YANG 1.1。在 YANG 1 中,子模块需要显式包含另一个子模块才能看到它的定义,而一个子模块看不到包含模块中定义的定义。

    您还可以阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 2015-12-11
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多