0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenDaylight中的YANG

汽車電子技術(shù) ? 來源:碼農(nóng)與軟件時代 ? 作者:碼農(nóng)與軟件時代 ? 2023-02-14 15:10 ? 次閱讀

從本篇內(nèi)容開始,我們將深入到OpenDaylight的核心內(nèi)容:YANG、DataStore、RPC、Notification和MD-SAL等。本篇作核心內(nèi)容的第一篇,我們將沿著“為什么?什么是?如何用?”的思路進(jìn)行介紹。

圖片

圖片來自網(wǎng)絡(luò)

一、為什么出現(xiàn)YANG?

YANG是和NETCONF相伴而生的,而NETCONF作為網(wǎng)絡(luò)管理協(xié)議,包含安全傳輸層、消息層、操作層和內(nèi)容層,其中內(nèi)容層沒有標(biāo)準(zhǔn)化,操作層允許自定義RPC,而這兩者的標(biāo)準(zhǔn)化建模就是由YANG來完成的。

圖片

二、什么是YANG?

2.1.概述

YANG(Yet Another Next Generation)是NETCONF的數(shù)據(jù)建模語言,YANG1.0由RFC6020定義,YANG1.1由RFC7950定義,類似于XML Schema和SNMP的SMI,具有良好的可讀性和可擴(kuò)展性。其關(guān)鍵特性:

①服務(wù)和網(wǎng)元數(shù)據(jù)模型:YANG是數(shù)據(jù)建模語言;

②領(lǐng)域?qū)S谜Z言:專為網(wǎng)絡(luò)配置而生,可進(jìn)行網(wǎng)元\\服務(wù)配置建模。

YANG定義了數(shù)據(jù)層次結(jié)構(gòu):包括配置和狀態(tài)數(shù)據(jù),遠(yuǎn)程過程調(diào)用(RPC)和通知(Notification)。

圖片

2.2.基本結(jié)構(gòu)

YANG將數(shù)據(jù)模型結(jié)構(gòu)化為模塊和子模塊。模塊是YANG中定義的基本單位; 它定義了一個單一的數(shù)據(jù)模型??梢詳U(kuò)充模塊的層次結(jié)構(gòu),允許一個模塊將數(shù)據(jù)節(jié)點(diǎn)添加到另一個模塊中定義的層次結(jié)構(gòu)中。如下圖所示:

圖片

YANG模塊包含如下部分:

圖片

  • Header information:用于唯一標(biāo)識我們的模塊。 包含有關(guān)模塊及其歷史(修訂版)的一般信息
  • Imports & includes:指定模塊與其他模塊/子模塊之間的依賴關(guān)系。
  • Type definitions:定義將在模塊的數(shù)據(jù)建模中使用的不同數(shù)據(jù)類型。
  • Configuration & Operational data declarations:定義配置和操作數(shù)據(jù)結(jié)構(gòu)。
  • Action(RPC)&Notification declarations:聲明RPC和通知語句的位置。

2.3數(shù)據(jù)類型

2.3.1內(nèi)置類型

YANG定義了一組內(nèi)置類型,與編程語言類似,如下圖所示:

圖片

**2.3.2 **派生類型

YANG提供了一種類型派生機(jī)制,可以使用范圍或模式限制等機(jī)制來限制其基類型的有效值集。YANG使用“typedef”語句從基類型定義派生類型?;愋涂梢允莾?nèi)置類型,也可以是其他派生類型。如下圖所示,從內(nèi)置字符串類型定義了派生類型DisplayString,并將值的范圍限制為0到255。

圖片

2.4數(shù)據(jù)節(jié)點(diǎn)類型

2.4.1 基本類型

YANG定義了四種用于建模數(shù)據(jù)的基本節(jié)點(diǎn)類型:

①Leaf(葉子):一個實(shí)例,具有一個值且沒有子節(jié)點(diǎn)的節(jié)點(diǎn)。YANG和XML對應(yīng)關(guān)系:

圖片圖片

②Leaflist(葉子列表):多個實(shí)例,是一系列葉子節(jié)點(diǎn),每個葉子有一個值,沒有子節(jié)點(diǎn)。YANG和XML對應(yīng)關(guān)系:

圖片

