0

我正在尝试构建一个 CLI。我选择使用“阳”来做到这一点。我是新手,不知道如何导入现有模块。例如,我在 github ( https://github.com/YangModels/yang/blob/master/vendor/cisco/xe/1631/ietf-ospf.yang ) 上找到了一个 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 帮助来做到这一点。不幸的是,这不起作用。我需要改变什么?area-id-type 是 ietf-ospf 的 typedef。我遇到的错误是以下一个:

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

1 回答 1

3

您可以使用该import语句在您自己的模块中导入其他模块。它在YANG 1.1 的RFC 7950和 YANG 1.0 的RFC 6020中都有描述。在 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;
     }
 }

如果省略可选revision-date语句,则导入未定义的模块修订。所以,一般来说,使用它是一个很好的做法。

强制prefix语句允许您引用导入模块中的内容。在示例中,导入ietf-yang-types模块的前缀是yang,并且由于它,很明显yang:dotted-quad指的是来自该模块的类型。在您的情况下,您已将前缀设置为ospf,因此您应该必须ospf:area-id-type引用该模块中的类型定义。如果您导入多个模块,您需要确保它们的前缀是唯一的。

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

无论如何,一旦你导入一个模块,你就可以:

  • 使用 anygroupingtypedef在导入模块或其子模块的顶层定义。

  • 使用在导入的模块或其子模块中定义的any extensionfeature和。identity

  • must在, path, and语句中使用导入模块的模式树中的任何节点,或作为andwhen语句中的目标节点。augmentdeviation

在上面的示例中,模块中使用了typedef dotted-quadfrom the 。ietf-yang-typesacme-system

于 2016-12-03T17:38:26.683 回答