本申請涉及通信技術(shù)領(lǐng)域,尤其涉及一種算法拓?fù)渖煞椒ê脱b置。
背景技術(shù):
sdn(softwaredefinednetwork,軟件定義網(wǎng)絡(luò))是一種新型網(wǎng)絡(luò)創(chuàng)新架構(gòu),是網(wǎng)絡(luò)虛擬化的一種實(shí)現(xiàn)方式,通過將設(shè)備的控制面與數(shù)據(jù)面分離,從而實(shí)現(xiàn)網(wǎng)絡(luò)流量的靈活控制。如圖1所示,為sdn縱向網(wǎng)絡(luò)示意圖,設(shè)備a為第一級路由器,設(shè)備b和設(shè)備c為第二級路由器,設(shè)備d、設(shè)備e、設(shè)備f、設(shè)備g為第三級路由器,設(shè)備b是一個(gè)堆疊設(shè)備,由子設(shè)備b1和子設(shè)備b2組成。
為了實(shí)現(xiàn)報(bào)文傳輸路徑的控制,sdn控制器需要生成網(wǎng)絡(luò)拓?fù)洌⒒诰W(wǎng)絡(luò)拓?fù)溥x擇傳輸路徑。如圖2所示,為針對圖1的網(wǎng)絡(luò)拓?fù)涫疽鈭D。在生成網(wǎng)絡(luò)拓?fù)涞倪^程中,針對由子設(shè)備b1和子設(shè)備b2組成的堆疊設(shè)備(即設(shè)備b),是以一個(gè)設(shè)備b的形式存在于網(wǎng)絡(luò)拓?fù)渲小?/p>
基于圖2的網(wǎng)絡(luò)拓?fù)?,假設(shè)報(bào)文需要從設(shè)備a傳輸?shù)皆O(shè)備e,則傳輸路徑為:設(shè)備a-接口a11或者接口a12(以接口a11為例)-設(shè)備b-接口b14-設(shè)備e。基于這樣的傳輸路徑,設(shè)備a在接收到報(bào)文后,通過接口a11發(fā)送報(bào)文;設(shè)備b在接收到報(bào)文后,通過接口b14發(fā)送報(bào)文,繼而將報(bào)文發(fā)送給設(shè)備e。
由于設(shè)備b由子設(shè)備b1和子設(shè)備b2組成,因此設(shè)備a通過接口a11發(fā)送報(bào)文時(shí),是子設(shè)備b1通過接口b11接收到報(bào)文,且子設(shè)備b1還需要通過堆疊口將報(bào)文發(fā)送給子設(shè)備b2,由子設(shè)備b2通過接口b14發(fā)送報(bào)文。
顯然,上述方式需要在子設(shè)備b1和子設(shè)備b2之間傳輸報(bào)文,從而占用堆疊口(子設(shè)備b1與子設(shè)備b2之間的接口)的帶寬資源,影響設(shè)備的轉(zhuǎn)發(fā)性能。
技術(shù)實(shí)現(xiàn)要素:
本申請?zhí)峁┮环N算法拓?fù)渖煞椒?,?yīng)用于控制器,所述方法包括:
獲取設(shè)備的管理信息庫mib屬性;
若根據(jù)所述mib屬性確定所述設(shè)備為堆疊設(shè)備,為所述設(shè)備創(chuàng)建子設(shè)備;
為所述子設(shè)備創(chuàng)建堆疊口,并為所述堆疊口創(chuàng)建堆疊鏈路;
生成包括所述子設(shè)備、所述堆疊口和所述堆疊鏈路的算法拓?fù)洹?/p>
本申請?zhí)峁┮环N算法拓?fù)渖裳b置,應(yīng)用于控制器,所述裝置包括:
獲取模塊,用于獲取設(shè)備的管理信息庫mib屬性;
創(chuàng)建模塊,用于當(dāng)根據(jù)所述mib屬性確定所述設(shè)備為堆疊設(shè)備時(shí),為所述設(shè)備創(chuàng)建子設(shè)備,并為所述子設(shè)備創(chuàng)建堆疊口,為所述堆疊口創(chuàng)建堆疊鏈路;
生成模塊,用于生成包括所述子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)洹?/p>
基于上述技術(shù)方案,本申請實(shí)施例中,控制器可以自動識別出堆疊設(shè)備,并為堆疊設(shè)備創(chuàng)建子設(shè)備,為子設(shè)備創(chuàng)建堆疊口,為堆疊口創(chuàng)建堆疊鏈路,并生成包括子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)?。這樣,在基于算法拓?fù)溥x擇傳輸路徑時(shí),由于算法拓?fù)浒询B鏈路,因此可以盡量避免將堆疊鏈路選擇為傳輸路徑,從而避免占用堆疊鏈路的帶寬資源,提高堆疊設(shè)備的轉(zhuǎn)發(fā)性能。
附圖說明
為了更加清楚地說明本申請實(shí)施例或者現(xiàn)有技術(shù)中的技術(shù)方案,下面將對本申請實(shí)施例或者現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,還可以根據(jù)本申請實(shí)施例的這些附圖獲得其他的附圖。
圖1是sdn的縱向網(wǎng)絡(luò)的示意圖;
圖2是針對圖1的網(wǎng)絡(luò)拓?fù)涫疽鈭D;
圖3是本申請一種實(shí)施方式中的算法拓?fù)渖煞椒ǖ牧鞒虉D;
圖4a和圖4b是本申請一種實(shí)施方式中的mib屬性的示例;
圖5a和圖5b是本申請一種實(shí)施方式中的堆疊設(shè)備的組成示意圖;
圖6是本申請一種實(shí)施方式中的算法拓?fù)涫疽鈭D;
圖7是本申請一種實(shí)施方式中的算法拓?fù)渖裳b置的結(jié)構(gòu)圖;
圖8是本申請一種實(shí)施方式中的控制器的硬件結(jié)構(gòu)圖。
具體實(shí)施方式
在本申請使用的術(shù)語僅僅是出于描述特定實(shí)施例的目的,而非限制本申請。本申請和權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其它含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,此外,所使用的詞語“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
本申請實(shí)施例中提出了一種算法拓?fù)渖煞椒?,該方法可以?yīng)用于控制器,如sdn控制器,其中,控制器可以基于該算法拓?fù)溥x擇報(bào)文的傳輸路徑。
在傳統(tǒng)方式中,控制器只維護(hù)一個(gè)拓?fù)浣Y(jié)構(gòu),將其稱為網(wǎng)絡(luò)拓?fù)洌刂破骰诰W(wǎng)絡(luò)拓?fù)溥x擇報(bào)文的傳輸路徑,并向用戶顯示網(wǎng)絡(luò)拓?fù)?,如圖2所示。
本申請實(shí)施例中,控制器可以維護(hù)兩個(gè)拓?fù)浣Y(jié)構(gòu),一個(gè)拓?fù)浣Y(jié)構(gòu)為網(wǎng)絡(luò)拓?fù)?,另一個(gè)拓?fù)浣Y(jié)構(gòu)為算法拓?fù)洹?刂破骺梢韵蛴脩麸@示網(wǎng)絡(luò)拓?fù)洌铱刂破骺梢曰谒惴ㄍ負(fù)溥x擇報(bào)文的傳輸路徑。其中,網(wǎng)絡(luò)拓?fù)渑c算法拓?fù)涞膮^(qū)別在于:針對由至少兩個(gè)子設(shè)備組成的堆疊設(shè)備,在網(wǎng)絡(luò)拓?fù)渲?,不會存在這至少兩個(gè)子設(shè)備,而是以一個(gè)堆疊設(shè)備的形式存在,即網(wǎng)絡(luò)拓?fù)渲写嬖诘木褪且粋€(gè)堆疊設(shè)備;在算法拓?fù)渲?,會存在這至少兩個(gè)子設(shè)備,而不是以一個(gè)堆疊設(shè)備的形式存在,即算法拓?fù)渲写嬖诘氖亲釉O(shè)備,而不是由子設(shè)備組成的堆疊設(shè)備。
針對網(wǎng)絡(luò)拓?fù)涞纳煞绞?,與傳統(tǒng)方式類似,如針對圖1,其網(wǎng)絡(luò)拓?fù)淇梢匀鐖D2所示,在此不再贅述,以下對算法拓?fù)涞纳蛇^程進(jìn)行詳細(xì)說明。
參見圖3所示,為該算法拓?fù)渖煞椒ǖ牧鞒虉D,該方法可以包括:
步驟301,獲取設(shè)備的mib(managementinformationbase,管理信息庫)屬性,該設(shè)備可以為路由器、交換機(jī)等網(wǎng)絡(luò)設(shè)備,后續(xù)將其簡稱為設(shè)備。
在一個(gè)例子中,控制器可以向設(shè)備發(fā)送用于請求mib屬性的請求消息;設(shè)備在接收到該請求消息之后,可以從本地獲取到本設(shè)備的mib屬性,并將攜帶該mib屬性的響應(yīng)消息返回給控制器;控制器在接收到該響應(yīng)消息之后,可以從該響應(yīng)消息中解析出設(shè)備的mib屬性。其中,該請求消息可以為snmp(simplenetworkmanagementprotocol,簡單網(wǎng)絡(luò)管理協(xié)議)請求消息,該響應(yīng)消息可以為snmp響應(yīng)消息;或者,該請求消息可以為netconf(networkconfigurationprotocol,網(wǎng)絡(luò)配置協(xié)議)請求消息,該響應(yīng)消息可以為netconf響應(yīng)消息。
其中,控制器向設(shè)備發(fā)送的請求消息中可以攜帶oid(objectidentifier,對象標(biāo)識符),且oid為指定數(shù)值(如1.3.6.1.2.1.47.1.1.1.1.5),當(dāng)oid為指定數(shù)值時(shí),就表示當(dāng)前的請求消息用于請求mib屬性。設(shè)備在接收到oid為指定數(shù)值的請求消息之后,就可以向控制器返回?cái)y帶mib屬性的響應(yīng)消息。
其中,mib屬性可以包括但不限于堆疊屬性(stack)、框?qū)傩?chassis)和接口屬性(port),當(dāng)然,mib屬性也可以包括其它屬性,如插槽屬性、電源屬性、風(fēng)扇屬性等,對此mib屬性的內(nèi)容不做限制,后續(xù)以包括堆疊屬性、框?qū)傩院徒涌趯傩詾槔M(jìn)行說明。例如,若設(shè)備是堆疊設(shè)備,則mib屬性的一個(gè)示例可以如圖4a所示:stack為堆疊屬性,表示設(shè)備是堆疊設(shè)備;chassis為框?qū)傩?,表示堆疊設(shè)備由兩個(gè)機(jī)框(chassis0和chassis1)組成,每個(gè)機(jī)框是組成堆疊設(shè)備的一個(gè)子設(shè)備;port為接口屬性,表示接口屬于哪個(gè)子設(shè)備,例如,接口1和接口2屬于子設(shè)備chassis0,接口3和接口4屬于子設(shè)備chassis1。又例如,若設(shè)備不是堆疊設(shè)備,則mib屬性的一個(gè)示例可以如圖4b所示:由于未攜帶stack,因此表示設(shè)備不是堆疊設(shè)備;chassis為框?qū)傩?,表示設(shè)備只包括一個(gè)機(jī)框(chassis0);port為接口屬性,表示接口1和接口2屬于機(jī)框(chassis0)。
步驟302,若根據(jù)mib屬性確定設(shè)備為堆疊設(shè)備,則為該設(shè)備創(chuàng)建子設(shè)備。
參見圖4a和圖4b所示,控制器可以根據(jù)mib屬性(如堆疊屬性)確定出設(shè)備是否為堆疊設(shè)備。如果不是堆疊設(shè)備,則采用傳統(tǒng)流程處理,對此不再贅述。如果是堆疊設(shè)備,則為該設(shè)備創(chuàng)建子設(shè)備;具體的,控制器可以根據(jù)mib屬性(如框?qū)傩?確定出組成該設(shè)備的子設(shè)備的數(shù)量,并為該設(shè)備創(chuàng)建相應(yīng)數(shù)量的子設(shè)備。例如,當(dāng)框?qū)傩詾閏hassis0和chassis1時(shí),就表示堆疊設(shè)備由兩個(gè)子設(shè)備組成,即組成該設(shè)備的子設(shè)備數(shù)量為2,可以為該設(shè)備創(chuàng)建2個(gè)子設(shè)備。
步驟303,為子設(shè)備創(chuàng)建堆疊口,并為該堆疊口創(chuàng)建堆疊鏈路。
針對“為子設(shè)備創(chuàng)建堆疊口,并為該堆疊口創(chuàng)建堆疊鏈路”的過程,可以為每個(gè)子設(shè)備創(chuàng)建一個(gè)堆疊口,并在任意兩個(gè)堆疊口之間創(chuàng)建堆疊鏈路?;蛘?,可以為任意兩個(gè)子設(shè)備創(chuàng)建具有關(guān)聯(lián)關(guān)系的堆疊口,并在具有關(guān)聯(lián)關(guān)系的堆疊口之間創(chuàng)建堆疊鏈路。
例如,假設(shè)設(shè)備a為堆疊設(shè)備,為該設(shè)備a創(chuàng)建有子設(shè)備a1、子設(shè)備a2和子設(shè)備a3,針對第一種實(shí)現(xiàn)方式,可以參見圖5a所示,可以為子設(shè)備a1創(chuàng)建堆疊口a11,為子設(shè)備a2創(chuàng)建堆疊口a21,為子設(shè)備a3創(chuàng)建堆疊口a31,并在堆疊口a11和堆疊口a21之間創(chuàng)建堆疊鏈路1,在堆疊口a11和堆疊口a31之間創(chuàng)建堆疊鏈路2,在堆疊口a21和堆疊口a31之間創(chuàng)建堆疊鏈路3。
針對第二種實(shí)現(xiàn)方式,可以參見圖5b所示,可以為子設(shè)備a1和子設(shè)備a2創(chuàng)建具有關(guān)聯(lián)關(guān)系的堆疊口a11和堆疊口a21,堆疊口a11位于子設(shè)備a1,堆疊口a21位于子設(shè)備a2,然后在堆疊口a11和堆疊口a21之間創(chuàng)建堆疊鏈路1。此外,可以為子設(shè)備a1和子設(shè)備a3創(chuàng)建具有關(guān)聯(lián)關(guān)系的堆疊口a12和堆疊口a31,堆疊口a12位于子設(shè)備a1,堆疊口a31位于子設(shè)備a3,然后在堆疊口a12和堆疊口a31之間創(chuàng)建堆疊鏈路2。此外,可以為子設(shè)備a2和子設(shè)備a3創(chuàng)建具有關(guān)聯(lián)關(guān)系的堆疊口a22和堆疊口a32,堆疊口a22位于子設(shè)備a2,堆疊口a32位于子設(shè)備a3,然后在堆疊口a22和堆疊口a32之間創(chuàng)建堆疊鏈路3。
在一個(gè)例子中,在為堆疊口創(chuàng)建堆疊鏈路之后,控制器還可以為該堆疊鏈路設(shè)置鏈路屬性,該鏈路屬性可以包括但不限于:開銷屬性(cost)和/或帶寬屬性。該開銷屬性可以為大于預(yù)設(shè)第一閾值(根據(jù)經(jīng)驗(yàn)配置)的開銷值,該帶寬屬性可以為小于預(yù)設(shè)第二閾值(根據(jù)經(jīng)驗(yàn)配置)的帶寬值。其中,通過為堆疊鏈路設(shè)置合理的鏈路屬性,可以使該堆疊鏈路盡量不被選擇為報(bào)文傳輸路徑。
進(jìn)一步的,在利用算法拓?fù)溥x擇報(bào)文傳輸路徑時(shí),控制器通常會參考各路徑的開銷屬性和帶寬屬性,即控制器優(yōu)先選擇開銷值小、且?guī)捴荡蟮穆窂阶鳛閳?bào)文傳輸路徑?;诖?,通過設(shè)置堆疊鏈路的開銷屬性為大于預(yù)設(shè)第一閾值(如其它所有鏈路的最大開銷值)的開銷值,使得該堆疊鏈路的開銷值大于其它所有鏈路的開銷值,這樣,就可以使該堆疊鏈路盡量不被選擇為報(bào)文傳輸路徑。同理,通過設(shè)置堆疊鏈路的帶寬屬性為小于預(yù)設(shè)第二閾值(如其它所有鏈路的最小帶寬值)的帶寬值,使得該堆疊鏈路的帶寬值小于其它所有鏈路的帶寬值,這樣,就可以使該堆疊鏈路盡量不被選擇為報(bào)文傳輸路徑。
步驟304,生成包括子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)洹?/p>
在一個(gè)例子中,針對堆疊設(shè)備,在算法拓?fù)渲锌梢园ㄗ釉O(shè)備、堆疊口和堆疊鏈路等信息,基于這樣的算法拓?fù)?,由于堆疊鏈路的鏈路屬性用于使該堆疊鏈路盡量不被選擇為報(bào)文傳輸路徑,因此,可以盡量避免將堆疊鏈路選擇為傳輸路徑,從而避免占用堆疊鏈路的帶寬資源,提高堆疊設(shè)備的轉(zhuǎn)發(fā)性能。
在一個(gè)例子中,控制器在生成包括子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)渲?,?dāng)組成設(shè)備的子設(shè)備增加時(shí),控制器還可以創(chuàng)建新的子設(shè)備,為該新的子設(shè)備創(chuàng)建堆疊口以及該堆疊口對應(yīng)的堆疊鏈路,并在該算法拓?fù)渲袨樵撛O(shè)備添加該新的子設(shè)備、該新的子設(shè)備的堆疊口以及堆疊鏈路;和/或,當(dāng)組成設(shè)備的子設(shè)備減少時(shí),控制器還可以確定已離開的子設(shè)備,并從該算法拓?fù)渲袆h除所述已離開的子設(shè)備、以及所述已離開的子設(shè)備的堆疊口和堆疊鏈路。
基于上述技術(shù)方案,本申請實(shí)施例中,控制器可以自動識別出堆疊設(shè)備,并為堆疊設(shè)備創(chuàng)建子設(shè)備,為子設(shè)備創(chuàng)建堆疊口,為堆疊口創(chuàng)建堆疊鏈路,并生成包括子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)?。這樣,在基于算法拓?fù)溥x擇傳輸路徑時(shí),由于算法拓?fù)浒询B鏈路,因此可以盡量避免將堆疊鏈路選擇為傳輸路徑,從而避免占用堆疊鏈路的帶寬資源,提高堆疊設(shè)備的轉(zhuǎn)發(fā)性能。
以下結(jié)合圖1所示的應(yīng)用場景,對上述算法拓?fù)渖煞椒ㄟM(jìn)行說明。基于圖1,可以得到圖2所示的網(wǎng)絡(luò)拓?fù)湟约皥D6所示的算法拓?fù)?,以下對圖6所示的算法拓?fù)涞纳蛇^程進(jìn)行詳細(xì)說明,該算法拓?fù)涞纳蛇^程可以包括:
步驟1、控制器分別向各設(shè)備(如設(shè)備a、設(shè)備b、設(shè)備c、設(shè)備d、設(shè)備e、設(shè)備f、設(shè)備g)發(fā)送用于請求mib屬性的snmp請求消息。
步驟2、各設(shè)備在接收到該snmp請求消息后,從本地獲取到本設(shè)備的mib屬性,并將攜帶該mib屬性的snmp響應(yīng)消息返回給控制器。
步驟3、控制器在收到各設(shè)備返回的snmp響應(yīng)消息后,從snmp響應(yīng)消息中解析出設(shè)備的mib屬性,并基于此mib屬性確定各設(shè)備是否為堆疊設(shè)備。
例如,基于設(shè)備a的mib屬性,確定設(shè)備a不是堆疊設(shè)備;基于設(shè)備b的mib屬性,確定設(shè)備b是堆疊設(shè)備;基于設(shè)備c的mib屬性,確定設(shè)備c不是堆疊設(shè)備;基于設(shè)備d的mib屬性,確定設(shè)備d不是堆疊設(shè)備;基于設(shè)備e的mib屬性,確定設(shè)備e不是堆疊設(shè)備;基于設(shè)備f的mib屬性,確定設(shè)備f不是堆疊設(shè)備;基于設(shè)備g的mib屬性,確定設(shè)備g不是堆疊設(shè)備。
針對非堆疊設(shè)備的算法拓?fù)涞纳蛇^程,與傳統(tǒng)網(wǎng)絡(luò)拓?fù)涞纳蛇^程類似,對此不再贅述,以下步驟說明堆疊設(shè)備(設(shè)備b)的算法拓?fù)涞纳蛇^程。
步驟4、控制器基于設(shè)備b的mib屬性,確定組成設(shè)備b的子設(shè)備數(shù)量為2,為設(shè)備b創(chuàng)建2個(gè)子設(shè)備,這2個(gè)子設(shè)備分別為子設(shè)備b1、子設(shè)備b2。
步驟5、控制器基于設(shè)備b的mib屬性,確定接口b11位于子設(shè)備b1、接口b13位于子設(shè)備b1,接口b12位于子設(shè)備b2、接口b14位于子設(shè)備b2。
在一個(gè)例子中,步驟3中使用的mib屬性是堆疊屬性stack,步驟4中使用的mib屬性是框?qū)傩詂hassis,步驟5中使用的mib屬性是端口屬性port。
步驟6、基于網(wǎng)絡(luò)拓?fù)涞纳煞绞剑刂破骺梢垣@知設(shè)備a的接口a11與設(shè)備b的接口b11連接,由于接口b11位于子設(shè)備b1,因此,在算法拓?fù)渲?,設(shè)備a的接口a11與子設(shè)備b1的接口b11連接。類似的,如圖6所示,設(shè)備a的接口a12與子設(shè)備b2的接口b12連接;設(shè)備d的接口d11與子設(shè)備b1的接口b13連接;設(shè)備e的接口e11與子設(shè)備b2的接口b14連接。
步驟7、控制器為子設(shè)備b1創(chuàng)建堆疊口1(也稱為堆疊互聯(lián)口),并為子設(shè)備b2創(chuàng)建堆疊口2,并在堆疊口1和堆疊口2之間創(chuàng)建堆疊鏈路1。
步驟8、控制器為堆疊鏈路1設(shè)置鏈路屬性,該鏈路屬性包括開銷屬性和帶寬屬性,該開銷屬性為大于預(yù)設(shè)第一閾值的開銷值,該帶寬屬性為小于預(yù)設(shè)第二閾值的帶寬值。
步驟9、控制器可以生成包括上述子設(shè)備b1、子設(shè)備b2、堆疊口1、堆疊口2以及堆疊鏈路1的算法拓?fù)洌罱K的算法拓?fù)淇梢匀鐖D6所示。
如圖6所示,對于非堆疊設(shè)備,算法拓?fù)浒ǖ氖欠嵌询B設(shè)備本身,對于堆疊設(shè)備,算法拓?fù)浒ǖ氖墙M成堆疊設(shè)備的子設(shè)備,而不是堆疊設(shè)備本身。
在上述算法拓?fù)涞幕A(chǔ)上,假設(shè)報(bào)文需要從設(shè)備a傳輸?shù)皆O(shè)備e,則有兩條傳輸路徑,第一條傳輸路徑為:設(shè)備a-接口a11-子設(shè)備b1-堆疊口1-子設(shè)備b2-接口b14-設(shè)備e,而第二條傳輸路徑為:設(shè)備a-接口a12-子設(shè)備b2-接口b14-設(shè)備e。由于第一條傳輸路徑包括路徑“子設(shè)備b1-堆疊口1-子設(shè)備b2”,而路徑“子設(shè)備b1-堆疊口1-子設(shè)備b2”的開銷值很大,且?guī)捴岛苄?,因此,控制器不會選擇第一條傳輸路徑,而是選擇第二條傳輸路徑?;诖?,設(shè)備a在接收到報(bào)文之后,通過接口a12發(fā)送報(bào)文,子設(shè)備b2在接收到報(bào)文之后,通過接口b14發(fā)送報(bào)文,繼而將報(bào)文發(fā)送給設(shè)備e。
在一個(gè)例子中,控制器在得到傳輸路徑后,還可以向用戶顯示該傳輸路徑,而在向用戶顯示該傳輸路徑的過程中,針對堆疊設(shè)備,顯示的可以為堆疊設(shè)備本身,而不是組成該堆疊設(shè)備的子設(shè)備。基于此,控制器還可以對傳輸路徑中的子設(shè)備和堆疊口進(jìn)行處理,具體處理過程為:將子設(shè)備替換為堆疊設(shè)備,并去除堆疊口;然后,若存在重復(fù)設(shè)備,則只保留一個(gè)設(shè)備,以完成對子設(shè)備和堆疊口的處理;若不存在重復(fù)設(shè)備,則完成對子設(shè)備和堆疊口的處理。
例如,假設(shè)控制器得到的傳輸路徑為“設(shè)備a-接口a11-子設(shè)備b1-堆疊口1-子設(shè)備b2-接口b14-設(shè)備e”,則將子設(shè)備b1和子設(shè)備b2替換為堆疊設(shè)備(即設(shè)備b),并去除堆疊口1,這樣傳輸路徑為“設(shè)備a-接口a11-設(shè)備b-設(shè)備b-接口b14-設(shè)備e”,由于存在重復(fù)的設(shè)備b,因此只保留一個(gè)設(shè)備b,最終向用戶顯示的傳輸路徑為“設(shè)備a-接口a11-設(shè)備b-接口b14-設(shè)備e”。
又例如,假設(shè)控制器得到的傳輸路徑為“設(shè)備a-接口a12-子設(shè)備b2-接口b14-設(shè)備e”,則將子設(shè)備b2替換為堆疊設(shè)備(即設(shè)備b),這樣傳輸路徑為“設(shè)備a-接口a12-設(shè)備b-接口b14-設(shè)備e”,由于不存在重復(fù)的設(shè)備,因此最終向用戶顯示的傳輸路徑為“設(shè)備a-接口a12-設(shè)備b-接口b14-設(shè)備e”。
在一個(gè)例子中,控制器可以周期性向設(shè)備(以設(shè)備b為例)發(fā)送用于請求mib屬性的snmp請求消息,若基于設(shè)備b返回的snmp響應(yīng)消息,確定組成設(shè)備b的子設(shè)備增加,則控制器可以基于步驟4-步驟9的流程,重新生成算法拓?fù)?,或者,在已有算法拓?fù)涞幕A(chǔ)上,控制器創(chuàng)建新的子設(shè)備,為該新的子設(shè)備創(chuàng)建堆疊口以及該堆疊口對應(yīng)的堆疊鏈路,并在該算法拓?fù)渲袨樵撛O(shè)備b添加該新的子設(shè)備、該新的子設(shè)備的堆疊口以及堆疊鏈路。
例如,在圖6的算法拓?fù)浠A(chǔ)上,控制器創(chuàng)建新的子設(shè)備b3,為子設(shè)備b3創(chuàng)建堆疊口3,在堆疊口3和堆疊口1之間創(chuàng)建堆疊鏈路2,并在堆疊口3和堆疊口2之間創(chuàng)建堆疊鏈路3,然后,在算法拓?fù)渲袨樵O(shè)備b添加子設(shè)備b3、堆疊口3、堆疊鏈路2和堆疊鏈路3。此外,基于設(shè)備b的mib屬性(如端口屬性),還可以為子設(shè)備b3添加普通接口,并基于普通接口確定子設(shè)備b3與其它設(shè)備(如設(shè)備a、設(shè)備d、設(shè)備e等)的連接關(guān)系,在此不再贅述。
在一個(gè)例子中,若基于設(shè)備b返回的snmp響應(yīng)消息,確定組成設(shè)備b的子設(shè)備減少,則控制器可以基于步驟4-步驟9的流程,重新生成算法拓?fù)洌蛘?,在已有算法拓?fù)涞幕A(chǔ)上,控制器確定已離開的子設(shè)備,并從算法拓?fù)渲袆h除已離開的子設(shè)備、以及已離開的子設(shè)備的堆疊口和堆疊鏈路。
例如,在算法拓?fù)渲邪ㄗ釉O(shè)備b1、子設(shè)備b2、子設(shè)備b3,子設(shè)備b1包括堆疊口1、子設(shè)備b2包括堆疊口2、子設(shè)備b3包括堆疊口3,堆疊口1和堆疊口2之間為堆疊鏈路1、堆疊口1和堆疊口3之間為堆疊鏈路2、堆疊口2和堆疊口3之間為堆疊鏈路3;在此基礎(chǔ)上,若基于設(shè)備b的mib屬性,控制器確定已離開的子設(shè)備為子設(shè)備b1,則從算法拓?fù)渲袆h除子設(shè)備b1、堆疊口1、堆疊鏈路1、堆疊鏈路2,這樣,算法拓?fù)渲邪ㄗ釉O(shè)備b2、子設(shè)備b3,子設(shè)備b2包括堆疊口2、子設(shè)備b3包括堆疊口3,堆疊口2和堆疊口3之間為堆疊鏈路3。此外,還可以從算法拓?fù)渲袆h除子設(shè)備b1的普通接口,并刪除普通接口與其它設(shè)備(如設(shè)備a、設(shè)備d、設(shè)備e等)的連接關(guān)系,在此不再贅述。
在一個(gè)例子中,當(dāng)算法拓?fù)浒l(fā)生變化(如組成設(shè)備b的子設(shè)備增加、或者組成設(shè)備b的子設(shè)備減少)時(shí),則控制器可以基于變化后的算法拓?fù)?,重新選擇報(bào)文的傳輸路徑,對此選擇過程與上述過程類似,在此不再重復(fù)贅述。
基于與上述方法同樣的申請構(gòu)思,本申請實(shí)施例中還提供一種算法拓?fù)渖裳b置,該算法拓?fù)渖裳b置可以應(yīng)用在控制器。如圖7所示,為本申請?zhí)岢龅乃惴ㄍ負(fù)渖裳b置的結(jié)構(gòu)圖,該裝置可以包括:
獲取模塊11,用于獲取設(shè)備的管理信息庫mib屬性;
創(chuàng)建模塊12,用于當(dāng)根據(jù)所述mib屬性確定所述設(shè)備為堆疊設(shè)備時(shí),為所述設(shè)備創(chuàng)建子設(shè)備,并為所述子設(shè)備創(chuàng)建堆疊口,為所述堆疊口創(chuàng)建堆疊鏈路;
生成模塊13,用于生成包括所述子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)洹?/p>
所述創(chuàng)建模塊12,具體用于在為所述設(shè)備創(chuàng)建子設(shè)備的過程,根據(jù)所述mib屬性確定組成所述設(shè)備的子設(shè)備的數(shù)量,并為所述設(shè)備創(chuàng)建相應(yīng)數(shù)量的子設(shè)備。
在一個(gè)例子中,所述創(chuàng)建模塊12,具體用于在為所述子設(shè)備創(chuàng)建堆疊口,并為所述堆疊口創(chuàng)建堆疊鏈路的過程中,為每個(gè)子設(shè)備創(chuàng)建一個(gè)堆疊口,并在任意兩個(gè)堆疊口之間創(chuàng)建堆疊鏈路;或者,為任意兩個(gè)子設(shè)備創(chuàng)建具有關(guān)聯(lián)關(guān)系的堆疊口,并在具有關(guān)聯(lián)關(guān)系的堆疊口之間創(chuàng)建堆疊鏈路。
在一個(gè)例子中,所述算法拓?fù)渖裳b置還包括(在圖中未體現(xiàn)):設(shè)置模塊;所述設(shè)置模塊,用于為所述堆疊鏈路設(shè)置鏈路屬性,所述鏈路屬性可以包括但不限于:開銷屬性和/或帶寬屬性;其中,所述開銷屬性為大于預(yù)設(shè)第一閾值的開銷值;所述帶寬屬性為小于預(yù)設(shè)第二閾值的帶寬值。
所述生成模塊13,還用于在生成包括所述子設(shè)備、堆疊口和堆疊鏈路的算法拓?fù)渲?,?dāng)組成所述設(shè)備的子設(shè)備增加時(shí),創(chuàng)建新的子設(shè)備,為所述新的子設(shè)備創(chuàng)建堆疊口以及所述堆疊口對應(yīng)的堆疊鏈路,并在所述算法拓?fù)渲袨樗鲈O(shè)備添加所述新的子設(shè)備、所述新的子設(shè)備的堆疊口和堆疊鏈路;和/或,
當(dāng)組成所述設(shè)備的子設(shè)備減少時(shí),確定已離開的子設(shè)備,并從所述算法拓?fù)渲袆h除所述已離開的子設(shè)備、所述已離開的子設(shè)備的堆疊口和堆疊鏈路。
本申請實(shí)施例提供的控制器,從硬件層面而言,硬件架構(gòu)示意圖具體可以參見圖8。圖8為本申請實(shí)施例提供的控制器的硬件結(jié)構(gòu)示意圖。包括:機(jī)器可讀存儲介質(zhì)和處理器,其中:
機(jī)器可讀存儲介質(zhì):存儲指令代碼。
處理器:與機(jī)器可讀存儲介質(zhì)通信,讀取和執(zhí)行機(jī)器可讀存儲介質(zhì)中存儲的所述指令代碼,實(shí)現(xiàn)本申請上述示例公開的算法拓?fù)渖刹僮鳌?/p>
這里,機(jī)器可讀存儲介質(zhì)可以是任何電子、磁性、光學(xué)或其它物理存儲裝置,可以包含或存儲信息,如可執(zhí)行指令、數(shù)據(jù),等等。例如,機(jī)器可讀存儲介質(zhì)可以是:ram(radomaccessmemory,隨機(jī)存取存儲器)、易失存儲器、非易失性存儲器、閃存、存儲驅(qū)動器(如硬盤驅(qū)動器)、固態(tài)硬盤、任何類型的存儲盤(如光盤、dvd等),或者類似的存儲介質(zhì),或者它們的組合。
上述實(shí)施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計(jì)算機(jī)芯片或?qū)嶓w實(shí)現(xiàn),或者由具有某種功能的產(chǎn)品來實(shí)現(xiàn)。一種典型的實(shí)現(xiàn)設(shè)備為計(jì)算機(jī),計(jì)算機(jī)的具體形式可以是個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、蜂窩電話、相機(jī)電話、智能電話、個(gè)人數(shù)字助理、媒體播放器、導(dǎo)航設(shè)備、電子郵件收發(fā)設(shè)備、游戲控制臺、平板計(jì)算機(jī)、可穿戴設(shè)備或者這些設(shè)備中的任意幾種設(shè)備的組合。
為了描述的方便,描述以上裝置時(shí)以功能分為各種單元分別描述。當(dāng)然,在實(shí)施本申請時(shí)可以把各單元的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請實(shí)施例可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
而且,這些計(jì)算機(jī)程序指令也可以存儲在能引導(dǎo)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或者多個(gè)流程和/或方框圖一個(gè)方框或者多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或者其它可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其它可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可以采用完全硬件實(shí)施例、完全軟件實(shí)施例、或者結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可以采用在一個(gè)或者多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(可以包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
以上所述僅為本申請的實(shí)施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。