OpenDaylight中的YANG

描述

从本篇内容开始,我们将深入到OpenDaylight的核心内容:YANG、DataStore、RPC、Notification和MD-SAL等。本篇作核心内容的第一篇,我们将沿着“为什么?什么是?如何用?”的思路进行介绍。

RPC

图片来自网络

一、为什么出现YANG?

YANG是和NETCONF相伴而生的,而NETCONF作为网络管理协议,包含安全传输层、消息层、操作层和内容层,其中内容层没有标准化,操作层允许自定义RPC,而这两者的标准化建模就是由YANG来完成的。

RPC

二、什么是YANG?

2.1.概述

YANG(Yet Another Next Generation)是NETCONF的数据建模语言,YANG1.0由RFC6020定义,YANG1.1由RFC7950定义,类似于XML Schema和SNMP的SMI,具有良好的可读性和可扩展性。其关键特性:

① 服务和网元数据模型:YANG是数据建模语言;

② 领域专用语言:专为网络配置而生,可进行网元\\服务配置建模。

YANG定义了数据层次结构:包括配置和状态数据,远程过程调用(RPC)和通知(Notification)。

RPC

2.2.基本结构

YANG将数据模型结构化为模块和子模块。模块是YANG中定义的基本单位; 它定义了一个单一的数据模型。可以扩充模块的层次结构,允许一个模块将数据节点添加到另一个模块中定义的层次结构中。如下图所示:

RPC

YANG模块包含如下部分:

RPC

  • Header information:用于唯一标识我们的模块。 包含有关模块及其历史(修订版)的一般信息。
  • Imports & includes:指定模块与其他模块/子模块之间的依赖关系。
  • Type definitions:定义将在模块的数据建模中使用的不同数据类型。
  • Configuration & Operational data declarations:定义配置和操作数据结构。
  • Action(RPC)&Notification declarations:声明RPC和通知语句的位置。

2.3数据类型

2.3.1内置类型

YANG定义了一组内置类型,与编程语言类似,如下图所示:

RPC

**2.3.2 **派生类型

YANG提供了一种类型派生机制,可以使用范围或模式限制等机制来限制其基类型的有效值集。YANG使用“typedef”语句从基类型定义派生类型。基类型可以是内置类型,也可以是其他派生类型。如下图所示,从内置字符串类型定义了派生类型DisplayString,并将值的范围限制为0到255。

RPC

2.4数据节点类型

2.4.1 基本类型

YANG定义了四种用于建模数据的基本节点类型:

① Leaf(叶子):一个实例,具有一个值且没有子节点的节点。YANG和XML对应关系:

RPCRPC

② Leaflist(叶子列表):多个实例,是一系列叶子节点,每个叶子有一个值,没有子节点。YANG和XML对应关系:

RPC

③ Container:一个实例,只有子节点,没有值,包含任何类型的任何数量的子节点(包括leaf、list、leaf-list以及container)。YANG和XML对应关系:

RPC

④ List:多个实例,保存相关节点。每个实例都由一个键标识。YANG和XML对应关系:

RPC

2.4.2 grouping

可以使用“grouping”语句将节点组装成可重用的集合。grouping使用'uses'语句实例化节点,使用'refine'语句进行修改,以便根据特定需求定制相应的节点。grouping YANG和XML对应关系:

RPC

“grouping”语句不是数据定义语句,不定义数据树中的任何节点,可以被视为构建数据的机制。

2.4.3 Choices

YANG允许数据模型使用“choice”和“case”语句将不兼容的节点分离为不同的选择。“choice”语句包含一组“case”语句,用于定义无法一起出现的模式节点集。YANG和XML对应关系:

RPC

2.4.4 augment

“augment”语句定义数据模型层次结构中插入新节点的位置,“when”语句定义新节点有效时的条件。YANG和XML对应关系:

RPC

此示例定义了一个“uid”节点,该节点仅在用户的“类”不是“wheel”时才有效。 如果模块扩充另一个模块,则数据的XML表示将反映扩充模块的前缀。 例如,如果上面的扩充位于带有“other”前缀的模块中,则XML看起来像:

RPC

**2.4.5 **RPC

YANG可以定义NETCONF RPC。 使用YANG数据定义语句对操作的名称,输入参数和输出参数进行建模。YANG和XML对应关系:

RPC

2.4.6 Notification

YANG允许定义适合NETCONF的通知。 YANG数据定义语句用于建模通知的内容。YANG和XML对应关系:

RPC

三、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等等,如下图所示:

RPC

4.2.2 YANG UI示例

启动OpenDaylight控制器后,在浏览器输入如下URL地址,将显示YANG UI的界面:http://127.0.0.1:8181/index.html#/yangui/index

RPC

那么,YANGUI是如何从ODL中检索到这些module信息的呢?我们打开浏览器开发者工具,再次请求可以看到如下信息:

请求URL地址为:http://127.0.0.1:8181/restconf/modules,返回内容的格式为json。

RPC

RPC

详情信息如下所示:

RPC

获取module:network-topology的详细信息,请求URL地址为:

http://127.0.0.1:8181/restconf/modules/module/ietf-network-topology/2015-06-08/schema

返回内容的格式为yin+xml。

RPC

RPC

通过上面的分析可知,YANG UI的数据与协议交互关系如下图所示:

RPC

4.2.3 YANG模型开发

在《从零开始学OpenDaylight之三:Hello示例》一文中,我们知道基于MD-SAL的开发流程如下图所示:

RPC

那么YANG模型的开发流程又是怎样的呢?我们可遵循如下流程:

RPC

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分