CLI协议YANG模型开发

举报
aocfans 发表于 2021/12/27 11:02:52 2021/12/27
【摘要】 我们的AOC要对设备进行管理,需要SND驱动包,制作SND包重要的一项就是获取设备YANG文件。

我们的AOC要对设备进行管理,需要SND驱动包,制作SND包重要的一项就是获取设备YANG文件。每个YANG模块对应设备的一个功能,通过YANG文件,可以描述设备的配置能力、设备的北向接口以及生成南向报文,屏蔽各厂商设备之间的差异。

然而,YANG模型是为Netconf而生的,它是Netconf协议的内容层,对于支持Netconf协议的网元设备来说,我们可以直接从厂商获取设备YANG文件,拷贝至SND驱动包目录下。但是对于不支持Netconf协议的设备来说,我们就需要根据CLI命令来编写YANG文件。

 

格式转换

CLI命令与YANG文件之间的默认转换规则如下:

  • Container节点转换为命令行的前缀,能够叠加到任意深度。
  • List节点转换为子视图,其中listkey值作为进入子视图的参数。
  • Leaf节点转换为单个命令,跟着一个leaf的参数值。

下面用一个例子来说明如何将CLI命令转换为YANG文件。

例如,我们从设备上获取到的CLI命令行如下:

server  DCServer1

   description   testAOC

   ip ip-address 192.168.1.1

   ip ip-port  803

 

根据转换规则进行分析:

  • Server为子视图,转换为list节点。
  • DCServer1为服务器name,命令参数值转换为leaf节点,而且name为进入服务器的参数,根据此名称区分server,所以此参数同时为key值。
  • Description为单个命令,转换为leaf节点。
  • ip为命令前缀,转换为container节点。
  • ip-addressip-port为单个命令,转换为leaf节点。

 

由此得出转换后的YANG文件如下所示:

list server {

  key “name”;

  leaf name {

    type string;

  }

  leaf description {

    type string;

  } 

  container ip {

      leaf ip-address {

          type inet:ip-address;

      }

      leaf ip-port{

          type inet:port-number;

      }

  }

}

 

 

扩展语法

由于不同设备厂商实现命令行格式不同,为了匹配设备厂商之间的差异,同时定义扩展功能,提供了扩展的annotations语法项,扩展语法都在cli_annotation.yang中。

 

例如以下命令:

routerTest router-id 12

如果不希望在界面上显示节点名称routerTest,只显示参数值,可以增加扩展语法:render-name”false”,转换后的YANG如下:

container routerTest{

       hw:render-name"false"

       leaf router-id{

              type unit16;

       }

}

 

 

这样即使面对不支持Netconf的设备,我们也可以随心所欲地编写自己想要的代码了,你学会了吗?

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。