CLI协议YANG模型开发
我们的AOC要对设备进行管理,需要SND驱动包,制作SND包重要的一项就是获取设备YANG文件。每个YANG模块对应设备的一个功能,通过YANG文件,可以描述设备的配置能力、设备的北向接口以及生成南向报文,屏蔽各厂商设备之间的差异。
然而,YANG模型是为Netconf而生的,它是Netconf协议的内容层,对于支持Netconf协议的网元设备来说,我们可以直接从厂商获取设备YANG文件,拷贝至SND驱动包目录下。但是对于不支持Netconf协议的设备来说,我们就需要根据CLI命令来编写YANG文件。
格式转换
CLI命令与YANG文件之间的默认转换规则如下:
- Container节点转换为命令行的前缀,能够叠加到任意深度。
- List节点转换为子视图,其中list的key值作为进入子视图的参数。
- 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-address和ip-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的设备,我们也可以随心所欲地编写自己想要的代码了,你学会了吗?
- 点赞
- 收藏
- 关注作者
评论(0)