本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種流表信息的恢復(fù)方法及裝置。
背景技術(shù):
在Openflow交換機(jī)中,驅(qū)動(dòng)芯片內(nèi)會(huì)存儲(chǔ)有流表信息,按照流表信息對(duì)流量進(jìn)行轉(zhuǎn)發(fā)。各流表信息的添加/刪除由Openflow交換機(jī)連接的Openflow控制器控制。
當(dāng)Openflow交換機(jī)重啟時(shí),Openflow交換機(jī)的驅(qū)動(dòng)芯片中的流表信息被清空。此時(shí),若要恢復(fù)Openflow交換機(jī)中的流表信息,該Openflow交換機(jī)需要先與Openflow控制器建立連接,再由Openflow控制器重新計(jì)算、下發(fā)給Openflow交換機(jī)需要的流表信息,進(jìn)而指導(dǎo)業(yè)務(wù)流量的轉(zhuǎn)發(fā)。這使得Openflow交換機(jī)重啟時(shí)恢復(fù)業(yè)務(wù)的耗時(shí)較長(zhǎng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例公開了一種流表信息的恢復(fù)方法及裝置,以減少Openflow交換機(jī)重啟時(shí)恢復(fù)業(yè)務(wù)的耗時(shí)。
為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種流表信息的恢復(fù)方法,應(yīng)用于Openflow交換機(jī),所述方法包括:
接收并解析流表調(diào)整消息;所述流表調(diào)整消息包括流表信息;
將所述流表信息更新至所述Openflow交換機(jī)的非易失性存儲(chǔ)器;
當(dāng)所述Openflow交換機(jī)重啟時(shí),從所述非易失性存儲(chǔ)器中獲取所述流表信息,并將所述流表信息下發(fā)至所述Openflow交換機(jī)的驅(qū)動(dòng)芯片。
為達(dá)到上述目的,本發(fā)明實(shí)施例還公開了一種流表信息的恢復(fù)裝置,應(yīng)用于Openflow交換機(jī),所述裝置包括:
接收單元,用于接收并解析流表調(diào)整消息;所述流表調(diào)整消息包括流表信息;
更新單元,用于將所述流表信息更新至所述Openflow交換機(jī)的非易失性存儲(chǔ)器;
下發(fā)單元,用于當(dāng)所述Openflow交換機(jī)重啟時(shí),從所述非易失性存儲(chǔ)器中獲取所述流表信息,并將所述流表信息下發(fā)至所述Openflow交換機(jī)的驅(qū)動(dòng)芯片。
本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)方法及裝置,Openflow交換機(jī)接收并解析攜帶有流表信息的流表調(diào)整消息,將解析獲得的流表信息更新至非易失性存儲(chǔ)器,由非易失性存儲(chǔ)器對(duì)流表信息進(jìn)行備份。在Openflow交換機(jī)重啟時(shí),Openflow交換機(jī)可以從非易失性存儲(chǔ)器中獲取到該流表信息,并將該流表信息下發(fā)至Openflow交換機(jī)的驅(qū)動(dòng)芯片??梢?jiàn),本發(fā)明實(shí)施例中,在Openflow交換機(jī)重啟時(shí),不必從先與Openflow控制器建立連接,再由Openflow控制器重新計(jì)算、下發(fā)給Openflow交換機(jī)需要的所有流表信息,減少了Openflow交換機(jī)重啟時(shí)恢復(fù)業(yè)務(wù)的耗時(shí)。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的一種Openflow交換機(jī)的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
下面通過(guò)具體實(shí)施例,對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
參考圖1,圖1為本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)方法的流程示意圖,該方法包括:
S101:接收并解析流表調(diào)整消息;所述流表調(diào)整消息包括流表信息;
Openflow交換機(jī)的結(jié)構(gòu)可以參考圖2,Openflow交換機(jī)可以包括:處理器100、驅(qū)動(dòng)芯片200和非易失性存儲(chǔ)器300;此時(shí),流表信息的恢復(fù)方法可以為:處理器100接收并解析攜帶流表信息的流表調(diào)整消息,將該流表信息更新至驅(qū)動(dòng)芯片200中,并將該流表信息更新至非易失性存儲(chǔ)器300中;當(dāng)該Openflow交換機(jī)重啟時(shí),處理器100從非易失性存儲(chǔ)器300中獲取流表信息,并將流表信息下發(fā)至驅(qū)動(dòng)芯片200。
Openflow交換機(jī)與Openflow控制器建立連接后,Openflow控制器向該Openflow交換機(jī)下發(fā)查詢消息(例如Multipart request消息);Openflow交換機(jī)根據(jù)該查詢消息,主動(dòng)查詢本地當(dāng)前存儲(chǔ)的所有流表信息,并通過(guò)Multipart reply消息將當(dāng)前的所有流表信息發(fā)送給Openflow控制器;Openflow控制器根據(jù)接收到的當(dāng)前流表信息,確定需要向Openflow交換機(jī)下發(fā)的流表信息,也就是,確定Openflow交換機(jī)未加載的流表信息,將需要下發(fā)的流表信息攜帶在流表調(diào)整消息(例如Flow mod消息)中發(fā)送給Openflow交換機(jī);此時(shí),Openflow交換機(jī)可以解析流表調(diào)整消息獲得需要的流表信息。
S102:將所述流表信息更新至所述Openflow交換機(jī)的非易失性存儲(chǔ)器;
其中,非易失性存儲(chǔ)器中備份有Openflow交換機(jī)重啟前的流表信息。該非易失性存儲(chǔ)器可以為Flash存儲(chǔ)器,F(xiàn)lash存儲(chǔ)器在沒(méi)有電流供應(yīng)的條件下也能夠長(zhǎng)久地保持?jǐn)?shù)據(jù),這樣Openflow交換機(jī)重啟時(shí),可以確保Flash存儲(chǔ)器中存儲(chǔ)的信息不會(huì)丟失。
Openflow交換機(jī)接收到Flow mod消息后,根據(jù)Flow mod消息,將Flow mod消息中的流表信息更新至該Openflow交換機(jī)的驅(qū)動(dòng)芯片中,并將Flow mod消息中的流表信息更新至該Openflow交換機(jī)的非易失性存儲(chǔ)器中。
在本發(fā)明的一個(gè)實(shí)施例中,Openflow交換機(jī)可以將所有流表信息都存儲(chǔ)到非易失性存儲(chǔ)器,這樣在Openflow交換機(jī)恢復(fù)流表信息時(shí),相對(duì)重新從Openflow控制器獲取流表信息,也能提高恢復(fù)速度。
但并不是所有的流表信息都是關(guān)鍵流表信息,無(wú)需在Openflow交換機(jī)重啟時(shí)立刻恢復(fù),該關(guān)鍵流表信息指對(duì)于業(yè)務(wù)中斷的時(shí)間比較敏感的業(yè)務(wù)所對(duì)應(yīng)的流表信息,例如,在應(yīng)用將流量引導(dǎo)至防火墻設(shè)備的流表信息則可以認(rèn)為是關(guān)鍵流表信息。若將所有流表信息存儲(chǔ)至非易失性存儲(chǔ)器中,將占用非易失性存儲(chǔ)器的大量存儲(chǔ)空間,并且降低了恢復(fù)關(guān)鍵流表信息的速度。為了節(jié)省非易失性存儲(chǔ)器的存儲(chǔ)空間,并提高恢復(fù)關(guān)鍵流表信息的速度,Openflow交換機(jī)接收并解析流表調(diào)整消息之后,可以先判斷流表信息中的老化時(shí)間或流表信息中的辨識(shí)值(例如Cookie值)是否為預(yù)設(shè)的關(guān)鍵流表值;如果是,判定該流表信息為關(guān)鍵流表信息,將該流表信息更新至該Openflow交換機(jī)的驅(qū)動(dòng)芯片中,并將該流表信息更新至該Openflow交換機(jī)的非易失性存儲(chǔ)器中;如果不是,僅將流表信息更新至該Openflow交換機(jī)的驅(qū)動(dòng)芯片中,而不該流表信息更新至該Openflow交換機(jī)的非易失性存儲(chǔ)器中。
具體的,若流表信息中的老化時(shí)間的屬性值為“0”,表示該流表信息為不需要老化的流表信息,可以認(rèn)為該流表信息為關(guān)鍵流表信息;或者,若流表信息中的Cookie值為“1”,則可以認(rèn)為該流表信息為關(guān)鍵流表信息。
上述關(guān)鍵流表信息可以根據(jù)用戶的需要確定。如管理用戶或訪問(wèn)級(jí)別較高的用戶等對(duì)流量轉(zhuǎn)發(fā)的中斷時(shí)間要求較高,希望中斷時(shí)間越短越好,那么可以將來(lái)自如管理用戶或訪問(wèn)級(jí)別較高的用戶的流量對(duì)應(yīng)的流表信息確定為關(guān)鍵流表信息;再如為了網(wǎng)絡(luò)安全,流量都需要轉(zhuǎn)發(fā)到防火墻后,再轉(zhuǎn)發(fā)出去,那么可以將控制流量轉(zhuǎn)發(fā)到防火墻的流表信息確定為關(guān)鍵流表信息。
在本發(fā)明的一個(gè)實(shí)施例中,流表調(diào)整消息可以分為:流表添加消息、流表刪除消息和流表修改消息:這種情況下,上述S102可以包括:
當(dāng)流表調(diào)整消息為流表添加消息時(shí),Openflow交換機(jī)在驅(qū)動(dòng)芯片中建立流表信息,也就是,將Flow mod消息中包括的流表信息添加至驅(qū)動(dòng)芯片中;另外,將Flow mod消息中包括的流表信息添加至該Openflow交換機(jī)的非易失性存儲(chǔ)器;
當(dāng)流表調(diào)整消息為流表刪除消息時(shí),為了保證驅(qū)動(dòng)芯片和非易失性存儲(chǔ)器中的流表信息的同步,刪除Openflow交換機(jī)的驅(qū)動(dòng)芯片中Flow mod消息對(duì)應(yīng)的流表信息,并刪除該Openflow交換機(jī)的非易失性存儲(chǔ)器中Flow mod消息對(duì)應(yīng)的流表信息;
當(dāng)流表調(diào)整消息為流表修改消息時(shí),為了保證驅(qū)動(dòng)芯片和非易失性存儲(chǔ)器中的流表信息的同步,修改Openflow交換機(jī)的驅(qū)動(dòng)芯片中Flow mod消息對(duì)應(yīng)的流表信息,并修改該Openflow交換機(jī)的非易失性存儲(chǔ)器中Flow mod消息對(duì)應(yīng)的流表信息。
S103:當(dāng)所述Openflow交換機(jī)重啟時(shí),從所述非易失性存儲(chǔ)器中獲取所述流表信息,并將所述流表信息下發(fā)至所述Openflow交換機(jī)的驅(qū)動(dòng)芯片。
在本發(fā)明的一個(gè)實(shí)施例中,流表信息可以包括流表項(xiàng)和與該流表項(xiàng)對(duì)應(yīng)的輔助流表項(xiàng)。Openflow交換機(jī)連接的Openflow控制器除了需要向該Openflow交換機(jī)下發(fā)流表項(xiàng),還會(huì)向該Openflow交換機(jī)下發(fā)流表項(xiàng)的輔助流表項(xiàng),輔助流表項(xiàng)與流表項(xiàng)是相互關(guān)聯(lián)的。這里輔助流表項(xiàng)可以包括:限速表項(xiàng)(例如Meter表項(xiàng))和轉(zhuǎn)發(fā)表項(xiàng)(例如Group表項(xiàng))等。Openflow交換機(jī)根據(jù)流表項(xiàng)處理報(bào)文時(shí),可以根據(jù)Meter表項(xiàng)、Group表項(xiàng)等輔助流表項(xiàng)對(duì)報(bào)文進(jìn)行進(jìn)一步的處理。
這種情況下,為了在根據(jù)非易失性存儲(chǔ)器中存儲(chǔ)的流表信息恢復(fù)驅(qū)動(dòng)芯片中的流表信息后,能夠根據(jù)恢復(fù)的流表信息正常處理報(bào)文,Openflow交換機(jī)在接收Openflow控制器發(fā)送的輔助流表項(xiàng)后,若接收到的輔助流表項(xiàng)對(duì)應(yīng)的流表項(xiàng)添加到了非易失性存儲(chǔ)器中,則將該輔助流表項(xiàng)也添加至非易失性存儲(chǔ)器中。此時(shí),在Openflow交換機(jī)重啟時(shí),Openflow交換機(jī)可以從非易失性存儲(chǔ)器中獲取流表項(xiàng)和輔助流表項(xiàng);再將獲取的流表項(xiàng)和輔助流表項(xiàng)下發(fā)至該Openflow交換機(jī)的驅(qū)動(dòng)芯片。
需要說(shuō)明的是,為了保證流表項(xiàng)下發(fā)到Openflow交換機(jī)的驅(qū)動(dòng)芯片后,能夠立即使用,Openflow控制器可以在下發(fā)流表項(xiàng)前下發(fā)該流表項(xiàng)需要調(diào)用的輔助流表項(xiàng)。同理,為了保證流表項(xiàng)下發(fā)到Openflow交換機(jī)的驅(qū)動(dòng)芯片后,能夠立即使用,Openflow交換機(jī)重啟后,Openflow交換機(jī)可以先將輔助流表項(xiàng)等從非易失性存儲(chǔ)器中下發(fā)至Openflow交換機(jī)的驅(qū)動(dòng)芯片,再將流表項(xiàng)從非易失性存儲(chǔ)器中下發(fā)至Openflow交換機(jī)的驅(qū)動(dòng)芯片。
另外,刪除流表項(xiàng)時(shí),若刪除的流表項(xiàng)對(duì)應(yīng)有限速表項(xiàng)和轉(zhuǎn)發(fā)表項(xiàng)等輔助流表項(xiàng),同時(shí)刪除非易失性存儲(chǔ)器中對(duì)應(yīng)的限速表項(xiàng)和轉(zhuǎn)發(fā)表項(xiàng)等輔助流表項(xiàng);修改流表項(xiàng)時(shí),若修改的流表項(xiàng)對(duì)應(yīng)有限速表項(xiàng)和轉(zhuǎn)發(fā)表項(xiàng)等輔助流表項(xiàng)發(fā)生了變化,同時(shí)修改非易失性存儲(chǔ)器中的限速表項(xiàng)和轉(zhuǎn)發(fā)表項(xiàng)等輔助流表項(xiàng)。
在本發(fā)明的一個(gè)實(shí)施例中,流表項(xiàng)和輔助流表項(xiàng)等流表信息以文本的形式存儲(chǔ)在非易失性存儲(chǔ)器中,為了提高非易失性存儲(chǔ)器中文本文件的安全性,可以將非易失性存儲(chǔ)器中的流表信息的讀寫屬性設(shè)置為僅允許主進(jìn)程讀寫的標(biāo)識(shí),例如,將流表信息的讀寫屬性設(shè)置“700”,這樣就只有主進(jìn)程可以讀寫非易失性存儲(chǔ)器中的流表信息;另外,也可以將非易失性存儲(chǔ)器中的流表信息設(shè)置為隱藏,如:將流表信息文本文件的名稱設(shè)置為“.”開頭,就可以實(shí)現(xiàn)文件的默認(rèn)隱藏功能了。
在本發(fā)明的一個(gè)實(shí)施例中,為了避免Openflow交換機(jī)在未將非易失性存儲(chǔ)器中的信息全部加載至驅(qū)動(dòng)芯片的情況下,與Openflow控制器連接,獲取流表信息,進(jìn)而影響業(yè)務(wù)的恢復(fù),Openflow交換機(jī)在重啟后進(jìn)入安全模式,再?gòu)姆且资源鎯?chǔ)器中獲取流表信息;這里,安全模式的工作原理是:在不加載第三方設(shè)備(例如Openflow控制器)驅(qū)動(dòng)程序的情況下啟動(dòng)Openflow交換機(jī),使Openflow交換機(jī)運(yùn)行在系統(tǒng)最小模式,這樣用戶就可以方便地檢測(cè)與修復(fù)Openflow交換機(jī)的錯(cuò)誤;
當(dāng)加載完成后,Openflow交換機(jī)與Openflow控制器連接后,退出安全模式,進(jìn)而接收Openflow控制器發(fā)送的查詢消息;根據(jù)該查詢消息,將當(dāng)前所有流表信息發(fā)送至Openflow控制器,Openflow控制器根據(jù)Openflow交換機(jī)的當(dāng)前所有流表信息,確定Openflow交換機(jī)未加載的流表信息,并將Openflow交換機(jī)未加載的流表信息發(fā)送給該Openflow交換機(jī)。
需要說(shuō)明的是,該流表信息的恢復(fù)方法還可以應(yīng)用于其他由Openflow控制器控制下發(fā)流表信息的網(wǎng)絡(luò)設(shè)備,本發(fā)明實(shí)施例對(duì)此不進(jìn)行限定。另外,上述Openflow交換機(jī)執(zhí)行的操作可以理解為是該Openflow交換機(jī)的處理器執(zhí)行。
本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)方法,Openflow交換機(jī)接收并解析攜帶有流表信息的流表調(diào)整消息,將解析獲得的流表信息更新至非易失性存儲(chǔ)器,由非易失性存儲(chǔ)器對(duì)流表信息進(jìn)行備份。在Openflow交換機(jī)重啟時(shí),Openflow交換機(jī)可以從非易失性存儲(chǔ)器中獲取到該流表信息,并將該流表信息下發(fā)至Openflow交換機(jī)的驅(qū)動(dòng)芯片。可見(jiàn),本發(fā)明實(shí)施例中,在Openflow交換機(jī)重啟時(shí),不必從先與Openflow控制器建立連接,再由Openflow控制器重新計(jì)算、下發(fā)給Openflow交換機(jī)需要的所有流表信息,減少了Openflow交換機(jī)重啟時(shí)恢復(fù)業(yè)務(wù)的耗時(shí)。
參考圖3,圖3為本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)裝置的結(jié)構(gòu)示意圖,應(yīng)用于Openflow交換機(jī),該裝置包括:
接收單元301,用于接收并解析流表調(diào)整消息;所述流表調(diào)整消息包括流表信息;
更新單元302,用于將所述流表信息更新至所述Openflow交換機(jī)的非易失性存儲(chǔ)器;
下發(fā)單元303,用于當(dāng)所述Openflow交換機(jī)重啟時(shí),從所述非易失性存儲(chǔ)器中獲取所述流表信息,并將所述流表信息下發(fā)至所述Openflow交換機(jī)的驅(qū)動(dòng)芯片。
在本發(fā)明的一個(gè)實(shí)施例中,所述更新單元302,具體可以用于:
判斷所述流表信息中的老化時(shí)間或所述流表信息中的辨識(shí)Cookie值是否為預(yù)設(shè)的關(guān)鍵流表值;
如果是,將所述流表信息更新至所述非易失性存儲(chǔ)器。
在本發(fā)明的一個(gè)實(shí)施例中,所述更新單元302,具體可以用于:
當(dāng)所述流表調(diào)整消息為流表添加消息時(shí),將所述流表信息添加至所述非易失性存儲(chǔ)器;
當(dāng)所述流表調(diào)整消息為流表刪除消息時(shí),刪除所述非易失性存儲(chǔ)器中的所述流表信息;
當(dāng)所述流表調(diào)整消息為流表修改消息時(shí),修改所述非易失性存儲(chǔ)器中的所述流表信息。
在本發(fā)明的一個(gè)實(shí)施例中,所述流表信息包括流表項(xiàng)和與該流表項(xiàng)對(duì)應(yīng)的輔助流表項(xiàng)。
在本發(fā)明的一個(gè)實(shí)施例中,上述流表信息的恢復(fù)裝置還可以包括:
建立單元(圖3中未示出),用于在將所獲取的流表信息下發(fā)至所述Openflow交換機(jī)的驅(qū)動(dòng)芯片之后,與Openflow控制器建立連接,接收所述Openflow控制器發(fā)送的查詢消息;
發(fā)送單元(圖3中未示出),用于根據(jù)所述查詢消息,將當(dāng)前所有流表信息發(fā)送至所述Openflow控制器,以使所述Openflow控制器將所述Openflow交換機(jī)未加載的流表信息發(fā)送給所述Openflow交換機(jī)。
本發(fā)明實(shí)施例提供的一種流表信息的恢復(fù)裝置,Openflow交換機(jī)接收并解析攜帶有流表信息的流表調(diào)整消息,將解析獲得的流表信息更新至非易失性存儲(chǔ)器,由非易失性存儲(chǔ)器對(duì)流表信息進(jìn)行備份。在Openflow交換機(jī)重啟時(shí),Openflow交換機(jī)可以從非易失性存儲(chǔ)器中獲取到該流表信息,并將該流表信息下發(fā)至Openflow交換機(jī)的驅(qū)動(dòng)芯片??梢?jiàn),本發(fā)明實(shí)施例中,在Openflow交換機(jī)重啟時(shí),不必從先與Openflow控制器建立連接,再由Openflow控制器重新計(jì)算、下發(fā)給Openflow交換機(jī)需要的所有流表信息,減少了Openflow交換機(jī)重啟時(shí)恢復(fù)業(yè)務(wù)的耗時(shí)。
對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施方式中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,這里所稱得的存儲(chǔ)介質(zhì),如:ROM/RAM、磁碟、光盤等。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。