YANG模型介紹及語法_第1頁
YANG模型介紹及語法_第2頁
YANG模型介紹及語法_第3頁
YANG模型介紹及語法_第4頁
YANG模型介紹及語法_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、YANG 模型介紹及語法YANG模型是什么?YANG模型是一種數據建模語言,用來建模由NETCONF協議、NETCONF遠端過程調用(RPCs)、和NETCONF通知(notification)操作的配置數據和狀態(tài)數據。YANG建模NETCONF協議的操作和內容層(RFC4741,Section 1.1)。 YANG模型特性:建模XML格式數據并由控制器元素提供功能:具有自己的語法格式,可以無差地轉化為XML格式,同時通過yangtools plugin可以生成相應的java接口、類及方法等,為OpenDaylight內部數據(控制器元素)處理編程提供了便利。定義語義元素和他們的關系,模擬所有

2、的元素作為一個系統,YANG模型是一種樹形結構的建模語言,通過YANG模型本身的語法和語義關系可以看出其定義方式的靈活性。YANG數據模型的XML特性提供了一種自表述數據的方式,控制器元素和采用控制器北向接口API的應用可以以一種原生格式與數據模型一起調用。利用一種模式語言簡化控制器元素和應用的開發(fā)。模塊中提供功能的開發(fā)者可以定義一個模型,從而可以創(chuàng)建對于所提供功能的更簡單的、數據類型的API。因此降低了通過服務抽象層提供的數據結構的錯誤交互。YANG模型與NETCONF由最初YANG模型的定義可知,YANG模型與NETCONF密切相關,其產生是為了對NETCONF協議所操作的數據進行建模。最

3、初的網絡管理協議SNMP也有對應的建模語言SMI。下圖給出NETCONF/YANG與SNMP/SMI相關概念對比。 圖1如圖中所示,NETCONF在很多方面體現出對于SNMP協議的優(yōu)越性,NETCONF協議由XML編碼,以SSH加密,采用TCP連接,體現出更好的安全性和可靠性。下面簡單引出NETCONF協議的configuration data store。PicYANG模型通過樹形結構的節(jié)點定義描述了數據模型的層級嵌套結構以及各屬性的數據類型。YANG具有自己的語法格式,也可以無差別地轉換為XML格式,稱之為YIN。可以使用第三方工具pyang進行轉換。pyang地址:http:/www.y