③Container:一個實(shí)例,只有子節(jié)點(diǎn),沒有值,包含任何類型的任何數(shù)量的子節(jié)點(diǎn)(包括leaf、list、leaf-list以及container)。YANG和XML對應(yīng)關(guān)系:

圖片

④List:多個實(shí)例,保存相關(guān)節(jié)點(diǎn)。每個實(shí)例都由一個鍵標(biāo)識。YANG和XML對應(yīng)關(guān)系:

圖片

2.4.2 grouping

可以使用“grouping”語句將節(jié)點(diǎn)組裝成可重用的集合。grouping使用'uses'語句實(shí)例化節(jié)點(diǎn),使用'refine'語句進(jìn)行修改,以便根據(jù)特定需求定制相應(yīng)的節(jié)點(diǎn)。grouping YANG和XML對應(yīng)關(guān)系:

圖片

“grouping”語句不是數(shù)據(jù)定義語句,不定義數(shù)據(jù)樹中的任何節(jié)點(diǎn),可以被視為構(gòu)建數(shù)據(jù)的機(jī)制。

2.4.3 Choices

YANG允許數(shù)據(jù)模型使用“choice”和“case”語句將不兼容的節(jié)點(diǎn)分離為不同的選擇?!癱hoice”語句包含一組“case”語句,用于定義無法一起出現(xiàn)的模式節(jié)點(diǎn)集。YANG和XML對應(yīng)關(guān)系:

圖片

2.4.4 augment

“augment”語句定義數(shù)據(jù)模型層次結(jié)構(gòu)中插入新節(jié)點(diǎn)的位置,“when”語句定義新節(jié)點(diǎn)有效時的條件。YANG和XML對應(yīng)關(guān)系:

圖片

此示例定義了一個“uid”節(jié)點(diǎn),該節(jié)點(diǎn)僅在用戶的“類”不是“wheel”時才有效。 如果模塊擴(kuò)充另一個模塊,則數(shù)據(jù)的XML表示將反映擴(kuò)充模塊的前綴。 例如,如果上面的擴(kuò)充位于帶有“other”前綴的模塊中,則XML看起來像:

圖片

**2.4.5 **RPC

YANG可以定義NETCONF RPC。 使用YANG數(shù)據(jù)定義語句對操作的名稱,輸入參數(shù)和輸出參數(shù)進(jìn)行建模。YANG和XML對應(yīng)關(guān)系:

圖片

2.4.6 Notification

YANG允許定義適合NETCONF的通知。 YANG數(shù)據(jù)定義語句用于建模通知的內(nèi)容。YANG和XML對應(yīng)關(guān)系:

圖片

三、YANG文件來自哪里?

YANG文件來自于工業(yè)標(biāo)準(zhǔn)和設(shè)備供應(yīng)商兩部分。工業(yè)標(biāo)準(zhǔn)又包含IETF、ITU等組織的標(biāo)準(zhǔn)定義和符合標(biāo)準(zhǔn),如:ietf-diffserv-policy.yang、ietf-diffserv-classifer.yang、ietf-diffserv-target.yang。設(shè)備供應(yīng)商如思科、華為定義的私有標(biāo)準(zhǔn)。

四、YANG在OpenDaylight中的應(yīng)用

4.1 概述

OpenDaylight現(xiàn)有版本采用MD-SAL(模型驅(qū)動)的設(shè)計思想,使用Yang模型和工具來定義全部的API,YANG充當(dāng)“M”的角色。在SDN的架構(gòu)體系下,從YANG文件所處位置的角度,可以將YANG大致分為:設(shè)備YANG、插件YANG和北向接口YANG。那么,OpenDaylight中定義的YANG模型有哪些呢?我們可以在如下鏈接中找到SAL和各種插件定義的YANG模型:

https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Model_Reference

這么多的YANG文件,在OpenDaylight中YANG的管理由YANGTools項(xiàng)目負(fù)責(zé),該項(xiàng)目包含以下模塊:YANG模型的代碼生成、YANG和DOM/Java格式之間的映射、DataStore的建模及其操作(RPC和通知)、提供RESTCONF訪問數(shù)據(jù)等。其中,YANG到JAVA代碼的映射,可參考如下鏈接:

https://wiki.opendaylight.org/view/YANG_Tools:YANG_to_Java_Mapping

4.2 YANG UI

4.2.1 什么是YANG UI?

