華為技術有限公司 北京 100095
SDN是近年來網絡領域的熱點話題,代表著網絡未來的發展、演進方向。軟件定義網絡是一種新型的網絡架構,在這一新型架構中,網絡按照層次分為三層,即應用層、控制層和基礎設備層,實現網絡控制與轉發的解耦,構建開放、可編程的網絡體系結構,如圖1所示。SDN生態體系的開放與可編程,使得網絡服務、應用的開發與部署大大加快,支持未來各種網絡體系結構和新興業務的創新,滿足新應用、新技術的time-tomarket快速部署、發放的能力。

圖1 網絡開放接口
開放、可編程是SDN網絡的顯著特征。SDN網絡中,開放接口的關注點逐漸上移,主要經歷了三個階段。
第一階段,網絡開放關注基礎設備層的設備開放接口,通過設備開放接口,直接實現對網絡基礎設備的控制域編程,通過直接生成并下發網絡基礎設備(如交換機、路由器以及網絡芯片)的轉發表項,實現網絡對數據報文轉發行為的控制,在Open Networking Foundation中定義了OpenFlow協議標準[1],通過[match, action]的模型方式,生成對包轉發的轉發表項,實現在網絡設備具體的轉發行為的細節控制。
第二階段,網絡開放關注控制器能力開放,通過控制器的開放接口,可以實現特定的功能型、特定場景或技術方案的網絡控制能力實現。在ONF的North Bound Interface Work Group中,定義了大量的不同功能的開放接口,如Topology接口,L2VPN、L3VPN接口,Tunnel接口等,這些接口從具體的獨立的網絡能力角度,隱藏了具體網絡設備的轉發表項細節。此階段的控制能力開放接口,雖具備了一定的抽象,簡化了使用流程,使用者仍需具備豐富的網絡知識和相關技術背景。
當前,第三階段,網絡開放關注系統能力開放接口,更注重于網絡整體能力的抽象與開放,提供面向網絡操作意圖的網絡操作接口。使用這類用戶意圖的聲明式接口,網絡用戶、應用只需描述想要“What”,而無需關心“How”[2],向用戶隱藏了網絡相關的技術信息,大大降低了網絡用戶、服務的網絡操作難度,使得網絡更容易被操作和使用。
近年來Intent NBI已經在標準、學術界以及開源上越來越引起人們的關注與參與。
在標準上,2014年底在IETF成立IB-NEMO討論組,專注于推動面向用戶意圖的Intent北向接口,2015年10月成立SUPA(Simplified Use of Policy Abstractions)工作組也將Intent Policy作為未來網絡控制領域的核心發展趨勢,2015年初ONF專門成立Intent NBI工作組,討論Intent的架構以及接口。
在學術領域,Sigcomm發表了多篇研究Intent的論文[3-4]。其中,Université catholique de Louvain大學發表的《A Declarative and Expressive Approach to Control Forwarding Paths in Carrier-Grade N e t w o r k s》[5]設計了一種稱為D E F O的網絡DSL(Domain Specific Language),該語言也是一種通過抽象topology、demand、constraint來描述網絡行為目標(Intent)的語言。University of Wisconsin-Madison大學發表的《PGA: Using Graphs to Express and Automatically Reconcile Network Policies》[6],重點研究多用戶Intent Policy的組合計算和沖突解決方法。
在開源領域,ODL、ONOS、OpenStack也都已經開始涌現面向Intent實現的開源項目。ONOS側重于Intent Framework,提供一個Intent整體運行環境與框架,而Intent NBI的具體接口設計與實現的開源項目主要集中在opendaylight中。其中,GBP、NEMO、NIC是Opendaylight中面向Intent的主要項目。GBP采用抽象Group和Group之間的通信需求契約Contract來描述用戶需求,而NIC采用endpoint之間的operation來描述業務需求,但這兩個項目的主要目標應用場景為數據中心DC內的網絡需求描述,難以實現、滿足復雜多樣的WAN網絡需求。
NEMO通過對網絡資源以及網絡行為的抽象,提供了免用用戶意圖的Intent模型,并基于該模型設計了面向網絡操作的DSL。相較于紛繁復雜的功能型接口,NEMO語言利用有限的網絡抽象元語,即可實現對網絡資源、業務以及操作的靈活表達,并可適用于數據中心、WAN網絡等多種網絡中。
NEMO的核心目標是提供一種抽象的面向用戶意圖的Intent NBI以及相應的描述網絡需求的語言。通過這種Intent接口,用戶只需聚焦于真正的業務需求,而無需關心具體的網絡實現技術。在數據存儲領域,一個成功的應用是SQL (Structured Query Language),它將復雜的數據操作抽象成一種統一的、直觀的方式供用戶使用,屏蔽底層數據存儲以及操作的具體機制。借鑒于SQL,NEMO提供了一種高級的簡單直觀的網絡操作語言,屏蔽底層復雜的網絡技術實現,實現業務的靈活表達與部署。所以,NEMO是“網絡領域的SQL”。
從網絡用戶或應用對網絡需求的Intent描述到最終映射到物理網絡的配置信息,主要經過以下3個轉變過程,如圖2所示。

