从本篇内容开始,我们将深入到opendaylight的核心内容:yang、datastore、rpc、notification和md-sal等。本篇作核心内容的第一篇,我们将沿着“为什么?什么是?如何用?”的思路进行介绍。
图片来自网络
一、为什么出现yang?yang是和netconf相伴而生的,而netconf作为网络管理协议,包含安全传输层、消息层、操作层和内容层,其中内容层没有标准化,操作层允许自定义rpc,而这两者的标准化建模就是由yang来完成的。
二、什么是yang?2.1.概述yang(yet another next generation)是netconf的数据建模语言,yang1.0由rfc6020定义,yang1.1由rfc7950定义,类似于xml schema和snmp的smi,具有良好的可读性和可扩展性。其关键特性:
① 服务和网元数据模型:yang是数据建模语言;
② 领域专用语言:专为网络配置而生,可进行网元\\服务配置建模。
yang定义了数据层次结构:包括配置和状态数据,远程过程调用(rpc)和通知(notification)。
2.2.基本结构yang将数据模型结构化为模块和子模块。模块是yang中定义的基本单位; 它定义了一个单一的数据模型。可以扩充模块的层次结构,允许一个模块将数据节点添加到另一个模块中定义的层次结构中。如下图所示:
yang模块包含如下部分:
header information:用于唯一标识我们的模块。 包含有关模块及其历史(修订版)的一般信息。imports & includes:指定模块与其他模块/子模块之间的依赖关系。type definitions:定义将在模块的数据建模中使用的不同数据类型。configuration & operational data declarations:定义配置和操作数据结构。action(rpc)¬ification declarations:声明rpc和通知语句的位置。2.3数据类型2.3.1内置类型yang定义了一组内置类型,与编程语言类似,如下图所示:
**2.3.2 **派生类型yang提供了一种类型派生机制,可以使用范围或模式限制等机制来限制其基类型的有效值集。yang使用“typedef”语句从基类型定义派生类型。基类型可以是内置类型,也可以是其他派生类型。如下图所示,从内置字符串类型定义了派生类型displaystring,并将值的范围限制为0到255。
2.4数据节点类型2.4.1 基本类型yang定义了四种用于建模数据的基本节点类型:
① leaf(叶子):一个实例,具有一个值且没有子节点的节点。yang和xml对应关系:
② leaflist(叶子列表):多个实例,是一系列叶子节点,每个叶子有一个值,没有子节点。yang和xml对应关系:
③ container:一个实例,只有子节点,没有值,包含任何类型的任何数量的子节点(包括leaf、list、leaf-list以及container)。yang和xml对应关系:
④ list:多个实例,保存相关节点。每个实例都由一个键标识。yang和xml对应关系:
2.4.2 grouping可以使用“grouping”语句将节点组装成可重用的集合。grouping使用'uses'语句实例化节点,使用'refine'语句进行修改,以便根据特定需求定制相应的节点。grouping yang和xml对应关系:
“grouping”语句不是数据定义语句,不定义数据树中的任何节点,可以被视为构建数据的机制。
2.4.3 choicesyang允许数据模型使用“choice”和“case”语句将不兼容的节点分离为不同的选择。“choice”语句包含一组“case”语句,用于定义无法一起出现的模式节点集。yang和xml对应关系:
2.4.4 augment“augment”语句定义数据模型层次结构中插入新节点的位置,“when”语句定义新节点有效时的条件。yang和xml对应关系:
此示例定义了一个“uid”节点,该节点仅在用户的“类”不是“wheel”时才有效。 如果模块扩充另一个模块,则数据的xml表示将反映扩充模块的前缀。 例如,如果上面的扩充位于带有“other”前缀的模块中,则xml看起来像:
**2.4.5 **rpcyang可以定义netconf rpc。 使用yang数据定义语句对操作的名称,输入参数和输出参数进行建模。yang和xml对应关系:
2.4.6 notificationyang允许定义适合netconf的通知。 yang数据定义语句用于建模通知的内容。yang和xml对应关系:
三、yang文件来自哪里?yang文件来自于工业标准和设备供应商两部分。工业标准又包含ietf、itu等组织的标准定义和符合标准,如:ietf-diffserv-policy.yang、ietf-diffserv-classifer.yang、ietf-diffserv-target.yang。设备供应商如思科、华为定义的私有标准。
四、yang在opendaylight中的应用4.1 概述opendaylight现有版本采用md-sal(模型驱动)的设计思想,使用yang模型和工具来定义全部的api,yang充当“m”的角色。在sdn的架构体系下,从yang文件所处位置的角度,可以将yang大致分为:设备yang、插件yang和北向接口yang。那么,opendaylight中定义的yang模型有哪些呢?我们可以在如下链接中找到sal和各种插件定义的yang模型:
https://wiki.opendaylight.org/view/opendaylight_controller:md-sal:model_reference
这么多的yang文件,在opendaylight中yang的管理由yangtools项目负责,该项目包含以下模块:yang模型的代码生成、yang和dom/java格式之间的映射、datastore的建模及其操作(rpc和通知)、提供restconf访问数据等。其中,yang到java代码的映射,可参考如下链接:
https://wiki.opendaylight.org/view/yang_tools:yang_to_java_mapping
4.2 yang ui4.2.1 什么是yang ui?为了简化和促进open daylight应用程序的开发,open daylight提供了
基于yang模型生成并呈现简单的界面,相关的feature有odl-dlux-core、odl-dluxapps-yangman、odl-dluxapps-yangui、odl-dluxapps-yangvisualizer等等,如下图所示:
4.2.2 yang ui示例启动opendaylight控制器后,在浏览器输入如下url地址,将显示yang ui的界面:http://127.0.0.1:8181/index.html#/yangui/index
那么,yangui是如何从odl中检索到这些module信息的呢?我们打开浏览器开发者工具,再次请求可以看到如下信息:
请求url地址为:http://127.0.0.1:8181/restconf/modules,返回内容的格式为json。
详情信息如下所示:
获取module:network-topology的详细信息,请求url地址为:
http://127.0.0.1:8181/restconf/modules/module/ietf-network-topology/2015-06-08/schema
返回内容的格式为yin+xml。
通过上面的分析可知,yang ui的数据与协议交互关系如下图所示:
4.2.3 yang模型开发在《从零开始学opendaylight之三:hello示例》一文中,我们知道基于md-sal的开发流程如下图所示:
那么yang模型的开发流程又是怎样的呢?我们可遵循如下流程:
S3C825A型单片机结构及软件设计
国轩高科宣布,自家磷酸铁锂电池单体能量密度已达到180wh/kg
坚果R2上手体验:人机交互的效率翻倍提升
剥离试验机,如何正确操作
矿井水文多参数动态监测系统基本介绍
OpenDaylight中的YANG
MEMS传感器最广泛的应用领域
瞬态抑制二极管导电特性及选用方法分析
影响RJ45连接器PIN针接触电阻可靠性的因素
【层峰观点】利用物联网技术创建安全节能的城市-分享智慧城市新动态
贸泽开售可选择搭载Intel Movidius Myriad X视觉处理器的 AAEON UP Squared AI Vision X开发套件
从先进封装到先进显示,库力索法用创新技术赋能产业发展
频谱分析仪的种类与应用
利用3D打印技术制作高颜值球鞋
plc设计回路需要注意什么?
浅析人工智能数据完整性的问题
语音教室的厂家有哪些 哪个比较好?
如何提高医用电子设备的电磁兼容性
三星公布了升级Android9.0操作系统的时间表
LED封装领域的“小巨人”企业的旭宇光电新获两项荣誉