4、/twiki/pub/Main/YangTools/pyang.1.html接下來將會對YANG模型的語法和語義進行描述,說明在YANG中數據模型是如何定義的,并且以XML格式展示,以及NETCONF操作如何來操作數據。(/html/rfc6020#section-1)YANG模型語義及語法YANG模型主要內容圖2正如之前所提到的,除去header information、imports&includes、Type definitions之外,YANG模型的主要內容Configuration&Operati

5、onal data declarations和Action(RPC)&Notification declarations對應了YANG模型定義中的“NETCONF協議、NETCONF遠端過程調用(RPCs)、和NETCONF通知(notification)”。下面將通過基本示例來介紹以上所述主要內容。YANG HEADER圖3上圖所示是一個YANG文件的HEADER,其中module name(vxlan)要與YANG文件的文件名一致(即這個YANG文件的名字為vxlan.yang),namespace用來唯一標識這個YANG模型與其他YANG模型不同,prefix作為namespac

6、e的一種簡寫,其次import用來定義導入的其他YANG模型,注意到在后面的大括號中包括這個YANG模型的prefix和revision-data。revision用來唯一定義這個YANG模型的revision。其余一些organization、contact、description定義僅用于描述。YANG模型是一個XML格式定義語言。另外,針對上圖示例中沒有體現的“include”來說,include是用于將sub-module引入到module里面,這個module不一定要有一個文件。Submodule沒有namespace而是以belongs-to來表征屬于哪一個main module.

7、 YANG TYPESData TypeYANG模型的Data Type包括Base Type和Derived Type, Base Type即為一個簡單的類型,Derived Type或許是typedefs定義的一個Base Type或許是grouping定義的具有結構的類型。接下來在Typedef Statement和Grouping Statement中將會進一步介紹Derived Type。Base Type The leaf StatementThe leaf-list StatementThe container StatementThe must StatementThe lis

8、t StatementThe augment StatementThe when StatementThe union StatementThe grouping StatementThe choice StatementThe anyxml StatementThe rpc StatementThe notification Statement 圖4/view/YANG Tools:YANG to Java Mapping Typedef Statement在Typedef中還包涵諸如“rang”、“l(fā)ength”的細節(jié)定義,有興趣可查

9、看rfc6020圖5圖中定義實現了一個“percent”類型(Derived Type),Container Statement作為data store有效入口的存在,可以理解為從container處以下的值才是有效的,沒有值,但包含一系列的子節(jié)點圖6Grouping Statement定義樹形結構的“暫時”樹干,這么說主要是區(qū)別于container,從形式上看兩者及其相似都是具有樹形結構,但在運行過程中grouping是無效的數據,只有當它作為衍生類型(uses)存在于container中時才有效.圖7Leaf Statementleaf:用來定義屬性值,如name,ID等。有值,但不包含任

10、何子節(jié)點List Statement定義了一組具有相同數據結構的數據,在json格式的實例中是一個數組,在xml格式的實例中是一系列名稱和結構相同的xml節(jié)點 。List中的各個元素之間通過key來唯一標識;例如nodes圖8兼具leaf和list的特點,定義了一組相同類型的值。不包含子節(jié)點。在json格式實例中是一個數組且數組中每個元素都是一個值,在xml格式的實例中是一系列名稱相同值不同的xml節(jié)點Choice & case Statement´choice:定義的節(jié)點結構是不完全確定的。它包含多個case子節(jié)點,代表不同的分支,分別定義了該節(jié)點的一種可能的結構。最終節(jié)點

11、的結構是且僅能是所有分支中的一種。AugmentYANG模型允許一個module插入附加節(jié)點到data models中,包括當前的module(以及子mudule)或者一個外部module. 對于供應商來說,增加vendor-specific參數到標注的data model中可協作使用。圖9Configuration & Operational Data StoreData store中的數據存儲分兩種形式:config和operational ,config持有由應用所寫的數據,而operational反映了設備的實際狀態(tài),從設備讀取數據,如果沒有錯誤即可以看到設備的當前實際信息。c

12、onfig data store中查詢流表通常不包含以路由為目的的流表項(這就是為什么operational方式可以查詢到table-miss流表項,即out-port:controller,而config方式查詢不到),但是OpenDaylight開發(fā)者表示這個方面未來可以改變,而之所以這樣是因為這些流通過外部的流服務(不經過dataStore和config)發(fā)送到設備,然后這些流由設備通過數據形式以operational的形式重新報回。config具有相對于控制器的生命周期(甚至重啟都可以依然存活)。這些流表項由應用添加到這里并且當有合適的設備時就會發(fā)送給它。原則上講openflowplu

13、gin和controller都不應該動用config。這個是為應用程序而保留的,比如FRM監(jiān)聽到改變就寫到config里面以發(fā)送流到設備。這個可以用來做預配置-應用程序可以為一些尚未存在的設備寫一些“有用的“流,一旦設備存在相關的流就會下發(fā)到其中,而不用任何應用程序的動作。Config 一般用來下發(fā)配置(post,put),也可以獲取信息(get)Operational一般是獲取實際設備信息(get),config data store的內容和operational data store的內容可能不同,但是不同模塊之間兩者的設計可能不太相同,舉例說明:對于openflow協議:operatio

14、nal反映設備的實際信息,假如下發(fā)配置,流程是config->device->operational對于bgp協議:下發(fā)配置流程是:config->operational->device在YANG模型中,只有當 “config true”存在時這段數據才是config data store的內容,否則均為operational data store,不定義則默認”config false”.RPCrpc:用于定義netconf的一個rpc操作。它可能包含input和output子節(jié)點,分別是該rpc操作所需要的輸入和輸出數據結構。若沒有則表明該操作不需要輸入數據或者沒有

15、輸出數據。NOTIFICAION除了rpc,yang還有一個類似的“notification”, notification用于定義netconf的通知消息的內容,也是用來定義一個服務。兩者的區(qū)別在于rpc是一對一的,即單播,而notification是多播的,當Provider提交一個notification時,所有的訂閱該服務的Consumer都會收到通知,如典型的PacketIn消息,所謂的訂閱即實現該notification的接口。rpc生成的接口類名后綴都是Service。nontification生成的接口類名后綴是Listener。OpenDaylight南北向接口針對以上討論了這

16、么多關于YANG模型的知識, YANG模型除卻本身作為NETCONF協議的數據建模語言之外,在OpenDaylight中的應用誕生了眾所周知的MD-SAL。MD-SAL簡述對于服務抽象層的Model-driven方法體現出一種統一北向和南向API以及SDN控制器中多種服務和元素中所使用的數據結構。為了描述控制器元素所提供的數據結構,YANG模型作為一種服務和數據抽象的建模語言就起到了作用。MD-SAL(Model Driven Service Abstraction Layer)模型驅動服務抽象層的特別就體現在模型(即YANG模型)驅動。如前所述,YANG模型可以無差別地轉換為XML格式,同時

17、可以通過yangtools生成java代碼,這就是YANG模型實現對OpenDaylight南北向接口數據建模的關鍵。下面以實際示例的形式展現YANG模型定義與南北向接口的關系。YANG模型與北向接口圖3、圖6、圖7所示為一個簡單的北向接口示例的YANG模型截圖,在完成YANG模型、java程序實現以后,啟動起OpenDaylight可以在北向得到如下RESTCONF接口:圖12為了看的清楚接下來采用restclient做展示針對以上YANG模型定義,可以知道相應的配置下發(fā)為: 圖13下發(fā)之后可以通過get方法查到剛剛所下發(fā)的配置,如下圖所示圖14以上簡單示例了一個yang模型對北向接口數據結

18、構的定義模式,其中還有很多諸如operational data store& config data store、list& key以及格式書寫的細節(jié),由于時間關系就暫且不展示了。YANG模型與南向接口YANG模型與南向接口的關系主要由java語言體現,也即yangtools將YANG模型生成相應的java代碼,對于這部分將以ovsdb代碼作展示。在ovsdb->southbound中定義了ovsdb的具體南向接口,截取southbound-api中ovsdb.yang中的一條主線如下所示,其實由此我們同時也可以分析出ovsdb的北向接口,即為http:/localhos

19、t:8181/config/network-topology:network-topology/topology/topology-id/node/node-id/termination-point/tp-id/下面我們來找一下這樣的YANG模型會生成什么樣子的java代碼:跟從YANG模型定義的路徑就可以追蹤到想要找到的接口生成代碼,對于這個例子來說,YANG模型生成的代碼如上圖所示。上圖是針對augment來說所生成的代碼,圖中容易看到,在ovsdb-port-interface-attributes中所具有的leaf節(jié)點,在ovsdbTerminationPointAugmentationBuilder.java中都有相應的getter和setter方法(如圖中灰色部分的getOptions)。在中很容易搜到yang-java mapping的頁面,在此不再敖述。Tips:仔細觀察yang模型與生成的代碼不難發(fā)現,本例中的list都是具有interface的java文件,而leaf則沒有,yang模型生成的代碼多很容易混亂,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論