圖2 NEMO總體處理流程與操作方法
1)抽象。從網絡資源使用角度來看,網絡拓撲、轉發能力以及網絡策略構成了網絡管理的三大核心元素。為方便用戶或應用表達對網絡的需求,網絡核心元素需求被抽象成更加統一、抽象的網絡對象模型,屏蔽不同廠家、設備細節的差異,在NEMO模型中,網絡對象模型為[object,operation]。對于三種類型的核心網絡元素,拓撲被抽象成結點(node)以及結點之間的鏈路(connection);轉發能力被抽象成不同種類的流( fl ow);網絡策略被抽象成各種網絡操作,如條件(condition)、行為(action)以及約束(constraint)。
2)編排組合。利用抽象出的網絡對象模型,用戶或者網絡應用可以根據自己的需求,組合或編排出各種網絡意圖,實現對網絡資源分配、網絡業務的自定義部署。用戶可以定義被操作對象object,以及作用在網絡對象上的網絡行為,實現對網絡的整體控制,如網絡資源申請、拓撲管理、帶寬控制、SLA等。
3)編譯和映射。用戶使用NEMO語言表述的目標需求,首先經過編譯處理,將用戶的業務資源需求視圖生成用戶獨立的虛擬網絡需求視圖;經過映射邏輯,實現用戶的虛擬網絡需求視圖到真實物理網絡的部署。
1)對用戶的網絡操作意圖的抽象,得到網絡目標信息模型。
2)以用戶為中心的北向接口設計,以網絡用戶、服務的網絡操作為角度,抽象關鍵詞,形成平臺無關、底層網絡技術無關、聲明式(declarative)的語言。
3)網絡用戶的Intent需求描述要可靈活組合、安全、可理解、無二義性,編譯、映射結果要無沖突。
4)可映射,可以實現用戶高級抽象的業務需求到網絡具體技術相關、復雜的網絡控制指令的編譯、映射。
5)MDA架構,南向網絡技術的PnP特性,能夠滿足底層多樣性網絡技術映射需求,實現PIM到PSM的映射,同時滿足新增南向網絡技術的在線加載。
6)多租戶的支持,用戶之間的業務視圖、網絡視圖要相互隔離、互不影響,每個租戶擁有自己的絕對安全的網絡使用空間。
7)網絡變化自適應,對于網絡的異常、網絡性能變化,能夠自動重新進行虛擬網絡到物理網絡的映射、部署,網絡用戶、服務感知不到網絡變化,降低網絡異常對業務的影響。
NEMO作為將用戶業務需求轉換為物理網絡配置的一整套系統,包括NEMO模型、具體語言表現形式以及NEMO引擎對用戶需求的處理以及對物理網絡的映射。本節將會介紹NEMO模型、語言以及NEMO引擎的設計,還會列舉幾個典型的應用實例。
現有的網絡資源和業務抽象采用“自底向上”的抽象方式,聚焦在控制器的能力開放上,而非從網絡用戶操作需求角度出發,難以滿足用戶意圖,并且,功能型接口隨著網絡功能的增加層出不窮,很難收斂,不同功能型接口很難配合拉通,難以實現組合和復用。為解決這些問題,NEMO提供一套通用的用戶Intent描述的接口和語言的表述方式,實現復雜的網絡需求功能。
從對Intent處理流程來看,NEMO抽象可以分成三個層次,即業務視圖層、虛擬網絡視圖層和物理網絡視圖層。通用的抽象模型應該能夠適用于各個層次的不同需求。分析每個層次的不同需求,均可以表示為[object,operation],即對某對象進行何種操作。為適應不同層次的需求,object和operation在各個層次會有不同的實例以及不同的屬性。除了采取確定操作的Intent外,用戶也可以僅表明期待或避免的結果,而不指定采用何種operation達到這種狀態,因此,result是NEMO模型對Intent的另一種抽象。
使用基于模型的抽象方法(Model-based Abstraction)對網絡資源和業務進行抽象,可以將intent抽象為對象(object)、操作(operation)以及結果(result),如圖3所示。用戶只需表明最終的網絡狀態,而不必關心如何達到這種網絡狀態。例如,保證所有鏈路的利用率小于80%。用戶無需關心采取何種operation去實現這個狀態。

