我是新来的杨。在阅读模块和子模块部分时,我混淆了子模块的访问权。
5.1 7950#第5.1节指出:
子模块可以引用,它所属的模块中的任何定义,以及模块所包含的所有子模块中的定义
但它也指出:
要使模块或子模块引用外部模块中的定义,必须导入外部模块。
因此,我的理解是,如果A有两个子模块B和C,则B可以访问C中的任何定义,但不能访问D中的定义。
我说的对吗?如果是,B可以访问C中使用D的定义吗?
提前谢谢你
发布于 2019-12-18 13:23:54
如果A有两个子模块B和C,C导入D,那么B可以访问C中的任何定义,而不是D中的定义。
是的,你是对的。子模块仍然需要自己的导入。这是为了确保每个文件(注意,我没有说“模块”)有一个定义良好的前缀映射。前缀在杨中不被继承。
B能访问C中使用D的定义吗?
B和C参见在A、B和C中定义的所有定义,当您在C中导入D时,您没有定义任何新的定义,而是使重用已经定义的定义成为可能。B需要对D进行明确的导入,以查看其定义。
RFC的意思是要读一个完整的。我建议您也阅读“导入”语句的部分,然后阅读“包括”语句的部分,以及您声明的部分。这些部分定义了导入和包含的实际机制。“属于-to”一节也是相关的。
进口:
“导入”语句使来自一个模块的定义在另一个模块或子模块中可用。参数是要导入的模块的名称,语句后面是包含详细导入信息的子语句块。当一个模块被导入时,导入模块可以:o使用在导入模块或其子模块的顶层定义的任何分组和ty对联子模块。O使用导入模块或其子模块中定义的任何扩展、特性和标识。O使用导入模块的模式树中的“必须”、“路径”和“何时”语句中的任何节点,或作为“扩展”和“偏差”语句中的目标节点。RFC7950,7.1.5节
包括:
"include“语句用于使子模块的内容对该子模块的父模块可用。参数是一个标识符,它是要包含的子模块的名称。模块只允许包含属于该模块的子模块,这是由“属于- to”语句定义的(参见7.2.2节)。当模块包括子模块时,它将子模块的内容合并到模块的节点层次结构中。RFC7950,第7.1.6节
属于-属于:
“属于- to”语句指定子模块所属的模块。参数是一个标识符,它是模块的名称。子模块只能包含在它所属的模块或属于该模块的另一个子模块中。强制“前缀”子语句为子模块所属的模块分配前缀。子模块所属的模块中的所有定义及其所有子模块都可以使用前缀访问。RFC7950,第7.2.2节
请注意,在YANG 1 (RFC6020)中,包含语句的范围规则是不同的。我所描述的只适用于杨1.1。在YANG 1中,子模块需要显式地包含另一个子模块来查看其定义,而子模块不能看到包含模块中定义的定义。
您还可以阅读更多的这里。
https://stackoverflow.com/questions/59391755
复制相似问题