从本篇内容开始,我们将深入到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)&Notification 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 Choices
YANG允许数据模型使用“choice”和“case”语句将不兼容的节点分离为不同的选择。“choice”语句包含一组“case”语句,用于定义无法一起出现的模式节点集。YANG和XML对应关系:
2.4.4 augment
“augment”语句定义数据模型层次结构中插入新节点的位置,“when”语句定义新节点有效时的条件。YANG和XML对应关系:
此示例定义了一个“uid”节点,该节点仅在用户的“类”不是“wheel”时才有效。 如果模块扩充另一个模块,则数据的XML表示将反映扩充模块的前缀。 例如,如果上面的扩充位于带有“other”前缀的模块中,则XML看起来像:
**2.4.5 **RPC
YANG可以定义NETCONF RPC。 使用YANG数据定义语句对操作的名称,输入参数和输出参数进行建模。YANG和XML对应关系:
2.4.6 Notification
YANG允许定义适合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 UI
4.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模型的开发流程又是怎样的呢?我们可遵循如下流程:
-
RPC
+关注
关注
0文章
111浏览量
11529 -
传输层
+关注
关注
0文章
29浏览量
10889 -
网络管理协议
+关注
关注
0文章
8浏览量
7792
发布评论请先 登录
相关推荐
评论