圖3 NEMO模型
對象(object)是一個抽象類,定義了被管理或被作用的對象,在不同層次中可以被繼承或者擴展。不同的抽象層次中,object指代的具體內容存在差異。例如,在業務視圖層,object可以是業務結點、業務結點之間的鏈路或者關注的數據流等,而在物理網絡視圖,object將是不同的網絡設備。
對象(object)由node、connection和flow構成。Node指的是一種網絡資源,代表了網絡功能結點,如網絡業務結點、轉發功能結點(防火墻,負載均衡器等)或者一系列網絡功能結點的邏輯集合(子網、自治域等)。Connection是另外一種網絡資源,描述了node實體之間的邏輯鏈路。Connection并不指代具體的物理鏈路,只描述node之間的可達關系。Connection作為連通資源,是保證可達性的必要條件。Flow指的是滿足特定特征的網絡流量,典型的匹配項是網絡流量的五元組。
操作(operation)是一個抽象類,定義了為實現某種網絡業務需求而采取的網絡動作。如改變特定數據流路徑,阻斷不安全訪問等。更詳細地,operation可以分為帶條件(condition)或限制(constraint)的操作或者不帶條件或限制的操作。
Operation由condition、action和constraint組成。Action是構成operation的必要組成部分,表示采取的具體動作。Condition代表了operation的觸發條件,只有當condition滿足時,action才開始生效。Constraint代表對action本身的限制或者對action操作范圍的限制。
結果(result)代表了一種期待或者避免的最終狀態。
NEMO語言是基于網絡抽象模型以及網絡行為操作的一種DSL。利用有限的關鍵詞以及特定的語法結構,以接近自然語言的形式表示用戶的Intent。
針對NEMO模型中的每個元素對象,NEMO語言對應的語法規則如下所示。
1)對于Node:
METHOD Node node-name Type node-type Contain subnodes Property property-name: propertyvalue。
METHOD指的是對node實例采取的操作,創建(CREATE)、更新(UPDATE)、刪除(DELETE)以及導入(IMPORT)。Node、Type、Contain和Property是定義Node關鍵詞。其中Node表明該node的名字標識,Type表明了該node的類型,如l2-group;Contain表明了該node包含的內部結點,如主機h1;Property表明了該node的屬性,如ip-prefix。其中,Contain和Property可根據情況確定是否保留。
2)對于Connection:
METHOD Connection connection-name Type connection-type Endnodes node-names Property property-name: property-value。
METHOD指的是對connection實例采取的操作,創建(CREATE)、更新(UPDATE)、刪除(DELETE)以及導入(IMPORT)。Connection、Type、Endnodes和Property是定義Connection的關鍵字。Connection表明該connection的名字標識,Type表明該connection的類型,如p2p;Endnodes表明connection連接的node,Property表明該connection的屬性,如bandwidth。其中,Property可根據情況確定是否保留。
3)對于Flow:
METHOD Flow flow-name Match match-type:match-value。
METHOD指的是對flow實例采取的操作,創建(CREATE)、更新(UPDATE)、刪除(DELETE)以及導入(IMPORT)。Flow、Match是定義Flow的關鍵字。Flow表明該flow的名字標識,Match表明該flow匹配的特定數據包特征,如source ip。
4)對于Operation:
METHOD Operation operation-name Priority value Target object-name Condition conditionexpression Action action-type Constraint constraintexpression。
METHOD指的是對operation實例采取的操作,創建(CREATE)、更新(UPDATE)、刪除(DELETE)以及導入(IMPORT)。Operation、Priority、Target、Condition、Action和Constraint是定義operation的關鍵詞。Operation表明該Operation的名字標識,Priority表明該Operation的優先級,優先級越高越先被執行,Target表明該Operation操作的對象,如node實例;Action表明該Operation采取的具體動作,condition表明該Operation的action的觸發條件,當Condition滿足時,Action被觸發,Constraint表明采取action的限制條件。目前NEMO語言支持的object類型、每種object的屬性以及Operation中支持的action、condition請參見文獻[7]。
另外,NEMO語言支持對新object類型和action的擴展。語法如下:
METHOD NodeModel/ConnectionModel/FlowModel/ActionModel type-name Property propertyname: property-value-type。
METHOD指的是對model實例采取的操作,創建(CREATE)、更新(UPDATE)、刪除(DELETE)以及導入(IMPORT)。其中NodeModel、ConnectionModel、FlowModel、ActionModel和Property為定義model的關鍵字。Property表明每種model的屬性名以及屬性值的數據類型。
NEMO引擎是實現用于意圖描述到物理網絡配置的核心部件。NEMO引擎在完成Intent到設備配置時經歷了兩個階段,首先完成將Intent業務視圖編譯成虛擬網絡視圖,再將虛擬網絡視圖映射到物理網絡視圖上。引擎的架構圖如圖4所示。

