路由器及其軟件升級方法
【專利摘要】本發(fā)明公開了一種路由器及其軟件升級方法,其中,該路由器包括:多核CPU以及相互獨立的第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,多核CPU包括控制平面CPU和數(shù)據(jù)平面CPU,其中:第一內(nèi)存區(qū)域用于存儲控制平面程序;第二內(nèi)存區(qū)域用于存儲數(shù)據(jù)平面程序;數(shù)據(jù)平面CPU用于使用第二內(nèi)存區(qū)域中的數(shù)據(jù)平面程序處理數(shù)據(jù)報文;控制平面CPU用于使用第一內(nèi)存區(qū)域中的控制平面程序處理協(xié)議報文,以及,當(dāng)路由器進行軟件升級時,進行復(fù)位并僅將第一內(nèi)存區(qū)域清零,在復(fù)位啟動后,將新版本的控制平面程序加載到第一內(nèi)存區(qū)域,并運行第一內(nèi)存區(qū)域中的新版本的控制平面程序。本發(fā)明能夠提高軟轉(zhuǎn)發(fā)路由器的可用性。
【專利說明】路由器及其軟件升級方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件升級【技術(shù)領(lǐng)域】,特別涉及一種路由器及其軟件升級方法。
【背景技術(shù)】
[0002]最初的軟件升級,尤其是嵌入式系統(tǒng)的軟件升級,主要依賴于軟件的重新啟動。但是,這個過程持續(xù)的時間較長,并且在軟件升級過程中,業(yè)務(wù)會處于中斷狀態(tài)。而對于某些核心設(shè)備以及某些特殊應(yīng)用場合的設(shè)備來說,這樣的代價是不能接受的。所以,如何在軟件升級過程中確保業(yè)務(wù)不發(fā)生中斷,成為亟待解決的問題。
[0003]為了解決上述問題,提出了 ISSU (In-Service Software Upgrade,業(yè)務(wù)不中斷升級)。ISSU是一種能夠保證在軟件升級過程中,業(yè)務(wù)不中斷或者中斷時間較短的升級方式,它提供了高可用性的軟件升級方式。與之前的軟件升級不同的是,支持ISSU的設(shè)備在升級過程中,業(yè)務(wù)是處于正常狀態(tài),因此,能夠在最大程度上,為用戶提供了高可用性。
[0004]路由器是網(wǎng)絡(luò)中進行數(shù)據(jù)路由轉(zhuǎn)發(fā)的重要設(shè)備之一。按照由軟件實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)、還是由硬件實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā),可以將路由器分為軟轉(zhuǎn)發(fā)路由器和硬轉(zhuǎn)發(fā)路由器兩類。其中,軟轉(zhuǎn)發(fā)路由器是指通過CPU (Central Processing Unit,中央處理單元)轉(zhuǎn)發(fā)的路由器。和它相對的硬轉(zhuǎn)發(fā)路由器,通常包括NP (Network Processor,網(wǎng)絡(luò)處理器)轉(zhuǎn)發(fā)、ASIC (Application Specific Integrated Circuit,專用集成電路)轉(zhuǎn)發(fā)、FPGA (FieldProgrammable Gate Array,現(xiàn)場可編程門陣列)轉(zhuǎn)發(fā)的路由器等。
[0005]現(xiàn)有技術(shù)中,硬轉(zhuǎn)發(fā)路由器可以通過與交換機類似的方式支持ISSU,即,在軟件升級過程中,CPU重啟,而負責(zé)業(yè)務(wù)轉(zhuǎn)發(fā)的轉(zhuǎn)發(fā)芯片不重啟,從而做到轉(zhuǎn)發(fā)的業(yè)務(wù)數(shù)據(jù)不中斷。
[0006]但是,由于軟轉(zhuǎn)發(fā)路由器是通過CPU進行業(yè)務(wù)轉(zhuǎn)發(fā)的,因此,無法采用上述方法來實現(xiàn)ISSU,從而無法在軟件升級過程中,實現(xiàn)業(yè)務(wù)不中斷。
【發(fā)明內(nèi)容】
[0007]有鑒于此,本發(fā)明提供了一種路由器及其軟件升級方法,以至少解決軟轉(zhuǎn)發(fā)路由器無法實現(xiàn)ISSU,即無法在軟件升級過程中,實現(xiàn)業(yè)務(wù)不中斷的問題。
[0008]本發(fā)明的技術(shù)方案如下:
[0009]一方面,提供了一種路由器,該路由器通過CPU轉(zhuǎn)發(fā)數(shù)據(jù)報文,包括:多核CPU以及相互獨立的第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,多核CPU包括控制平面CPU和數(shù)據(jù)平面CPU,其中:第一內(nèi)存區(qū)域用于存儲控制平面程序,控制平面程序包括路由協(xié)議的相關(guān)程序;第二內(nèi)存區(qū)域用于存儲數(shù)據(jù)平面程序,數(shù)據(jù)平面程序包括數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的相關(guān)程序;數(shù)據(jù)平面CPU用于使用第二內(nèi)存區(qū)域中的數(shù)據(jù)平面程序處理數(shù)據(jù)報文;控制平面CPU用于使用第一內(nèi)存區(qū)域中的控制平面程序處理協(xié)議報文,以及,當(dāng)路由器進行軟件升級時,進行復(fù)位并僅將第一內(nèi)存區(qū)域清零,在復(fù)位啟動后,將新版本的控制平面程序加載到第一內(nèi)存區(qū)域,并運行第一內(nèi)存區(qū)域中的新版本的控制平面程序。
[0010]另一方面,還提供了一種路由器的軟件升級方法,該路由器通過CPU轉(zhuǎn)發(fā)數(shù)據(jù)報文,該路由器包括多核CPU以及相互獨立的第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,多核CPU包括控制平面CPU和數(shù)據(jù)平面CPU,該方法包括:在第一內(nèi)存區(qū)域存儲控制平面程序,控制平面程序包括路由協(xié)議的相關(guān)程序,控制平面CPU使用第一內(nèi)存區(qū)域中的控制平面程序處理協(xié)議報文;在第二存儲區(qū)域存儲數(shù)據(jù)平面程序,數(shù)據(jù)平面程序包括數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的相關(guān)程序,數(shù)據(jù)平面CPU使用第二內(nèi)存區(qū)域中的數(shù)據(jù)平面程序處理數(shù)據(jù)報文;控制平面CPU在路由器需要進行軟件升級時,復(fù)位自身并將第一內(nèi)存區(qū)域清零;控制平面CPU在復(fù)位啟動后,將新版本的控制平面程序加載到第一內(nèi)存區(qū)域,并運行第一內(nèi)存區(qū)域中的新版本的控制平面程序。
[0011]本發(fā)明的以上技術(shù)方案中,通過將路由器中的多核CPU分為負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的數(shù)據(jù)平面CPU和負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理以外的工作(包括協(xié)議報文的處理)的控制平面CPU,將內(nèi)存分為服務(wù)于控制平面CPU的第一內(nèi)存區(qū)域和服務(wù)于數(shù)據(jù)平面CPU的第二內(nèi)存區(qū)域,在路由器開始進行軟件升級時,僅復(fù)位控制平面CPU并僅對第一內(nèi)存區(qū)域清零,控制平面CPU在復(fù)位啟動后,加載并運行新版本的控制平面程序,在此過程中,數(shù)據(jù)平面CPU維持運行狀態(tài)并且第二內(nèi)存區(qū)域不清零,這樣,能夠確保負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理(即業(yè)務(wù)轉(zhuǎn)發(fā)處理)的數(shù)據(jù)平面CPU在控制平面CPU進行軟件升級過程中,仍然能夠正常運行,進行數(shù)據(jù)報文轉(zhuǎn)發(fā)處理,從而確保了業(yè)務(wù)的不中斷,支持了 ISSU,提高了軟轉(zhuǎn)發(fā)路由器的可用性。
【專利附圖】
【附圖說明】
[0012]圖1是根據(jù)本發(fā)明的實施例一的軟轉(zhuǎn)發(fā)路由器的架構(gòu)圖;
[0013]圖2是根據(jù)本發(fā)明的實施例一的軟轉(zhuǎn)發(fā)路由器的軟件升級方法的流程圖;
[0014]圖3是根據(jù)本發(fā)明的實施例二的在寫入新版本的數(shù)據(jù)平面程序代碼前,Section3的結(jié)構(gòu)不意圖;
[0015]圖4是根據(jù)本發(fā)明的實施例二的在寫入新版本的數(shù)據(jù)平面程序代碼后,Section3的結(jié)構(gòu)不意圖;
[0016]圖5是根據(jù)本發(fā)明的實施例三的控制平面CPU的結(jié)構(gòu)示意圖。
【具體實施方式】
[0017]實施例一
[0018]本發(fā)明實施例提供了一種通過CPU轉(zhuǎn)發(fā)數(shù)據(jù)報文的路由器,稱為軟轉(zhuǎn)發(fā)路由器,該路由器的架構(gòu)如圖1所示。該路由器中的CPU為多核CPU (即包含有多個CPU核心),在多核CPU越來越普及的今天,大部分的軟轉(zhuǎn)發(fā)路由器都是基于多核CPU設(shè)計的。另外,該路由器中的內(nèi)存中包含有兩個相互獨立的存儲區(qū)域:第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域。
[0019]本實施例中,該路由器中的多核CPU包括兩部分:
[0020]控制平面(Control Plane) CPU,負責(zé)完成協(xié)議報文的處理、轉(zhuǎn)發(fā)表項生成和下發(fā)的工作,路由器上的其它功能,如管理等,也都在控制平面CPU上完成;協(xié)議報文包括各種路由選擇協(xié)議報文,還可以包括網(wǎng)絡(luò)管理協(xié)議報文。
[0021]數(shù)據(jù)平面(Data Plane) CPU,負責(zé)完成數(shù)據(jù)報文的轉(zhuǎn)發(fā)處理。數(shù)據(jù)報文包括需要路由器查表轉(zhuǎn)發(fā)的報文。
[0022]控制平面CPU和數(shù)據(jù)平面CPU中各自包含多核CPU中的I個或多個CPU核心,具體數(shù)量由產(chǎn)品形態(tài)確定,本發(fā)明對此不做限定。
[0023]第一內(nèi)存區(qū)域(在圖1中記為Sectionl)服務(wù)于控制平面CPU,用于存儲各種協(xié)議的相關(guān)程序的數(shù)據(jù)、代碼等,例如存儲如路由協(xié)議(routing protocoI)的相關(guān)程序(即控制平面程序),其中,路由協(xié)議例如可以是RIP (Routing Information Protocol,路由信息協(xié)議)、IGP (Interior Gateway Protocol,內(nèi)部網(wǎng)關(guān)協(xié)議)和 OSPF (Open Shortest PathFirst,開放最短路徑優(yōu)先)等。第一內(nèi)存區(qū)域還可以存儲網(wǎng)絡(luò)管理等協(xié)議的相關(guān)程序。控制平面CPU通過運行這些程序,可以實現(xiàn)對路由協(xié)議報文、網(wǎng)絡(luò)管理協(xié)議報文等的處理,例如,根據(jù)路由協(xié)議報文生成及下發(fā)數(shù)據(jù)報文的轉(zhuǎn)發(fā)表項、向其他路由器發(fā)送路由協(xié)議報文等,根據(jù)網(wǎng)絡(luò)管理協(xié)議報文執(zhí)行相應(yīng)的設(shè)備管理等。
[0024]第二內(nèi)存區(qū)域用于存儲數(shù)據(jù)平面CPU進行數(shù)據(jù)報文轉(zhuǎn)發(fā)處理所需的轉(zhuǎn)發(fā)表項、以及數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的相關(guān)程序(即數(shù)據(jù)平面程序)。這個內(nèi)存區(qū)域中的轉(zhuǎn)發(fā)表項,數(shù)據(jù)平面CPU在進行數(shù)據(jù)報文轉(zhuǎn)發(fā)的時候會來查詢,而控制平面CPU生成轉(zhuǎn)發(fā)表項時會主動下發(fā)。也可以進一步將第二內(nèi)存區(qū)域劃分為兩個存儲區(qū)域(可以記為:Section 2和Section 3),一個存儲區(qū)域(例如為Section 2)用于存儲轉(zhuǎn)發(fā)表項,而另一個存儲區(qū)域(例如為Section3)用于存儲數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的相關(guān)程序(即數(shù)據(jù)平面程序),本發(fā)明對此不做限定。
[0025]為了描述方便,以下按照第二內(nèi)存區(qū)域分為兩個存儲區(qū)域來進行介紹。
[0026]在路由器正常運行時,控制平面CPU使用Section I中的控制平面程序,完成協(xié)議報文的處理,一旦生成轉(zhuǎn)發(fā)表項,就將其寫入(即下發(fā))Section 2中。而數(shù)據(jù)平面CPU運行Section 3中的數(shù)據(jù)平面程序,在收到數(shù)據(jù)報文時,查詢Section 2中的轉(zhuǎn)發(fā)表項,并根據(jù)轉(zhuǎn)發(fā)表項中的信息,將其轉(zhuǎn)發(fā)到外部、或者丟棄、或者上送到控制平面CPU以做進一步處理。
[0027]這里需要注意的是:由于Section 2中的轉(zhuǎn)發(fā)表項被兩個平面的CPU訪問,所以需要通過現(xiàn)有的原子操作和延遲刪除技術(shù)(如RCU (Read-Copy Update,讀-拷貝修改))來規(guī)避臨界區(qū)問題。
[0028]如圖2所示,路由器進行軟件升級的過程包括以下步驟:
[0029]步驟S202,僅控制平面CPU復(fù)位,并僅將第一內(nèi)存區(qū)域清零;
[0030]此時,數(shù)據(jù)平面CPU繼續(xù)運行,并且,Section 2和Section 3不清零。
[0031]通常,復(fù)位包括兩個過程:跳轉(zhuǎn)到特定位置,之后,基于該特定位置的指令開始初始化。上述的步驟S202中,控制平面CPU在復(fù)位過程中,首先跳轉(zhuǎn)到特定位置,然后,從該特定位置開始進行初始化,在初始化過程中,就可以執(zhí)行將第一內(nèi)存區(qū)域清零的動作。
[0032]當(dāng)需要對路由器進行軟件升級時,用戶可以通過PC (Private Computer)向路由器下發(fā)升級指令,也可以由其他設(shè)備下發(fā)升級指令,本發(fā)明對此不做限定。
[0033]步驟S204,在復(fù)位啟動后,控制平面CPU將欲升級到的新版本軟件程序(例如為新版本的嵌入式系統(tǒng)軟件程序)中包含的控制平面程序(以下簡稱為新版本的控制平面程序)加載到第一內(nèi)存區(qū)域,并運行第一內(nèi)存區(qū)域中的新版本的控制平面程序。
[0034]在加載之前,新版本軟件程序可以存放在文件系統(tǒng)、FLASH (閃存)、移動存儲設(shè)備、或者內(nèi)存的特殊區(qū)域中,本發(fā)明對此不做限定。
[0035]由于路由器的一個版本的軟件程序中可以包含控制平面程序和數(shù)據(jù)平面程序兩部分,因此,在實際實施時,在控制平面CPU加載新版本的控制平面程序時,可以同時將新版本軟件程序中包含的數(shù)據(jù)平面程序一起加載到第一內(nèi)存區(qū)域中,即,將整個新版本軟件程序加載到第一內(nèi)存區(qū)域中;也可以僅將新版本的控制平面程序加載到第一內(nèi)存區(qū)域中,本發(fā)明對此不做限定。
[0036]在運行新版本的控制平面程序的過程中,控制平面CPU就會將各種協(xié)議的代碼、數(shù)據(jù)寫入到第一內(nèi)存區(qū)域中。
[0037]通過將路由器中的多核CPU分為負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的數(shù)據(jù)平面CPU和負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理以外的工作(包括協(xié)議報文的處理)的控制平面CPU,將內(nèi)存分為服務(wù)于控制平面CPU的第一內(nèi)存區(qū)域和服務(wù)于數(shù)據(jù)平面CPU的第二內(nèi)存區(qū)域,在路由器進行軟件升級時,僅復(fù)位控制平面CPU并僅對第一內(nèi)存區(qū)域清零,控制平面CPU在復(fù)位啟動后,加載并運行新版本的控制平面程序,在此過程中,數(shù)據(jù)平面CPU維持運行狀態(tài)并且第二內(nèi)存區(qū)域不清零,這樣,能夠確保負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理(即業(yè)務(wù)轉(zhuǎn)發(fā)處理)的數(shù)據(jù)平面CPU在控制平面CPU進行軟件升級過程中,仍然能夠正常運行,進行數(shù)據(jù)報文轉(zhuǎn)發(fā)處理,從而確保了業(yè)務(wù)的不中斷,支持了 ISSU,提高了軟轉(zhuǎn)發(fā)路由器的可用性。
[0038]實施例二
[0039]如圖1所示的路由器的軟件升級過程,可以包括以下步驟:
[0040]第一步,控制平面CPU進行軟件升級;
[0041]在該步驟中,僅控制平面CPU復(fù)位,并僅將Section I清零。此時,數(shù)據(jù)平面CPU繼續(xù)運行,Section 2和Section 3不清零??刂破矫鍯PU重啟后,加載新版本的控制平面程序到第一內(nèi)存區(qū)域,并運行第一內(nèi)存區(qū)域中的新版本的控制平面程序。
[0042]新版本的控制平面程序在控制平面CPU上運行起來后,進入第二步。
[0043]第二步,數(shù)據(jù)平面表項更新升級;
[0044]本步驟應(yīng)用于數(shù)據(jù)平面表項格式存在變化(即新版本控制平面程序?qū)?yīng)的轉(zhuǎn)發(fā)表項(稱為新版本的數(shù)據(jù)平面表項)與舊版本的控制平面程序?qū)?yīng)的轉(zhuǎn)發(fā)表項(稱為舊版本的數(shù)據(jù)平面表項)的格式不同)的情況,如果不存在變化,則可以直接跳過本步驟,進入第三
止/J/ O
[0045]在實際實施時,例如可以通過預(yù)設(shè)的版本號來判斷新版本與舊版本的數(shù)據(jù)平面表項的格式是否相同,例如,在進行版本開發(fā)時,預(yù)先規(guī)定了版本等級,屬于同一個版本等級的軟件程序的數(shù)據(jù)平面表項的格式不會發(fā)生變化(即相同),這樣,就可以判斷新版本的版本號與舊版本的版本號是否屬于同一個版本等級,若是,則確定新舊版本的數(shù)據(jù)平面表項的格式相同,否則,確定新舊版本的數(shù)據(jù)平面表項的格式不同。顯然,也可以通過現(xiàn)有的其他方式進行判斷,本發(fā)明對此不做限定。
[0046]控制平面CPU運行了新版本的控制平面程序之后,遍歷Section 2中的各個轉(zhuǎn)發(fā)表項(即數(shù)據(jù)平面的表項),將舊版本的轉(zhuǎn)發(fā)表項內(nèi)容,轉(zhuǎn)化為新版本的轉(zhuǎn)發(fā)表項內(nèi)容。也就是說,控制平面CPU對Section 2中的轉(zhuǎn)發(fā)表項進行格式轉(zhuǎn)化,以符合新版本的數(shù)據(jù)平面表項的格式。通過更新升級轉(zhuǎn)發(fā)表項,為后續(xù)的更新升級數(shù)據(jù)平面程序做準備。
[0047]其中,表項格式的轉(zhuǎn)化方式例如:舊版本的轉(zhuǎn)發(fā)表項中有3個字段,新版本的表項有4個字段(與舊版本相比,有I個新增字段),那么,就需要為新增字段賦默認值,而且新增字段應(yīng)該位于表項結(jié)構(gòu)的最后,這樣,還在運行舊版本的數(shù)據(jù)平面程序的數(shù)據(jù)平面CPU在讀到新格式的轉(zhuǎn)發(fā)表項時,依然能夠正常工作。[0048]在進行表項格式轉(zhuǎn)換時,依然存在兩個平面的CPU訪問同一塊內(nèi)存區(qū)域(SPSection 2)的臨界區(qū),所以可以通過原子操作和延遲刪除來避免臨界區(qū)問題。
[0049]在Section 2中的所有轉(zhuǎn)發(fā)表項均轉(zhuǎn)化完畢后,進入第三步。
[0050]第三步,升級數(shù)據(jù)平面程序;
[0051]本步驟應(yīng)用于數(shù)據(jù)平面程序存在變化,即舊版本的數(shù)據(jù)平面程序與新版本的數(shù)據(jù)平面程序不同,數(shù)據(jù)平面程序需要升級的情況。如果數(shù)據(jù)平面程序不存在變化,則此時可以直接結(jié)束整個軟件升級流程。
[0052]在實際實施時,判斷新舊版本的數(shù)據(jù)平面程序是否相同的方式與上述第二步中判斷新舊版本的數(shù)據(jù)平面表項格式是否相同的方式類似,判斷新版本的版本號與舊版本的版本號是否屬于同一個版本等級,若是,則確定新舊版本的數(shù)據(jù)平面程序相同,否則,確定新舊版本的數(shù)據(jù)平面程序不同。顯然,也可以通過現(xiàn)有的其他方式進行判斷,本發(fā)明對此不做限定。
[0053]數(shù)據(jù)平面程序的升級,可以包括以下步驟:
[0054]步驟I,控制平面CPU將新版本的數(shù)據(jù)平面程序?qū)懭隨ection 3,寫入完成后,進入步驟2 ;
[0055]在實際實施時,若控制平面CPU將整個新版本軟件程序加載到了第一內(nèi)存區(qū)域,則在本步驟中,就可以將第一內(nèi)存區(qū)域中的新版本的數(shù)據(jù)平面程序復(fù)制到第二內(nèi)存區(qū)域中即可;若控制平面CPU僅將新版本的控制平面程序加載到了第一內(nèi)存區(qū)域,則本步驟中,就可以將新版本的數(shù)據(jù)程序從文件系統(tǒng)、FLASH (閃存)、移動存儲設(shè)備、或者內(nèi)存的特殊區(qū)域中寫入到第二內(nèi)存區(qū)域中。本發(fā)明對此不做限定。
[0056]如圖3所示,Section 3中的部分內(nèi)存保存了舊版本的數(shù)據(jù)平面程序(在圖3中用Old表示)。運行了新版本的控制平面程序的控制平面CPU將新版本的數(shù)據(jù)平面程序?qū)懭隦eserved (預(yù)留)區(qū)域中,如圖4所示,預(yù)留區(qū)域與舊版本的數(shù)據(jù)平面程序的保存位置相獨立,互不重疊。圖4中,R表示剩余的Reserved區(qū)域,New表示新版本的數(shù)據(jù)平面程序。
[0057]步驟2,數(shù)據(jù)平面CPU包含的多個CPU核心逐個運行Section 3中的新版本的數(shù)據(jù)平面程序(即,數(shù)據(jù)平面CPU中包含的多個CPU核心逐個從舊版本的數(shù)據(jù)平面程序切換至新版本的數(shù)據(jù)平面程序),其中,逐個是指一個CPU核心切換(或運行)完畢后,下一個CPU核心再切換(或運行)。通過逐個切換(或運行)的方式,可以確保至少有一個CPU核心能夠處于運行狀態(tài),業(yè)務(wù)不會發(fā)生中斷。
[0058]步驟3,在數(shù)據(jù)平面CPU包含的所有CPU核心均切換到新版本的數(shù)據(jù)平面程序后,控制平面CPU將Section 3中的舊版本的數(shù)據(jù)平面程序刪除。
[0059]至此,路由器的軟件升級過程完成。
[0060]從上述描述可知,若與舊版本相比,新版本軟件程序的數(shù)據(jù)平面表項格式以及數(shù)據(jù)平面程序均未發(fā)生變化,那么只需執(zhí)行上述的第一步即可完成整個軟件升級過程,即上述實施例一;若僅新版本軟件程序的數(shù)據(jù)平面表項格式發(fā)生了變化,那么只需執(zhí)行上述的第一步和第二步,即可完成整個軟件升級過程,該過程可以作為一個單獨的實施例實施;若僅新版本軟件程序的數(shù)據(jù)平面程序發(fā)生了變化,那么只需執(zhí)行上述的第一步和第三步,即可完成整個軟件升級過程,該過程也可以作為一個單獨的實施例實施。
[0061]實施例三[0062]由上述實施例一和實施例二可知,為了實現(xiàn)如實施例一和二中的軟件升級方法,在路由器進行軟件升級時,控制平面CPU用于進行復(fù)位并僅將第一內(nèi)存區(qū)域清零,在復(fù)位啟動后,將新版本的控制平面程序加載到第一內(nèi)存區(qū)域,并運行第一內(nèi)存區(qū)域中的新版本的控制平面程序。
[0063]如圖5所示,本實施例的路由器的控制平面CPU可以包括以下功能模塊:判斷模塊10、轉(zhuǎn)化模塊20、寫入模塊30和刪除模塊40,其中:
[0064]在控制平面CPU運行了新版本的控制平面程序之后,判斷模塊10判斷舊版本與新版本的數(shù)據(jù)平面表項的格式是否相同。
[0065]轉(zhuǎn)化模塊20在判斷模塊10判斷舊版本與新版本的數(shù)據(jù)平面表項的格式不同時,對第二內(nèi)存區(qū)域中的轉(zhuǎn)發(fā)表項進行轉(zhuǎn)化,以符合新版本的數(shù)據(jù)平面表項的格式。
[0066]這里,判斷模塊10還在判斷出舊版本與新版本的數(shù)據(jù)平面表項的格式相同時,或者在轉(zhuǎn)化模塊20對所述第二內(nèi)存區(qū)域中的舊轉(zhuǎn)發(fā)表項進行轉(zhuǎn)化之后,判斷數(shù)據(jù)平面程序是否需要升級(具體可以通過判斷舊版本的數(shù)據(jù)平面程序與新版本的數(shù)據(jù)平面程序是否相同),若不需要(即相同),則直接退出整個軟件升級流程,若需要(即不同),則觸發(fā)寫入模塊30。
[0067]寫入模塊30將新版本的數(shù)據(jù)平面程序?qū)懭氲诙?nèi)存區(qū)域中的預(yù)留區(qū)域,所述預(yù)留區(qū)域與舊版本的數(shù)據(jù)平面程序的保存位置相獨立,以使得數(shù)據(jù)平面CPU中包含的多個CPU核心逐個從舊版本的數(shù)據(jù)平面程序切換至新版本的數(shù)據(jù)平面程序,其中,逐個是指一個CPU核心切換完畢后,下一個CPU核心再切換。
[0068]刪除模塊40在數(shù)據(jù)平面CPU包含的多個CPU核心均切換至新版本的數(shù)據(jù)平面程序之后,刪除第二內(nèi)存區(qū)域中的舊版本的數(shù)據(jù)平面程序,然后,退出整個軟件升級流程。
[0069]由于控制平面CPU由多個CPU核心組成,則也可以認為控制平面CPU中的每一個CPU核心均如圖5所示,包含圖5中的四個功能模塊。
[0070]綜上,本發(fā)明以上實施例可以達到以下技術(shù)效果:
[0071]通過將路由器中的多核CPU分為負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的數(shù)據(jù)平面CPU和負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理以外的工作(包括協(xié)議報文的處理)的控制平面CPU,將內(nèi)存分為服務(wù)于控制平面CPU的第一內(nèi)存區(qū)域和服務(wù)于數(shù)據(jù)平面CPU的第二內(nèi)存區(qū)域,在路由器進行軟件升級時,僅復(fù)位控制平面CPU并僅對第一內(nèi)存區(qū)域清零,控制平面CPU在復(fù)位啟動后,加載并運行新版本的控制平面程序,在此過程中,數(shù)據(jù)平面CPU維持運行狀態(tài)并且第二內(nèi)存區(qū)域不清零,這樣,能夠確保負責(zé)數(shù)據(jù)報文轉(zhuǎn)發(fā)處理(即業(yè)務(wù)轉(zhuǎn)發(fā)處理)的數(shù)據(jù)平面CPU在控制平面CPU進行軟件升級過程中,仍然能夠正常運行,進行數(shù)據(jù)報文轉(zhuǎn)發(fā)處理,從而確保了業(yè)務(wù)的不中斷,支持了 ISSU,提高了軟轉(zhuǎn)發(fā)路由器的可用性。
[0072]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。
【權(quán)利要求】
1.一種路由器,所述路由器通過中央處理單元CPU轉(zhuǎn)發(fā)數(shù)據(jù)報文,其特征在于,包括:多核CPU以及相互獨立的第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,所述多核CPU包括控制平面CPU和數(shù)據(jù)平面CPU,其中: 所述第一內(nèi)存區(qū)域用于存儲控制平面程序,所述控制平面程序包括路由協(xié)議的相關(guān)程序; 所述第二內(nèi)存區(qū)域用于存儲數(shù)據(jù)平面程序,所述數(shù)據(jù)平面程序包括數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的相關(guān)程序; 所述數(shù)據(jù)平面CPU用于使用所述第二內(nèi)存區(qū)域中的數(shù)據(jù)平面程序處理數(shù)據(jù)報文; 所述控制平面CPU用于使用所述第一內(nèi)存區(qū)域中的控制平面程序處理協(xié)議報文,以及,當(dāng)所述路由器進行軟件升級時,進行復(fù)位并僅將所述第一內(nèi)存區(qū)域清零,在復(fù)位啟動后,將新版本的控制平面程序加載到所述第一內(nèi)存區(qū)域,并運行所述第一內(nèi)存區(qū)域中的所述新版本的控制平面程序。
2.根據(jù)權(quán)利要求1所述的路由器,其特征在于,所述第二內(nèi)存區(qū)域還用于存儲所述控制平面CPU生成并下發(fā)的轉(zhuǎn)發(fā)表項,所述數(shù)據(jù)平面CPU還用于按照所述第二內(nèi)存區(qū)域中的轉(zhuǎn)發(fā)表項轉(zhuǎn)發(fā)數(shù)據(jù)報文,則,所述控制平面CPU包括: 判斷模塊,用于判斷新版本的控制平面程序?qū)?yīng)的新轉(zhuǎn)發(fā)表項與升級前的舊版本的控制平面程序?qū)?yīng)的舊轉(zhuǎn)發(fā)表項的格式是否相同; 轉(zhuǎn)化模塊,用于在所述判斷模塊的判斷結(jié)果為所述新轉(zhuǎn)發(fā)表項與舊轉(zhuǎn)發(fā)表項的格式不同時,對所述第二內(nèi)存區(qū)域中的舊轉(zhuǎn)發(fā)表項進行格式轉(zhuǎn)化,以符合所述新轉(zhuǎn)發(fā)表項的格式。
3.根據(jù)權(quán)利要求2所述的路由器,其特征在于,所述控制平面CPU還包括:寫入模塊,其中: 所述判斷模塊還用于在判斷出所述新轉(zhuǎn)發(fā)表項與舊轉(zhuǎn)發(fā)表項的格式相同之后,或者在所述轉(zhuǎn)化模塊對所述第二內(nèi)存區(qū)域中的舊轉(zhuǎn)發(fā)表項進行轉(zhuǎn)化之后,判斷所述數(shù)據(jù)平面程序是否需要升級; 所述寫入模塊用于在所述判斷模塊判斷所述數(shù)據(jù)平面程序需要升級時,將新版本的數(shù)據(jù)平面程序?qū)懭胨龅诙?nèi)存區(qū)域中的預(yù)留區(qū)域,所述預(yù)留區(qū)域與舊版本的數(shù)據(jù)平面程序的保存位置相獨立。
4.根據(jù)權(quán)利要求3所述的路由器,其特征在于,所述數(shù)據(jù)平面CPU包括至少兩個CPU核心,所述至少兩個CPU核心逐個從舊版本的數(shù)據(jù)平面程序切換至新版本的數(shù)據(jù)平面程序,其中,所述逐個是指一個CPU核心切換至新版本的數(shù)據(jù)平面程序后,下一個CPU核心再切換。
5.根據(jù)權(quán)利要求4所述的路由器,其特征在于,所述控制平面CPU還包括: 刪除模塊,用于在所述數(shù)據(jù)平面CPU包含的所有CPU核心均切換至新版本的數(shù)據(jù)平面程序后,刪除所述第二內(nèi)存區(qū)域中的所述舊版本的數(shù)據(jù)平面程序。
6.一種路由器的軟件升級方法,所述路由器通過中央處理單元CPU轉(zhuǎn)發(fā)數(shù)據(jù)報文,其特征在于,所述路由器包括多核CPU以及相互獨立的第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,所述多核CPU包括控制平面CPU和數(shù)據(jù)平面CPU,所述方法包括: 在所述第一 內(nèi)存區(qū)域存儲控制平面程序,所述控制平面程序包括路由協(xié)議的相關(guān)程序,所述控制平面CPU使用所述第一內(nèi)存區(qū)域中的控制平面程序處理協(xié)議報文;在所述第二存儲區(qū)域存儲數(shù)據(jù)平面程序,所述數(shù)據(jù)平面程序包括數(shù)據(jù)報文轉(zhuǎn)發(fā)處理的相關(guān)程序,所述數(shù)據(jù)平面CPU使用所述第二內(nèi)存區(qū)域中的數(shù)據(jù)平面程序處理數(shù)據(jù)報文; 所述控制平面CPU在所述路由器需要進行軟件升級時,復(fù)位自身并將所述第一內(nèi)存區(qū)域清零; 所述控制平面CPU在復(fù)位啟動后,將新版本的控制平面程序加載到所述第一內(nèi)存區(qū)域,并運行所述第一內(nèi)存區(qū)域中的所述新版本的控制平面程序。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述運行所述第一內(nèi)存區(qū)域中的所述新版本的控制平面程序之后,還包括: 所述控制平面CPU判斷新版本的控制平面程序?qū)?yīng)的新轉(zhuǎn)發(fā)表項與升級前的舊版本的控制平面程序?qū)?yīng)的舊轉(zhuǎn)發(fā)表項的格式是否相同; 若判斷出所述新轉(zhuǎn)發(fā)表項與舊轉(zhuǎn)發(fā)表項的格式不同,則所述控制平面CPU對所述第二內(nèi)存區(qū)域中的舊轉(zhuǎn)發(fā)表項進行格式轉(zhuǎn)化,以符合所述新轉(zhuǎn)發(fā)表項的格式。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,在所述控制平面CPU對所述第二內(nèi)存區(qū)域中的舊轉(zhuǎn)發(fā)表項進行格式轉(zhuǎn)化之后,或者,在判斷出所述新轉(zhuǎn)發(fā)表項與舊轉(zhuǎn)發(fā)表項的格式相同之后,還包括: 判斷所述數(shù)據(jù)平面程序是否需要升級; 若判斷出所述數(shù)據(jù)平面程序需要升級,則所述控制平面CPU將新版本的數(shù)據(jù)平面程序?qū)懭胨龅诙?nèi)存區(qū)域中的預(yù)留區(qū)域,所述預(yù)留區(qū)域與舊版本的數(shù)據(jù)平面程序的保存位置相獨立。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,在所述控制平面CPU將新版本的數(shù)據(jù)平面程序?qū)懭胨龅诙?nèi)存區(qū)域中的預(yù)留區(qū)域之后,還包括: 所述數(shù)據(jù)平面CPU包含的至少兩個CPU核心逐個從舊版本的數(shù)據(jù)平面程序切換至新版本的數(shù)據(jù)平面程序,其中,所述逐個是指一個CPU核心切換至新版本的數(shù)據(jù)平面程序后,下一個CPU核心再切換。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,在所述數(shù)據(jù)平面CPU包含的所有CPU核心均切換至新版本的數(shù)據(jù)平面程序之后,還包括: 所述控制平面CPU刪除所述第二內(nèi)存區(qū)域中的所述舊版本的數(shù)據(jù)平面程序。
【文檔編號】H04L12/701GK103581008SQ201210277932
【公開日】2014年2月12日 申請日期:2012年8月7日 優(yōu)先權(quán)日:2012年8月7日
【發(fā)明者】魏巍 申請人:杭州華三通信技術(shù)有限公司