資源描述:
《yang模型介紹及語法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
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,Section1.1)。YANG模型特性:?建模XML格式數(shù)據(jù)并由控制器元素提供功能:具有自己的語法格式,可以無差地轉(zhuǎn)化為XML格式,同時(shí)通過yangtoolsplugin可以生成相應(yīng)的java接口、類及方法等,為OpenDaylight內(nèi)部數(shù)據(jù)(控制
2、器元素)處理編程提供了便利。?定義語義元素和他們的關(guān)系,模擬所有的元素作為一個(gè)系統(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ā)者可以定義一個(gè)模型,從而可以創(chuàng)建對(duì)于所提供功能的更簡單的、數(shù)據(jù)類型的API。因此降低了通過服務(wù)抽象層提供的數(shù)據(jù)結(jié)構(gòu)的錯(cuò)誤交互。YANG模型與N
3、ETCONF由最初YANG模型的定義可知,YANG模型與NETCONF密切相關(guān),其產(chǎn)生是為了對(duì)NETCONF協(xié)議所操作的數(shù)據(jù)進(jìn)行建模。最初的網(wǎng)絡(luò)管理協(xié)議SNMP也有對(duì)應(yīng)的建模語言SMI。下圖給出NETCONF/YANG與SNMP/SMI相關(guān)概念對(duì)比。圖1如圖中所示,NETCONF在很多方面體現(xiàn)出對(duì)于SNMP協(xié)議的優(yōu)越性,NETCONF協(xié)議由XML編碼,以SSH加密,采用TCP連接,體現(xiàn)出更好的安全性和可靠性。下面簡單引出NETCONF協(xié)議的configurationdatastore。PicYANG模型通過樹形結(jié)構(gòu)的節(jié)點(diǎn)定義描
4、述了數(shù)據(jù)模型的層級(jí)嵌套結(jié)構(gòu)以及各屬性的數(shù)據(jù)類型。YANG具有自己的語法格式,也可以無差別地轉(zhuǎn)換為XML格式,稱之為YIN??梢允褂玫谌焦ぞ遬yang進(jìn)行轉(zhuǎn)換。pyang地址:http://www.yang-central.org/twiki/pub/Main/YangTools/pyang.1.html接下來將會(huì)對(duì)YANG模型的語法和語義進(jìn)行描述,說明在YANG中數(shù)據(jù)模型是如何定義的,并且以XML格式展示,以及NETCONF操作如何來操作數(shù)據(jù)。(https://tools.ietf.org/html/rfc6020#sect
5、ion-1)YANG模型語義及語法YANG模型主要內(nèi)容圖2正如之前所提到的,除去headerinformation、imports&includes、Typedefinitions之外,YANG模型的主要內(nèi)容Configuration&Operationaldatadeclarations和Action(RPC)&Notificationdeclarations對(duì)應(yīng)了YANG模型定義中的“NETCONF協(xié)議、NETCONF遠(yuǎn)端過程調(diào)用(RPCs)、和NETCONF通知(notification)”。下面將通過基本示例來介紹以上
6、所述主要內(nèi)容。YANGHEADER圖3上圖所示是一個(gè)YANG文件的HEADER,其中modulename(vxlan)要與YANG文件的文件名一致(即這個(gè)YANG文件的名字為vxlan.yang),namespace用來唯一標(biāo)識(shí)這個(gè)YANG模型與其他YANG模型不同,prefix作為namespace的一種簡寫,其次import用來定義導(dǎo)入的其他YANG模型,注意到在后面的大括號(hào)中包括這個(gè)YANG模型的prefix和revision-data。revision用來唯一定義這個(gè)YANG模型的revision。其余一些organi
7、zation、contact、description定義僅用于描述。YANG模型是一個(gè)XML格式定義語言。另外,針對(duì)上圖示例中沒有體現(xiàn)的“include”來說,include是用于將sub-module引入到module里面,這個(gè)module不一定要有一個(gè)文件。Submodule沒有namespace而是以belongs-to來表征屬于哪一個(gè)mainmodule.YANGTYPESDataTypeYANG模型的DataType包括BaseType和DerivedType,BaseType即為一個(gè)簡單的類型,DerivedTyp
8、e或許是typedefs定義的一個(gè)BaseType或許是grouping定義的具有結(jié)構(gòu)的類型。接下來在TypedefStatement和GroupingStatement中將會(huì)進(jìn)一步介紹DerivedType。BaseTypeTheleafStatementTheleaf-l