圖4 NEMO引擎架構設計
NEMO引擎實現了從用NEMO語言描述的業務需求到具體物理網絡配置的映射。租戶管理完成用戶虛擬網絡空間的管理,每個組合獨享一個VN space,業務邏輯管理完成對應NEMO描述的業務需求的語法檢查,虛擬網絡管理用于根據一定的算法生成滿足用戶需求的虛擬網絡,物理網絡控制域管理實現了從虛擬網絡對物理網絡的映射,而物理網絡插件是物理網絡設備與NEMO引擎的中間件,用于將映射結果配置到相應的物理設備上。
NEMO引擎在實現上主要經過了兩個階段。
1)編譯階段。NEMO引擎按照特定的算法,將用戶利用NEMO模型(node/connection/flow/operation)表達的業務需求編譯成特定的虛擬網絡,以及對虛擬網絡的控制。NEMO引擎采用[host,vRouter,vSwitch,vLink]模型來表示虛擬網絡。具體生成的規則如下。
①對在業務視圖上的每個l2-group包含的host類型的結點根據接入位置創建vSwitch,即將接入相同設備的host創建一個vSwitch,否則,創建多個vSwitch,并將后創建的vSwitch都連接到第一個被創建的vSwitch上。②對業務視圖上的每個l3-group類型的結點,創建一個vRouter,并將其中包含的l2-group結點對應的第一個vSwitch連接到vRouter上。③在業務視圖上的每個二層ext-group類型的結點分配一個vSwitch。④在業務視圖上的每個三層ext-group類型的結點分配一個vRouter。⑥對業務視圖上l2-group結點與l3-group結點連接,相當于將l2-group創建的vSwitch連接到l3-group結點對應的vRouter上。⑦在業務視圖上l3-group之間的互連,將所有l3-group對應的vRouter都連接到第一個vRouter上。
一個典型的例子如圖5所示。用戶創建1個l2-group結點n1,2個外部的l3-group結點,并且該l2-group包含2臺從不同位置接入的主機。

圖5 業務視圖
根據上述提供的生成虛擬網絡的規則,不同位置接入的主機在生成虛擬網絡時會創建兩個vSwitch,并將第二個vSwitch連接到第一個vSwitch上。對于外部的l3-group根據接入位置的不同創建兩個vRouter,并將這兩個vRouter連接到l2-group對應的vRouter上。生成的虛擬網絡視圖如圖6所示。

