【OpenEvent 事件框架與框架中事件實例的實現(xiàn)綜述4700字】_第1頁
【OpenEvent 事件框架與框架中事件實例的實現(xiàn)綜述4700字】_第2頁
【OpenEvent 事件框架與框架中事件實例的實現(xiàn)綜述4700字】_第3頁
【OpenEvent 事件框架與框架中事件實例的實現(xiàn)綜述4700字】_第4頁
【OpenEvent 事件框架與框架中事件實例的實現(xiàn)綜述4700字】_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

OpenEvent事件框架與框架中事件實例的實現(xiàn)綜述目錄TOC\o"1-2"\h\u201891.1通信協(xié)議 1105621.1.1事件請求 1281181.1.2事件請求回復 2241941.2控制器端的實現(xiàn) 2256551.3交換機端的實現(xiàn) 31.1通信協(xié)議OpenEvent事件框架定義了一系列的OpenFlow消息,用于控制器與交換機之間對事件請求、事件請求回復和事件上報。所有的消息均屬于OpenFlow自定義類型消息。這一類消息是預留給設備制造商或者其他使用者實現(xiàn)自定義OpenFlow擴展的預留接口。OpenFlow自定義類型消息需要包含制造商或擴展開發(fā)者的32位使用者ID。子類型部分表示廠商或開發(fā)者對屬于同一使用者ID下各類型消息的分類。OpenFlow對自定義類型消息內(nèi)容部分的格式,以及控制器與交換機對此類消息的處理方式完全沒有規(guī)定,可以自主擴展。OpenEvent中的消息均用使用者ID0xEBCC3118來區(qū)分。該框架中包含三大類消息:事件請求、事件請求回復、事件報告。這三大類消息用子類型來區(qū)分。事件請求用于控制器對交換機上的事件進行操作;事件請求回復用于交換機向控制器回復事件請求的執(zhí)行結(jié)果;事件報告用于交換機在某一事件發(fā)生時,向控制器報告該事件的發(fā)生以及該事件中指定的統(tǒng)計數(shù)據(jù)。1.1.1事件請求事件請求消息由控制器向交換機發(fā)出,用于描述控制器對交換機上的事件的添加、刪除或者修改配置的請求。事件請求消息的子類型為0?!爸芷谛浴?PERIODIC)標志用于指示該事件是否可以重復被觸發(fā)。當該標志被設為1時,該事件具有周期性,每當事件的觸發(fā)條件被滿足時,該事件都會被觸發(fā),并上報控制器;設為2時,該事件為一次性事件,僅在第一次滿足觸發(fā)條件時被觸發(fā)。事件ID為該事件在交換機中的唯一標識符。事件類型表示該事件所屬的類型,為目前已經(jīng)定義和實現(xiàn)的兩類事件指定了事件類型的值,其他的值可以供將來定義的事件類型使用。目前,事件請求分為三種類型,由請求類型域的值來指定。這三種請求類型為:添加事件請求、修改事件請求、刪除事件請求。添加事件請求使用請求類型0??刂破魍ㄟ^向交換機發(fā)送添加事件請求來要求交換機安裝并監(jiān)測一個新的事件。在添加事件請求中,事件ID總是被設為0,以表示這個事件的ID還沒有被確定。交換機應當為該新安裝的事件指定一個非0、在該交換機中唯一的事件ID,并在回復中上報。其他必要的對該事件的配置在請求的消息體部分指定,消息體部分的格式與解釋方式由各類具體的事件來規(guī)定。修改事件請求的請求類型為1??刂破魍ㄟ^向交換機發(fā)送修改事件請求來修改一個交換機上已經(jīng)存在的事件的配置。在請求中,控制器必須在事件ID和類型部分給出所要修改的事件的正確的ID和類型。如果在交換機中,事件ID所對應的事件不存在或者事件類型與控制器給出的不符,交換機將拒絕執(zhí)行該請求并在回復中報告錯誤。與添加事件請求類似,修改事件請求的消息體部分由具體的事件類型指定,一般應包含修改后的事件配置。刪除事件請求使用的請求類型為2。刪除事件請求用于控制器要求交換機刪除一個已經(jīng)安裝的事件。與修改事件請求類似,刪除事件請求需要正確地給出被刪除的事件的ID和事件類型。如果與ID對應的事件不存在或者類型不符,該請求也不會被執(zhí)行,并且交換機將給出出錯信息。刪除事件請求的消息體為空。1.1.2事件請求回復事件請求回復消息由交換機向控制器發(fā)出,用于回復控制器發(fā)出的事件請求。事件請求回復消息與它所回復的事件請求具有相同的OpenFlow事務ID。事件請求回復消息的子類型為1,事件請求回復消息應當包含交換機執(zhí)行其所回復的事件請求的執(zhí)行結(jié)果。事件類型部分應當與所回復的事件請求中指定的事件類型相同。對于事件ID部分,若所回復的事件請求是添加事件,那么事件請求中的事件ID為0,交換機成功添加事件后,應當將生成的事件ID填入事件ID部分。若事件請求中給出的事件ID不為0,而請求執(zhí)行成功,那么回復中的事件ID應當與請求中的相同。如果請求執(zhí)行失敗,事件ID應當被設為特殊值EVENT_ID_ERROR=0xFFFFFFF0以表示在執(zhí)行事件請求時發(fā)生了錯誤。消息體部分由具體的事件類型指定,也可以為空。1.2控制器端的實現(xiàn)在Ryu控制器提供的框架下實現(xiàn)了OpenEvent的控制器端。Ryu控制器是一個用Python語言實現(xiàn)的開源OpenFlow控制器,它提供了一個基本的OpenFlow消息處理框架與大量基于該框架的應用。Ryu的整體架構(gòu)采用事件-處理者模型。Ryu控制器運行時,最基本的OpenFlow消息處理模塊以及用戶指定的應用將會運行。Ryu控制器中的每個應用都包含若干個事件處理的數(shù),對某類事件進行處理。應用也可以產(chǎn)生各種類型的事件,并發(fā)送給其他應用。一個事件會被運行中的所有對該類事件進行處理的應用處理。OpenFlow處理模塊是運行Ryu控制器時必然會運行的應用,該應用負責接收OpenFlow消息并根據(jù)OpenFlow協(xié)議解碼這些消息,并產(chǎn)生相應的事件,同時負責編碼并發(fā)送控制器向交換機發(fā)送的OpenFlow消息。OpenEvent的控制器端實現(xiàn)為Ryu框架下的一個應用,負責處理OpenEvent框架與事件相關的OpenFlow消息,包括編碼并發(fā)送事件請求和接收并解碼事件請求回復與事件報告,并產(chǎn)生事件以通知其他應用兩部分。為實現(xiàn)接收并解碼的功能,該應用注冊了個外理收到OnenFlow自定義類型消息事件的函數(shù),該函數(shù)檢查收到的自定義類型消息的ExperimenterID是否是我們指定的0xEBCC3118,如果符合,則進行進一步的解碼;如果不符合,則處理到此為止。進一步的解碼中,該函數(shù)根據(jù)消息的子類型與消息中指定的事件類型進一步調(diào)用各類具體的消息的解碼函數(shù)。對于事件請求回復,解碼函數(shù)從消息中提取出事件類型、事件狀態(tài)、事件ID以及消息體,并產(chǎn)生一個“收到事件請求回復”的事件,通知其他可能需要處理這個消息的應用。對于事件報告,解碼函數(shù)從消息中提取出事件ID、事件類型,以及該事件類型規(guī)定的各種交換機的統(tǒng)計數(shù)據(jù)。對于端口統(tǒng)計事件,統(tǒng)計數(shù)據(jù)包括該端口在指定的時間間隔內(nèi)發(fā)送與接收的數(shù)據(jù)包數(shù)量與字節(jié)數(shù),以及該端口發(fā)送和接收的總數(shù)據(jù)包數(shù)量和字節(jié)數(shù);對于流表項統(tǒng)計事件,上報的統(tǒng)計數(shù)據(jù)包括滿足觸發(fā)條件的所有流表項分別的存在時長、在指定時間間隔內(nèi)匹配的數(shù)據(jù)包數(shù)量和字節(jié)數(shù)、流表項存在期間匹配的數(shù)據(jù)包總數(shù)和字節(jié)總數(shù)等。解碼函數(shù)提取出事件ID、事件類型和統(tǒng)計數(shù)據(jù)之后,產(chǎn)生“收到事件報告”的事件,發(fā)送給可能需要處理這一事件報告的其他應用。對于編碼并發(fā)送部分,該應用提供接口讓其他的應用給定事件請求的類型、事件類型、事件ID以及消息體,對這些信息編碼成為可以通過OpenFlow連接發(fā)送的消息。1.3交換機端的實現(xiàn)OpenEvent的交換機端的功能除了對于事件相關的各種OpenFlow消息的編碼與解碼之外,還包括對自身已安裝的事件的維護、監(jiān)測和上報。為實現(xiàn)OpenEvent的交換機端,對OpenvSwitch”的多個模塊做了改動,以實現(xiàn)OpenEvent所需要的功能。OpenvSwitch解碼OpenFlow消息時首先根據(jù)其頭部的類型這一屬性查找所屬類型,再根據(jù)消息體的頭部一些指明細分類型的屬性查找到細分類型,再調(diào)用各細分類型的解碼函數(shù)。編碼OpenFlow消息時,OpenvSwitch也根據(jù)消息所屬的細分類型調(diào)用對應的編碼函數(shù)。對于自定義類型消息,OpenvSwitch將具有不同使用者ID與或同一使用者ID,但子類型不同的消息視為不同細分類型,對于每一類細分類型的消息,需要在OpenvSwitch中注冊,并指明編碼與解碼的函數(shù)。為了讓OpenEven的消息能夠正確地在OpenSwitch中被編碼和解碼,為OpenEvent的三類消息:事件請求、事件請求回復、事件報告注冊了三種細分類型,以及相應的編碼與解碼函數(shù)。對于事件請求,OpenvSwitch收到控制器發(fā)來的OpenEvent事件請求后,首先根據(jù)消息的頭部調(diào)用對應的事件請求的解碼函數(shù)。該解碼函數(shù)繼續(xù)讀取事件請求的消息體部分,根據(jù)請求的類型與請求的事件類型進一步調(diào)用針對各類具體事件的解碼函數(shù),完成對事件請求的解碼之后,根據(jù)請求的內(nèi)容調(diào)用請求處理模塊中處理相應請求的功能。對于事件請求回復,實現(xiàn)了對事件請求回復消息的編碼函數(shù),當請求處理模塊完成了對事件請求的處理之后,調(diào)用對應的編碼函數(shù)。該編碼函數(shù)讀取請求處理的結(jié)果、對應請求的事務ID、請求的事件類型與事件ID以及其他必要的信息編碼成事件請求回復消息,發(fā)送給控制器。對于事件報告,事件被觸發(fā)時,事件監(jiān)測與上報模塊首先監(jiān)測到,并調(diào)用被觸發(fā)事件對應的編碼事件報告消息體的編碼函數(shù)。針對目前已經(jīng)定義的端口統(tǒng)計事件與流統(tǒng)計事件定義并實現(xiàn)了對應的編碼函數(shù)。然后,編碼與解碼模塊將消息體與OpenFlow頭部一同編碼成完整的事件報告,發(fā)送給控制器。OpenSwitch中,每一臺交換機中已安裝的事件由一個列表維護,每一個事件在列表中有一條對應的記錄,該記錄包含其事件類型、事件ID、安裝時間、上次觸發(fā)時間、已被觸發(fā)的次數(shù),以及由于事件類型不同而具有不同結(jié)構(gòu)的事件配置。請求處理模塊接收到添加事件的請求后,首先根據(jù)控制器對該事件的配置構(gòu)建一條新的事件記錄,如果該事件合法,可以成功添加,請求處理模塊為該事件生成一個新的事件ID,插入到事件列表中,并返回添加成功的結(jié)果,讓編碼與解碼模塊去回復給控制器;如果添加失敗(例如,端口統(tǒng)計事件中指定了不存在的端口編號),請求處理模塊返回相應的錯誤信息,由編碼與解碼模塊在對請求的回復中報告這一錯誤信息。對于修改事件請求,請求處理模塊首先檢查控制器給定的事件類型與事件ID所對應的事件在列表中是否存在。如果事件ID對應的事件在列表中不存在,請求處理模塊返回“事件不存在”錯誤;如果事件ID對應的事件在列表中存在,但其事件類型與控制器給定的事件類型不相同,請求處理模塊返回“事件類型錯誤”的錯誤信息。然后,請求處理模塊判斷控制器對該事件給出的修改后配置是否合法,如果合法,則修改事件列表中的對應記錄,將它的配置改為控制器指定的新配置,并返回修改成功的結(jié)果;若控制器給定的修改后配置不合法,則請求處理模塊返回相應的錯誤信息,并且事件配置保持不變。對于刪除事件請求,處理的原則與方法與修改事件請求類似。OpenvSwitch中,一臺交換機可以分為待機和喚醒兩個狀態(tài),當交換機待機時,它運行ofproto_wait函數(shù)等待被喚醒??赡艿膯拘言虬ㄊ盏絆penFlow消息內(nèi)核模塊部分調(diào)用了一個upcall事先設定的定時器超時等。當交換機被喚醒時,運行ofproto_run函數(shù)來調(diào)用檢查各個模塊是否有需要處理的請求和事件。為了在OpenvSwitch上實現(xiàn)對事件的檢查和上報,在交換機的待機狀態(tài)下添加了eventwait函數(shù)以在應當檢查事件是否發(fā)生時喚醒交換機,以及ofproto_eventrun函數(shù)以遍歷事件列表,查看每一個事件是否應當被檢查。對于應當檢查的事件,交換機對事件的類型調(diào)用相應的檢查函數(shù),讀取事件中規(guī)定的統(tǒng)計數(shù)據(jù)并檢查是否達到或超過了規(guī)定闕值,滿足了觸發(fā)條件。對于滿足了觸發(fā)條件的事件,對事件報告的編碼函數(shù)將被調(diào)用。在交換機中,根據(jù)檢查事件是否發(fā)生的時機,將事件分為計數(shù)器觸發(fā)與定時器觸發(fā)兩類。計數(shù)器觸發(fā)的事件將在交換機中設定一個計數(shù)器,當此計數(shù)器的計數(shù)值達到一定極限時,交換機將被喚醒,并檢查對應的事件是否滿足了觸發(fā)條件。定時器觸發(fā)的事件將在交換機中設定一個定時器,當定時器達到其超時時間時,交換機被喚醒,并檢查對應的事件是否被觸發(fā)。檢查完成后,無論該事件是否被觸發(fā),若該事件依然存在,計數(shù)器或定時器會復位,以等待下一次檢查。當一個事件被刪除時,其對應的計數(shù)器或定時器也被刪除。目前定義的端口統(tǒng)計事件與流統(tǒng)計事件均為定時器觸發(fā)。eventwait函數(shù)負責等待事件對應的計數(shù)器的計數(shù)值到達極限時或定時器到達超時時間時喚醒交換機,讓交換機調(diào)用ofprotoeventrun函數(shù)ofprotoeventrun函數(shù)在運行時,對事件列表進行遍歷,檢查每一個事件的計數(shù)器是否到達極限值或者定時器是否超時。對于計數(shù)器到達極限值或定時器超時的事件,ofproto_eventrun將對該事件調(diào)

溫馨提示

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

評論

0/150

提交評論