0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenDaylight中的YANG

汽车电子技术 来源:码农与软件时代 作者:码农与软件时代 2023-02-14 15:10 次阅读

从本篇内容开始,我们将深入到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
    RPC
    +关注

    关注

    0

    文章

    111

    浏览量

    11529
  • 传输层
    +关注

    关注

    0

    文章

    29

    浏览量

    10889
  • 网络管理协议

    关注

    0

    文章

    8

    浏览量

    7792
收藏 人收藏

    评论

    相关推荐

    经典电磁场和Yang-Mills场方程的量子表述

    经典电磁场和Yang-Mills场方程的量子表述 
    发表于 11-26 10:56

    经典电磁场和Yang-Mills场方程的量子表述

    经典电磁场和Yang-Mills场方程的量子表述:摘要:本文主要将经典电磁场和Yang-Mills 场方程扩展改写为类中微子方程的量子形式,并将其纳入一般的任意自旋粒子方程的框架。并指出
    发表于 11-26 10:57 14次下载

    Yang_Engineering_Optimziation_to

    优化算法论文,属于混沌,粒子群,遗传算法等智能优化算法,可以应用到控制领域
    发表于 05-10 17:06 7次下载

    IP知识百科之什么是YANG

    YANG的定义与产生 YANG是一种数据建模语言,可以为NETCONF等协议的数据进行定义与描述。YANG模型是对数据特征的抽象和表达,在YANG模型文件
    的头像 发表于 11-19 10:25 6005次阅读
    IP知识百科之什么是<b class='flag-5'>YANG</b>

    牵手《冬日暖央yang》!卡萨帝携央视打造全民冰雪盛会

    2021年冬季最热门的运动项目是什么?自然是全民关注的冰雪运动了。为助力冰雪运动,12月11日开始,卡萨帝独家呈现的《冬日暖央yang》全民冰雪盛会在央视频播出,超40位央视主持集结,点燃冰雪运动
    发表于 12-27 19:30 241次阅读
    牵手《冬日暖央<b class='flag-5'>yang</b>》!卡萨帝携央视打造全民冰雪盛会

    好书推荐:《基于YANG的可编程网络》

    如果你是网络管理员、软件开发工程师、DevOps工程师、OSS架构师,又或是渴望入门软件定义网络的关键技术——YANG领域的技术开发人员,那就请不要错过!
    的头像 发表于 01-24 16:08 2462次阅读

    如何从零开始学OpenDaylight

    OpenDaylight的逻辑架构分为应用层、控制器层和数据转发层。其中,应用层聚焦网络业务逻辑开发,负责资源编排;控制器层进行全局网络的管理;数据转发层为各种网络设备,负责数据的转发。
    的头像 发表于 02-14 14:04 2193次阅读
    如何从零开始学<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的运行环境

    OpenDaylight作为一种开源的SDN控制器,使用Java语言编写,
    的头像 发表于 02-14 14:08 830次阅读
    <b class='flag-5'>OpenDaylight</b>的运行环境

    OpenDaylight的示例

    对于External System来说,我们在介绍基于REST API编程时再进行介绍。
    的头像 发表于 02-14 14:11 688次阅读
    <b class='flag-5'>OpenDaylight</b>的示例

    什么是OpenDaylight的Maven

    构建的实质是将我们编写的Java源文件、XML配置文件、HTML页面、CSS和JS文件等,通过某种方式组合在一起,变为可对外服务项目的过程。同时,构建过程很多都是没有技术含量且重复的工作,手工操作很无趣且太麻烦。
    的头像 发表于 02-14 15:02 1041次阅读
    什么是<b class='flag-5'>OpenDaylight</b>的Maven

    OpenDaylight的OSGi

    从写单个类的打印Hello World小程序到OSGi模块化开发,确实存在较大的难度,本文将从模块化、OSGI模型以及OSGI在OpenDaylight的应用等方面进行介绍。
    的头像 发表于 02-14 15:05 761次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的OSGi

    OpenDaylight的Karaf

    Karaf是一个现代的、多种形态的(polymorphic),轻量的、强大的、经过OSGI认证的企业级容器。这里的多种形态指的是它能够容纳各种应用,诸如OSGi、Spring、war等等。单从OSGi的角度来说,Karaf是OSGI的容器实例,类似tomcat是Servlet的容器实例一样。
    的头像 发表于 02-14 15:08 1720次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的Karaf

    OpenDaylight的DataStore是什么

    SDN起源于校园网,发扬光大于数据中心,现广泛用于广域网,SDN控制器,可能管理着数十万台软交换机,下发数百万乃至上千万条路由信息。因此,作为SDN控制器的开源项目OpenDaylight,无论是业务逻辑还是数据存储,
    的头像 发表于 02-14 15:13 1476次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的DataStore是什么

    OpenDaylight的RPC &amp; Notification是什么

    我们将介绍RPC和Notification,并从进程内外的通信开始,着重介绍远程过程调用和发布-订阅机制,然后分析MD-SAL的通信交互过程。
    的头像 发表于 02-14 15:15 951次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的RPC &amp; Notification是什么

    OpenDaylight的MD-SAL是什么

    一般情况下,软件系统的研发分为需求获取与分析、架构设计、代码实现、系统发布、上线等阶段。其中,架构设计可以细分为架构需求、分析、设计、文档化、评审、修改和实现等过程,我们以简化归一,描述为:提供UI界面和消息接口服务,UI选择B\S架构风格,消息可以是REST、SOAP以及AMQP等类型,数据库采用关系型数据库
    的头像 发表于 02-14 15:17 1123次阅读
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的MD-SAL是什么