圖6 虛擬網絡視圖
2)映射階段。為實現物理網絡的控制,需要將編譯生成的虛擬網絡映射到物理網絡上。NEMO引擎采用[host,switch,router,path]模型表示對物理網絡的抽象。虛擬網絡到物理網絡的映射算法規則如下。
①虛擬網絡中生成的vSwitch會映射到與vSwitch連接主機的接入設備上。
②為二層ext-group結點創建的vSwitch映射到extgroup的接入設備上。
③為三層ext-group結點創建的vRouter映射到extgroup的接入設備上。
④虛擬網絡中的vRouter(除了③中的)將會被映射到物理網關或核心路由器上。
⑤虛擬網絡中的vLink將會被映射到物理網絡路徑上,該路徑將是各種不同技術實現的隧道。
根據映射算法,將實現虛擬網絡到物理網絡的映射,但該映射過程強烈依賴于底層物理網絡的狀態,底層網絡狀態的異常、資源不足等均可導致映射失敗。因此,NEMO引擎具有發現底層物理網絡狀態,并當網絡狀態發生變化時觸發引擎的重映射。
NEMO是用于網絡業務描述、部署的統一抽象模型,適用于任意SDN網絡(包括數據中心、WAN網絡等)任意網絡業務的部署,但該模型不涉及網元的創建與管理(如NFV中虛擬資源組件的創建)。
本節介紹利用NEMO語言、NEMO引擎實現從業務需求描述到物理配置的典型實例。
業務需求描述:企業A有兩個站點,總部在北京,分部在深圳。企業A希望兩個站點之間的視頻連接在9:00-18:00時間內享受2Gb/s帶寬,而在其他時間段帶寬為1Gb/s。
利用NEMO語言描述該業務需求如下所示。
CREATE Node headquarter Type l2-group Property ippref i x: 192.0.2.0/24, location: Beijing;
CREATE Node site Type l2-group Property ip-prefix:198.51.100.0/24, location: Shenzhen;
CREATE Connection c1 Type p2p Endnodes headquarter, site;
CREATE Flow f1 Match src-ip 192.0.2.0/24, dst-ip 198.51.100.0/24, proto: video;
CREATE Operation o1 Priority 2 Object f1 Condition time > 9 && time < 18 Action qos-bandwidth 2048 M;CREATE Operation o2 Priority 1 Object f1 Action qosbandwidth: 1024 M;
為驗證NEMO描述的Intent對物理網絡的影響,設計仿真物理網絡,如圖7所示。該物理網絡中的交換機由OpenVswitch仿真。

圖7 BoD場景的仿真物理網絡
在控制器上下發NEMO語句,由NEMO引擎完成對物理網絡的配置。為直觀驗證帶寬的變化,現將head所在虛擬機設為視頻服務器,site所在虛擬機設置為視頻客戶端,分別在不同時段播放視頻,利用視頻的卡頓來驗證帶寬的變化。
圖8是在不同時間段采集的視頻圖像,從圖像上可以直觀感受利用NEMO引擎已經實現了不同時間段帶寬的靈活調整,實現了業務的快速部署。

圖8 不同時間段采集到視頻
業務需求:企業B的總部在北京,分部在深圳,企業B希望兩站點之間的HTTP流經過特定的防火墻以及負載均衡器。采用NEMO語言描述該需求如下所示。
CREATE Node headquarter Type l2-group Property ippref i x: 192.0.2.0/24 location: Beijing;
CREATE Node site Type l2-group Property ip-prefix:198.51.100.0/24 location: Shenzhen;
CREATE Connection c1 Type p2p Endnodes headquarter, site;
IMPORT Node fw1 Type fw;
IMPORT Node lb1 Type lb;
CREATE Node chain1 Type chain-group Contain fw1,lb1;
CREATE Connection c2 Type p2p Endnodes headquarter, chain1;
CREATE Connection c3 Type p2p Endnodes chain1,site;
CREATE Flow f1 Match src-ip: 192.0.2.0/24, dst-ip:198.51.100.0/24, dst-port: 80;
CREATE Operation o1 Priority 1 Object f1 Action gothrough: chain1;
為驗證是否該業務可實際部署到物理網絡中,設計仿真網絡如圖9所示。

圖9 業務鏈場景仿真物理網絡
在控制器上下發NEMO語句,利用主機之間的HTTP包來驗證業務是否流經業務鏈。
經驗證,當防火墻規則為允許包轉發時,兩站點之間的HTTP包可達,若關閉防火墻的轉發功能,兩站點之間的HTTP包不可達。利用在防火墻上設置規則,可成功驗證兩站點之間通信的業務流已經被引入到業務鏈中。利用NEMO模型,可快速實現業務鏈場景的靈活部署。
目前,面向Intent的SDN北向接口模型還處于研究中,各個標準組織還沒有達成對這一接口的共識,但在開源領域,一些模型已經獲得了廣泛關注,具有較大影響力。
Neutron為Openstack提供了“網絡即服務”的功能,租戶在云中能夠自定義構建起一套虛擬網絡環境,互聯其虛擬機,并提供網絡服務,真正構建起一個屬于租戶的虛擬DC,如圖10所示。Neutron將網絡抽象為網絡Network、子網subnet、端口port、路由器router等。

