從本篇內容開始,我們將深入到OpenDaylight的核心內容:YANG、DataStore、RPC、Notification和MD-SAL等。本篇作核心內容的第一篇,我們將沿著“為什么?什么是?如何用?”的思路進行介紹。
圖片來自網絡
一、為什么出現YANG?
YANG是和NETCONF相伴而生的,而NETCONF作為網絡管理協(xié)議,包含安全傳輸層、消息層、操作層和內容層,其中內容層沒有標準化,操作層允許自定義RPC,而這兩者的標準化建模就是由YANG來完成的。
二、什么是YANG?
2.1.概述
YANG(Yet Another Next Generation)是NETCONF的數據建模語言,YANG1.0由RFC6020定義,YANG1.1由RFC7950定義,類似于XML Schema和SNMP的SMI,具有良好的可讀性和可擴展性。其關鍵特性:
①服務和網元數據模型:YANG是數據建模語言;
②領域專用語言:專為網絡配置而生,可進行網元\\服務配置建模。
YANG定義了數據層次結構:包括配置和狀態(tài)數據,遠程過程調用(RPC)和通知(Notification)。
2.2.基本結構
YANG將數據模型結構化為模塊和子模塊。模塊是YANG中定義的基本單位; 它定義了一個單一的數據模型。可以擴充模塊的層次結構,允許一個模塊將數據節(jié)點添加到另一個模塊中定義的層次結構中。如下圖所示:
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數據節(jié)點類型
2.4.1 基本類型
YANG定義了四種用于建模數據的基本節(jié)點類型:
①Leaf(葉子):一個實例,具有一個值且沒有子節(jié)點的節(jié)點。YANG和XML對應關系:
②Leaflist(葉子列表):多個實例,是一系列葉子節(jié)點,每個葉子有一個值,沒有子節(jié)點。YANG和XML對應關系:
③Container:一個實例,只有子節(jié)點,沒有值,包含任何類型的任何數量的子節(jié)點(包括leaf、list、leaf-list以及container)。YANG和XML對應關系:
④List:多個實例,保存相關節(jié)點。每個實例都由一個鍵標識。YANG和XML對應關系:
2.4.2 grouping
可以使用“grouping”語句將節(jié)點組裝成可重用的集合。grouping使用'uses'語句實例化節(jié)點,使用'refine'語句進行修改,以便根據特定需求定制相應的節(jié)點。grouping YANG和XML對應關系:
“grouping”語句不是數據定義語句,不定義數據樹中的任何節(jié)點,可以被視為構建數據的機制。
2.4.3 Choices
YANG允許數據模型使用“choice”和“case”語句將不兼容的節(jié)點分離為不同的選擇。“choice”語句包含一組“case”語句,用于定義無法一起出現的模式節(jié)點集。YANG和XML對應關系:
2.4.4 augment
“augment”語句定義數據模型層次結構中插入新節(jié)點的位置,“when”語句定義新節(jié)點有效時的條件。YANG和XML對應關系:
此示例定義了一個“uid”節(jié)點,該節(jié)點僅在用戶的“類”不是“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文件來自于工業(yè)標準和設備供應商兩部分。工業(yè)標準又包含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應用程序的開發(fā),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信息的呢?我們打開瀏覽器開發(fā)者工具,再次請求可以看到如下信息:
請求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的數據與協(xié)議交互關系如下圖所示:
4.2.3 YANG模型開發(fā)
在《從零開始學OpenDaylight之三:Hello示例》一文中,我們知道基于MD-SAL的開發(fā)流程如下圖所示:
那么YANG模型的開發(fā)流程又是怎樣的呢?我們可遵循如下流程:
-
RPC
+關注
關注
0文章
111瀏覽量
11529 -
傳輸層
+關注
關注
0文章
29瀏覽量
10889 -
網絡管理協(xié)議
+關注
關注
0文章
8瀏覽量
7792
發(fā)布評論請先 登錄
相關推薦
評論