Import 如何在Yang中导入模块

Import 如何在Yang中导入模块,import,ietf-netmod-yang,Import,Ietf Netmod Yang,我正在尝试构建一个CLI。我选择用“阳”来表达。我是新手,不知道如何导入现有模块。例如,我在github()上找到了一个ospf模块,我想将它导入到我自己的模块中。这能做到吗?怎么做 编辑1: module mininet { /* name space */ namespace "http://tail-f.com/ns/example/mininet"; prefix mininet; import ietf-ospf { prefix ospf; revis

我正在尝试构建一个CLI。我选择用“阳”来表达。我是新手,不知道如何导入现有模块。例如,我在github()上找到了一个ospf模块,我想将它导入到我自己的模块中。这能做到吗?怎么做

编辑1:

module mininet {

 /* name space */
 namespace "http://tail-f.com/ns/example/mininet";
 prefix mininet;

 import ietf-ospf {
     prefix ospf;
     revision-date 2015-03-09
 }

 leaf area-id-type {
     type yang:area-id-type;
 }
}
所以我试着用Piotr Babij帮助这样做。不幸的是,这不起作用。我需要改变什么? 区域id类型是ietf ospf的类型定义。我的错误如下:

mininet.yang:12:3: error: trailing garbage after module
mininet.yang:12:3: error: unterminated statement

您可以使用
import
语句在自己的模块中导入其他模块。在YANG 1.1和YANG 1.0中都有描述。在YANG 1.1中,您可以导入同一模块的两个不同版本。除此之外,
import
语句在两个版本中的工作原理相同

实际上,基本导入如下所示:

 module acme-system {
     namespace "http://acme.example.com/system";
     prefix "acme";

     import ietf-yang-types {
         prefix "yang";
         revision-date 2013-07-15;
     }

     leaf acme-ip-address {
         type yang:dotted-quad;
     }
 }
如果省略可选的
修订日期
语句,则会导入未定义的模块修订。因此,一般来说,使用它是一种很好的练习

必填的
prefix
语句允许您引用导入模块中的内容。在本例中,导入的
ietf-yang-types
模块的前缀为
yang
,因此,很明显
yang:domind quad
指的是该模块中的类型。在您的情况下,您已经将前缀设置为
ospf
,因此您应该具有
ospf:areaid-type
,以引用该模块中的类型定义。如果导入多个模块,则需要确保其前缀是唯一的

此外,您正在导入
ietf ospf
模块的最旧可用版本。我只是希望这是你真正想做的

无论如何,导入模块后,您可以:

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

  • 使用导入模块或其子模块中定义的任何
    扩展名
    功能
    标识

  • must
    path
    when
    语句中使用导入模块架构树中的任何节点,或作为
    augment
    偏差
    语句中的目标节点


在上述示例中,
ietf-yang-types
中的
typedef-dopped-quad
用于
acme系统
模块。

您可以使用
import
语句在自己的模块中导入其他模块。在YANG 1.1和YANG 1.0中都有描述。在YANG 1.1中,您可以导入同一模块的两个不同版本。除此之外,
import
语句在两个版本中的工作原理相同

实际上,基本导入如下所示:

 module acme-system {
     namespace "http://acme.example.com/system";
     prefix "acme";

     import ietf-yang-types {
         prefix "yang";
         revision-date 2013-07-15;
     }

     leaf acme-ip-address {
         type yang:dotted-quad;
     }
 }
如果省略可选的
修订日期
语句,则会导入未定义的模块修订。因此,一般来说,使用它是一种很好的练习

必填的
prefix
语句允许您引用导入模块中的内容。在本例中,导入的
ietf-yang-types
模块的前缀为
yang
,因此,很明显
yang:domind quad
指的是该模块中的类型。在您的情况下,您已经将前缀设置为
ospf
,因此您应该具有
ospf:areaid-type
,以引用该模块中的类型定义。如果导入多个模块,则需要确保其前缀是唯一的

此外,您正在导入
ietf ospf
模块的最旧可用版本。我只是希望这是你真正想做的

无论如何,导入模块后,您可以:

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

  • 使用导入模块或其子模块中定义的任何
    扩展名
    功能
    标识

  • must
    path
    when
    语句中使用导入模块架构树中的任何节点,或作为
    augment
    偏差
    语句中的目标节点


在上述示例中,
ietf-yang-types
中的
typedef虚线四元组
用于
acme系统
模块。

谢谢您的帮助,但它不起作用,我正在编辑原始帖子。我更新了答案。您应该使用前缀来引用导入模块中的内容。谢谢您的帮助,但它不起作用,我正在编辑原始帖子。我更新了答案。您应该使用前缀来引用导入模块中的内容。
我需要更改什么?
嗯,
修订日期
语句缺少分号(
)。您正在使用的工具的解析器因此有点混乱,它会给您提供那些非描述性的错误消息。另外,对于导入模块的类型引用,您仍然使用了错误的
前缀
我需要更改什么?
嗯,
修订日期
语句缺少分号(
)。您正在使用的工具的解析器因此有点混乱,它会给您提供那些非描述性的错误消息。另外,对于导入模块的类型引用,您仍然使用了错误的
前缀