圖10 Neutron構建的物理網絡
Neutron的網絡抽象適用于云計算網絡場景,以虛擬機中心,弱化拓撲概念。但該抽象只能描述虛擬機之間的互通與隔離,不能描述大部分的網絡業務,如SLA、QoS等。雖然現在Neutron也在擴展,但只是逐個場景的擴展,針對一個業務需求就實現一個擴展,沒有一個通用的模型來支撐。
針對當前大量的三層網絡業務需求,GBP引入了策略模型,使用group和policy rule來描述網絡業務需求,可以很方便地實現業務的自動化和安全性。
GBP將策略作用的對象稱為group,將具有相同策略的虛擬機組合成group,策略是一些規則的集合,每個規則規定了兩個group之間流量的行為,比如重定向、業務鏈等。GBP提出的模型如圖11所示。
GBP模型改善了Neutron的不足,引入了動態調整機制,但GBP提出的模型只關注對流的處理,不能描述對網絡拓撲、網絡資源的請求,適用于數據中心網絡,對WAN等復雜網絡、復雜場景并不具有通用性。相對于這些北向接口模型,NEMO模型適用于各種網絡,并且以接近自然語言的方式實現業務的描述,自動完成對網絡的配置管理,真正實現了將各種業務統一為一種網絡業務模型,實現業務的靈活部署與快速發放。
本文通過分析SDN領域開放接口演進的三個階段,提出新型的網絡接口應是面向網絡操作意圖的抽象接口,即任何網絡應用只需描述需要達到的結果即“What”,而不用關心實現該意圖的具體操作過程即“How”。采用“自頂向下”提出了一種新型網絡業務編程語言NEMO,將現有網絡操作意圖(Network Intent)抽象成一系列的網絡元語,通過這些網絡元語的靈活組合形成豐富的網絡應用。另外,本文介紹了NEMO通過對網絡資源和網絡行為抽象出的網絡Intent模型,即[object,operation]和result模型以及一種接近自然語言的語言表現形式,并介紹了NEMO引擎的架構設計,即實現Intent表示到具體設備配置的實現方式。為使用戶更直觀地體驗NEMO實現業務部署的靈活性,最后提供了常見網絡應用場景的部署過程以及最終效果。隨著網絡自動化過程的不斷推進,提供面向用戶Intent的網絡操作接口及網絡整體能力的抽象與開放,必將成為未來網絡的發展方向,促進SDN網絡生態環境更加繁榮。

圖11 GBP模型
參考文獻
[1]Pat Bosshart, Dan Daly, Glen Gibb, et al. P4: programming protocol-independent packet processors[J]. ACM SIGCOMM Computer Communication, 2014,44(3): 87-95
[2]Christopher J. Intent NBI -Definition and Principles[R].Version V3.August, 2015
[3]Brandon Schlinker, Radhika Niranjan Mysore, Sean Smith,et al. Condor: Better Topologies Through Declarative Design[C]//the 2015 ACM Conference on Special Interest Group on Data Communication, 2015: 449-463
[4]Stefano Vissicchio, Olivier Tilmans, Laurent Vanbever,et al. Central Control Over Distributed Routing[C]//the 2015 ACM Conference on Special Interest Group on Data Communication,2015
[5]Chaithan Prakash, Jeongkeun Lee, Yoshio Turner,et al. PGA:Using Graphs to Express and Automatically Reconcile Network Policies[C]//the 2015 ACM Conference on Special Interest Group on Data Communication,2015:29-42
[6]Renaud Hartert, Stefano Vissicchio, Pierre Schaus,et al. A Declarative and E x p r e s s i v e A p p r o a c h t o Control Forwarding Paths in Carrier-Grade Networks[C]//the 2015 ACM Conference on Special Interest Group on Data Communication,2015
[7]Reference manual[EB/OL].[2016-07-22].https://wiki.opendaylight.org/images/e/ee/Reference_manual.01.pdf