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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

6、e的一種簡寫,其次import用來定義導(dǎo)入的其他YANG模型,注意到在后面的大括號中包括這個YANG模型的prefix和revision-data。revision用來唯一定義這個YANG模型的revision。其余一些organization、contact、description定義僅用于描述。YANG模型是一個XML格式定義語言。另外,針對上圖示例中沒有體現(xiàn)的“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定義的具有結(jié)構(gòu)的類型。接下來在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”的細(xì)節(jié)定義,有興趣可查

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

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

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

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

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

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

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

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

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

18、構(gòu)的定義模式,其中還有很多諸如operational data store& config data store、list& key以及格式書寫的細(xì)節(jié),由于時間關(guān)系就暫且不展示了。YANG模型與南向接口YANG模型與南向接口的關(guān)系主要由java語言體現(xiàn),也即yangtools將YANG模型生成相應(yīng)的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中都有相應(yīng)的getter和setter方法(如圖中灰色部分的getOptions)。在中很容易搜到y(tǒng)ang-java mapping的頁面,在此不再敖述。Tips:仔細(xì)觀察yang模型與生成的代碼不難發(fā)現(xiàn),本例中的list都是具有interface的java文件,而leaf則沒有,yang模型生成的代碼多很容易混亂,

溫馨提示

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

最新文檔

評論

0/150

提交評論