從本篇內(nèi)容開始,我們將深入到OpenDaylight的核心內(nèi)容:YANG、DataStore、RPC、Notification和MD-SAL等。本篇作核心內(nèi)容的第一篇,我們將沿著“為什么?什么是?如何用?”的思路進行介紹。
圖片來自網(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,具有良好的可讀性和可擴展性。其關(guān)鍵特性:
①服務(wù)和網(wǎng)元數(shù)據(jù)模型:YANG是數(shù)據(jù)建模語言;
②領(lǐng)域?qū)S谜Z言:專為網(wǎng)絡(luò)配置而生,可進行網(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ù)模型。可以擴充模塊的層次結(jié)構(gòu),允許一個模塊將數(shù)據(jù)節(jié)點添加到另一個模塊中定義的層次結(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提供了一種類型派生機制,可以使用范圍或模式限制等機制來限制其基類型的有效值集。YANG使用“typedef”語句從基類型定義派生類型。基類型可以是內(nèi)置類型,也可以是其他派生類型。如下圖所示,從內(nèi)置字符串類型定義了派生類型DisplayString,并將值的范圍限制為0到255。
2.4數(shù)據(jù)節(jié)點類型
2.4.1 基本類型
YANG定義了四種用于建模數(shù)據(jù)的基本節(jié)點類型:
①Leaf(葉子):一個實例,具有一個值且沒有子節(jié)點的節(jié)點。YANG和XML對應(yīng)關(guān)系:
②Leaflist(葉子列表):多個實例,是一系列葉子節(jié)點,每個葉子有一個值,沒有子節(jié)點。YANG和XML對應(yīng)關(guān)系:
③Container:一個實例,只有子節(jié)點,沒有值,包含任何類型的任何數(shù)量的子節(jié)點(包括leaf、list、leaf-list以及container)。YANG和XML對應(yīng)關(guān)系:
④List:多個實例,保存相關(guān)節(jié)點。每個實例都由一個鍵標(biāo)識。YANG和XML對應(yīng)關(guān)系:
2.4.2 grouping
可以使用“grouping”語句將節(jié)點組裝成可重用的集合。grouping使用'uses'語句實例化節(jié)點,使用'refine'語句進行修改,以便根據(jù)特定需求定制相應(yīng)的節(jié)點。grouping YANG和XML對應(yīng)關(guān)系:
“grouping”語句不是數(shù)據(jù)定義語句,不定義數(shù)據(jù)樹中的任何節(jié)點,可以被視為構(gòu)建數(shù)據(jù)的機制。
2.4.3 Choices
YANG允許數(shù)據(jù)模型使用“choice”和“case”語句將不兼容的節(jié)點分離為不同的選擇。“choice”語句包含一組“case”語句,用于定義無法一起出現(xiàn)的模式節(jié)點集。YANG和XML對應(yīng)關(guān)系:
2.4.4 augment
“augment”語句定義數(shù)據(jù)模型層次結(jié)構(gòu)中插入新節(jié)點的位置,“when”語句定義新節(jié)點有效時的條件。YANG和XML對應(yīng)關(guān)系:
此示例定義了一個“uid”節(jié)點,該節(jié)點僅在用戶的“類”不是“wheel”時才有效。 如果模塊擴充另一個模塊,則數(shù)據(jù)的XML表示將反映擴充模塊的前綴。 例如,如果上面的擴充位于帶有“other”前綴的模塊中,則XML看起來像:
**2.4.5 **RPC
YANG可以定義NETCONF RPC。 使用YANG數(shù)據(jù)定義語句對操作的名稱,輸入參數(shù)和輸出參數(shù)進行建模。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項目負(fù)責(zé),該項目包含以下模塊: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?
為了簡化和促進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ā)流程又是怎樣的呢?我們可遵循如下流程:
-
RPC
+關(guān)注
關(guān)注
0文章
111瀏覽量
11537 -
傳輸層
+關(guān)注
關(guān)注
0文章
29瀏覽量
10898 -
網(wǎng)絡(luò)管理協(xié)議
+關(guān)注
關(guān)注
0文章
8瀏覽量
7793
發(fā)布評論請先 登錄
相關(guān)推薦
評論