為了簡化和促進(jìn)Open Daylight應(yīng)用程序的開發(fā),Open Daylight提供了

基于YANG模型生成并呈現(xiàn)簡單的界面,相關(guān)的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信息的呢?我們打開瀏覽器開發(fā)者工具,再次請求可以看到如下信息:

請求URL地址為:http://127.0.0.1:8181/restconf/modules,返回內(nèi)容的格式為json。

圖片

圖片

詳情信息如下所示:

圖片

獲取module:network-topology的詳細(xì)信息,請求URL地址為:

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

返回內(nèi)容的格式為yin+xml。

圖片

圖片

通過上面的分析可知,YANG UI的數(shù)據(jù)與協(xié)議交互關(guān)系如下圖所示:

圖片

4.2.3 YANG模型開發(fā)

在《從零開始學(xué)OpenDaylight之三:Hello示例》一文中,我們知道基于MD-SAL的開發(fā)流程如下圖所示:

圖片

那么YANG模型的開發(fā)流程又是怎樣的呢?我們可遵循如下流程:

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11537
  • 傳輸層
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    10898
  • 網(wǎng)絡(luò)管理協(xié)議

    關(guān)注

    0

    文章

    8

    瀏覽量

    7793
收藏 人收藏

    評論

    相關(guān)推薦

    經(jīng)典電磁場和Yang-Mills場方程的量子表述

    經(jīng)典電磁場和Yang-Mills場方程的量子表述 
    發(fā)表于 11-26 10:56

    經(jīng)典電磁場和Yang-Mills場方程的量子表述

    經(jīng)典電磁場和Yang-Mills場方程的量子表述:摘要:本文主要將經(jīng)典電磁場和Yang-Mills 場方程擴(kuò)展改寫為類中微子方程的量子形式,并將其納入一般的任意自旋粒子方程的框架。并指出
    發(fā)表于 11-26 10:57 ?14次下載

    Yang_Engineering_Optimziation_to

    優(yōu)化算法論文,屬于混沌,粒子群,遺傳算法等智能優(yōu)化算法,可以應(yīng)用到控制領(lǐng)域
    發(fā)表于 05-10 17:06 ?7次下載

    IP知識百科之什么是YANG

    YANG的定義與產(chǎn)生 YANG是一種數(shù)據(jù)建模語言,可以為NETCONF等協(xié)議的數(shù)據(jù)進(jìn)行定義與描述。YANG模型是對數(shù)據(jù)特征的抽象和表達(dá),在YANG模型文件
    的頭像 發(fā)表于 11-19 10:25 ?6016次閱讀
    IP知識百科之什么是<b class='flag-5'>YANG</b>

    牽手《冬日暖央yang》!卡薩帝攜央視打造全民冰雪盛會

    2021年冬季最熱門的運(yùn)動項(xiàng)目是什么?自然是全民關(guān)注的冰雪運(yùn)動了。為助力冰雪運(yùn)動,12月11日開始,卡薩帝獨(dú)家呈現(xiàn)的《冬日暖央yang》全民冰雪盛會在央視頻播出,超40位央視主持集結(jié),點(diǎn)燃冰雪運(yùn)動
    發(fā)表于 12-27 19:30 ?244次閱讀
    牽手《冬日暖央<b class='flag-5'>yang</b>》!卡薩帝攜央視打造全民冰雪盛會

    好書推薦:《基于YANG的可編程網(wǎng)絡(luò)》

    如果你是網(wǎng)絡(luò)管理員、軟件開發(fā)工程師、DevOps工程師、OSS架構(gòu)師,又或是渴望入門軟件定義網(wǎng)絡(luò)的關(guān)鍵技術(shù)——YANG領(lǐng)域的技術(shù)開發(fā)人員,那就請不要錯過!
    的頭像 發(fā)表于 01-24 16:08 ?2477次閱讀

    如何從零開始學(xué)OpenDaylight

    OpenDaylight的邏輯架構(gòu)分為應(yīng)用層、控制器層和數(shù)據(jù)轉(zhuǎn)發(fā)層。其中,應(yīng)用層聚焦網(wǎng)絡(luò)業(yè)務(wù)邏輯開發(fā),負(fù)責(zé)資源編排;控制器層進(jìn)行全局網(wǎng)絡(luò)的管理;數(shù)據(jù)轉(zhuǎn)發(fā)層為各種網(wǎng)絡(luò)設(shè)備,負(fù)責(zé)數(shù)據(jù)的轉(zhuǎn)發(fā)。
    的頭像 發(fā)表于 02-14 14:04 ?2231次閱讀
    如何從零開始學(xué)<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的運(yùn)行環(huán)境

    OpenDaylight作為一種開源的SDN控制器,使用Java語言編寫,
    的頭像 發(fā)表于 02-14 14:08 ?849次閱讀
    <b class='flag-5'>OpenDaylight</b>的運(yùn)行環(huán)境

    OpenDaylight的示例

    對于External System來說,我們在介紹基于REST API編程時再進(jìn)行介紹。
    的頭像 發(fā)表于 02-14 14:11 ?697次閱讀
    <b class='flag-5'>OpenDaylight</b>的示例

    什么是OpenDaylight的Maven

    構(gòu)建的實(shí)質(zhì)是將我們編寫的Java源文件、XML配置文件、HTML頁面、CSS和JS文件等,通過某種方式組合在一起,變?yōu)榭蓪ν夥?wù)項(xiàng)目的過程。同時,構(gòu)建過程很多都是沒有技術(shù)含量且重復(fù)的工作,手工操作很無趣且太麻煩。
    的頭像 發(fā)表于 02-14 15:02 ?1057次閱讀
    什么是<b class='flag-5'>OpenDaylight</b>的Maven

    OpenDaylight的OSGi

    從寫單個類的打印Hello World小程序到OSGi模塊化開發(fā),確實(shí)存在較大的難度,本文將從模塊化、OSGI模型以及OSGI在OpenDaylight的應(yīng)用等方面進(jìn)行介紹。
    的頭像 發(fā)表于 02-14 15:05 ?777次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的OSGi

    OpenDaylight的Karaf

    Karaf是一個現(xiàn)代的、多種形態(tài)的(polymorphic),輕量的、強(qiáng)大的、經(jīng)過OSGI認(rèn)證的企業(yè)級容器。這里的多種形態(tài)指的是它能夠容納各種應(yīng)用,諸如OSGi、Spring、war等等。單從OSGi的角度來說,Karaf是OSGI的容器實(shí)例,類似tomcat是Servlet的容器實(shí)例一樣。
    的頭像 發(fā)表于 02-14 15:08 ?1739次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的Karaf

    OpenDaylight的DataStore是什么

    SDN起源于校園網(wǎng),發(fā)揚(yáng)光大于數(shù)據(jù)中心,現(xiàn)廣泛用于廣域網(wǎng),SDN控制器,可能管理著數(shù)十萬臺軟交換機(jī),下發(fā)數(shù)百萬乃至上千萬條路由信息。因此,作為SDN控制器的開源項(xiàng)目OpenDaylight,無論是業(yè)務(wù)邏輯還是數(shù)據(jù)存儲,
    的頭像 發(fā)表于 02-14 15:13 ?1497次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的DataStore是什么

    OpenDaylight的RPC &amp; Notification是什么

    我們將介紹RPC和Notification,并從進(jìn)程內(nèi)外的通信開始,著重介紹遠(yuǎn)程過程調(diào)用和發(fā)布-訂閱機(jī)制,然后分析MD-SAL的通信交互過程。
    的頭像 發(fā)表于 02-14 15:15 ?966次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的RPC &amp; Notification是什么

    OpenDaylight的MD-SAL是什么

    一般情況下,軟件系統(tǒng)的研發(fā)分為需求獲取與分析、架構(gòu)設(shè)計、代碼實(shí)現(xiàn)、系統(tǒng)發(fā)布、上線等階段。其中,架構(gòu)設(shè)計可以細(xì)分為架構(gòu)需求、分析、設(shè)計、文檔化、評審、修改和實(shí)現(xiàn)等過程,我們以簡化歸一,描述為:提供UI界面和消息接口服務(wù),UI選擇B\S架構(gòu)風(fēng)格,消息可以是REST、SOAP以及AMQP等類型,數(shù)據(jù)庫采用關(guān)系型數(shù)據(jù)庫
    的頭像 發(fā)表于 02-14 15:17 ?1141次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的MD-SAL是什么