專利名稱:一種路由器虛擬驅(qū)動模塊的動態(tài)加載與控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)通信領(lǐng)域中的基于嵌入式實(shí)時操作系統(tǒng)的網(wǎng)絡(luò)路由技術(shù),特別涉及一種多用戶條件下分布式高性能路由器虛擬驅(qū)動模塊的動態(tài)加載與控制方法。
背景技術(shù):
目前,雖然互聯(lián)網(wǎng)核心段的傳輸速率對于支持多媒體業(yè)務(wù)或者大規(guī)模的對稱業(yè)務(wù)等不會產(chǎn)生傳輸上的瓶頸,而且流媒體等多元化業(yè)務(wù)即將成為網(wǎng)絡(luò)的主流業(yè)務(wù)。但網(wǎng)絡(luò)接入段設(shè)備傳輸速率慢、接入過程復(fù)雜、接入段流速不穩(wěn)定以及接入段不能為流媒體業(yè)務(wù)提供恒定的網(wǎng)絡(luò)帶寬,已成為多元化混合業(yè)務(wù)有效傳輸與開展的主要問題。
最近在國家寬帶信息網(wǎng)(3Tnet)示范工程中,采用了具有大規(guī)模接入?yún)R聚功能的路由器(Access Convergence Router,ACR)實(shí)現(xiàn)網(wǎng)絡(luò)的一體化接入,該設(shè)備的優(yōu)點(diǎn)在于在確保用戶端到端帶寬的情況下,方便對接入段設(shè)備實(shí)施管理,而且便于引入新的業(yè)務(wù)以及新的運(yùn)營策略。利用ACR實(shí)現(xiàn)網(wǎng)絡(luò)業(yè)務(wù)的接入如圖1所示,其中ACR設(shè)備由接入?yún)R聚路由器主交換機(jī)(Access ConvergenceRouter Switcher,ACR-S)、以太類合分路器(Ethernet MultiplexerDemultiplexer,EMD)以及遠(yuǎn)端接口單元(Remote Interface Unit,RIU)組成。雖然在接入段,各種業(yè)務(wù)仍然采用IP數(shù)據(jù)包的封裝格式,但是在RIU以及EMD上,并不對數(shù)據(jù)進(jìn)行交換,而是由ACR-S完成數(shù)據(jù)的三層交換,然后直接進(jìn)入骨干網(wǎng)進(jìn)行傳輸。由于核心網(wǎng)的傳輸速率已經(jīng)足夠高,故在核心網(wǎng)段,并不需要對流媒體業(yè)務(wù)保持恒定的資源占用,而是繼續(xù)采用高帶寬的突發(fā)式傳輸方式;在接入段的下行過程中,業(yè)務(wù)經(jīng)過高速率的鏈路向低速率的鏈路傳遞,而且在整個接入段不進(jìn)行三層交換,只是經(jīng)過EMD以及RIU進(jìn)行分路處理,易于實(shí)現(xiàn)接入段對媒體業(yè)務(wù)提供固定的鏈路資源。
ACR-S作為ACR的核心交換主機(jī),不但要完成接入段的業(yè)務(wù)接入,也要實(shí)現(xiàn)對EMD,RIU的中心化管理與配置,同時需要完成城域網(wǎng)上的數(shù)據(jù)交換,因此ACR-S是能夠?qū)崿F(xiàn)遠(yuǎn)端控制與配置的高性能路由器。
由于高性能路由器一般采用分布式結(jié)構(gòu),因此必須解決在主處理器上準(zhǔn)確、快速感知并有效控制整個路由器對外接口單元狀態(tài)的問題,包括1、接入ACR系統(tǒng)中的用戶數(shù)量不確定。嵌入式操作系統(tǒng)對驅(qū)動通常的加載方式是將一個驅(qū)動程序作為一個整體模塊,在需要的時候加入內(nèi)核工作。由于不確定數(shù)量的用戶在接入時,使得某一時刻內(nèi)核中注冊的接口單元數(shù)量與狀態(tài)都是不確定的,如果實(shí)施盡可能多的一次性加載,會造成內(nèi)核過大,系統(tǒng)資源冗余開銷巨大,極大影響了系統(tǒng)的性能。因此使用單一內(nèi)核,實(shí)現(xiàn)對未知數(shù)量的真實(shí)用戶接口對數(shù)據(jù)包的收發(fā)行為的虛擬。
2、嵌入式操作系統(tǒng)中,驅(qū)動程序是以內(nèi)核模塊(Module)的形式運(yùn)行在內(nèi)核空間的,在該系統(tǒng)中,需要注冊多個接口的虛擬驅(qū)動在操作系統(tǒng)中,模擬事實(shí)上的用戶接口對數(shù)據(jù)包的收發(fā)行為,屏蔽底層硬件細(xì)節(jié),為上層協(xié)議棧提供標(biāo)準(zhǔn)的驅(qū)動程序接口。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是在多用戶接入的條件下,由嵌入式操作系統(tǒng)的單內(nèi)核模塊,基于ACR系統(tǒng)的實(shí)際需要,提供一種模擬多個接口的虛擬驅(qū)動的動態(tài)加載與控制方法。完成對數(shù)據(jù)平面實(shí)際多接口收發(fā)數(shù)據(jù)包的收發(fā)行為的模擬,并且直接為運(yùn)行于主處理單元的上層協(xié)議棧或者路由協(xié)議提供統(tǒng)一的標(biāo)準(zhǔn)接口,使上層協(xié)議軟件的移植和功能擴(kuò)展時不考慮底層硬件實(shí)現(xiàn)的技術(shù)細(xì)節(jié)。同時,本發(fā)明能夠為整個系統(tǒng)提供并行的研發(fā)與調(diào)試提供基礎(chǔ),縮短系統(tǒng)調(diào)試周期和產(chǎn)品的研發(fā)周期。
為了解決以上的實(shí)際需要,本發(fā)明的主要內(nèi)容可以從兩個方面予以說明,一是單模塊下多接口虛擬的控制方法與配置方法,稱之為本發(fā)明的控制部分;二是各個接口對數(shù)據(jù)包的收發(fā),稱之為本發(fā)明的數(shù)據(jù)交換部分??刂撇糠种饕藛蝺?nèi)核模塊根據(jù)系統(tǒng)工作的系統(tǒng)數(shù)據(jù)維護(hù)模塊的狀態(tài)指示,對于多虛擬接口的動態(tài)注冊、撤銷以及狀態(tài)配置與管理方法,同時由于上層協(xié)議棧在下發(fā)協(xié)議包的同時,需要為各個虛擬設(shè)備提供相應(yīng)的發(fā)送隊列的管理機(jī)制。數(shù)據(jù)交換部分主要是包括了完成虛擬驅(qū)動與本系統(tǒng)中的內(nèi)部通信模塊之間的數(shù)據(jù)交換,與上層協(xié)議棧之間的數(shù)據(jù)交換,同時需要接收系統(tǒng)數(shù)據(jù)維護(hù)模塊發(fā)送的控制指令并且完成相應(yīng)的控制操作。
具體地,本發(fā)明控制部分的主要內(nèi)容有1、一種多用戶條件下分布式高性能路由器虛擬驅(qū)動模塊的動態(tài)加載與控制方法,內(nèi)部通信模塊接收來自系統(tǒng)數(shù)據(jù)維護(hù)模塊發(fā)來的低層硬件的實(shí)際狀態(tài)的指令,調(diào)用虛擬驅(qū)動模塊中的基本設(shè)備的ioct操作,對操作系統(tǒng)進(jìn)行設(shè)備操作。
2、調(diào)用虛擬驅(qū)動模塊中的基本設(shè)備的ioct操作包括在單內(nèi)核模塊中創(chuàng)建虛擬設(shè)備和撤銷虛擬設(shè)備的操作。
創(chuàng)建設(shè)備操作包括1)、ACR系統(tǒng)中的RIU探測到用戶請求,則需要從數(shù)據(jù)平面通過內(nèi)部通信模塊向運(yùn)行于控制平面的系統(tǒng)數(shù)據(jù)維護(hù)模塊通告需要注冊設(shè)備的消息;2)通過基本設(shè)備的ioctl操作,遞交給內(nèi)核模塊要注冊設(shè)備的名稱、類型等信息,向操作系統(tǒng)注冊相應(yīng)名稱的設(shè)備,即虛擬設(shè)備;3)、創(chuàng)建對應(yīng)于該設(shè)備的發(fā)送隊列,用于存儲由上層協(xié)議棧發(fā)送的以skb格式封裝的需要下發(fā)的協(xié)議報文;4)、設(shè)備的操作包括ioctl操作、接收操作、發(fā)送操作、Down操作和Up等操作;撤銷設(shè)備操作包括1)、ACR系統(tǒng)中的RIU探測到用戶從ACR上撤銷,則需要從數(shù)據(jù)平面通過內(nèi)部通信模塊向運(yùn)行于控制平面的系統(tǒng)數(shù)據(jù)維護(hù)模塊通告需要撤銷的消息;2)、系統(tǒng)數(shù)據(jù)維護(hù)模塊則向內(nèi)部通信模塊發(fā)送相應(yīng)的指令,在內(nèi)部通信模塊中,通過基本設(shè)備的ioctl操作,撤銷相應(yīng)名稱的設(shè)備并完成對對應(yīng)設(shè)備的發(fā)送隊列進(jìn)行清空,同時回收與該設(shè)備有關(guān)的資源,而且將該設(shè)備的節(jié)點(diǎn)從設(shè)備隊列中刪除,最后從操作系統(tǒng)中撤銷該設(shè)備;3、在操作系統(tǒng)對模塊進(jìn)行初始化過程中,首先需要完成基本設(shè)備的注冊,并定義基本設(shè)備的ioct操作。
4、本發(fā)明的控制部分的異常處理機(jī)制,即在出現(xiàn)異常時,需要對各種隊列進(jìn)行清空處理,關(guān)閉相應(yīng)的套接字(Socket)描述符以及從操作系統(tǒng)內(nèi)核中撤銷相應(yīng)的設(shè)備。
5、一種數(shù)據(jù)交換的方法,包括
1)、虛擬驅(qū)動模塊從內(nèi)部通信模塊中接收來自數(shù)據(jù)平面的協(xié)議報文,內(nèi)部通信模塊通過相應(yīng)虛擬設(shè)備的ioctl的接收操作將數(shù)據(jù)與相應(yīng)的設(shè)備信息封裝上交給運(yùn)行于主處理單元的上層協(xié)議棧。
A1、在內(nèi)部通信模塊向虛擬驅(qū)動模塊通過相應(yīng)虛擬設(shè)備的ioctl調(diào)用傳遞數(shù)據(jù)時,在ioctl操作中,通過copy_from_user()函數(shù)完成用戶空間數(shù)據(jù)的虛擬內(nèi)存向內(nèi)核虛擬內(nèi)存的映射;A2、將相應(yīng)的數(shù)據(jù)拷貝至內(nèi)核空間;A3、通過虛擬設(shè)備的接收操作將數(shù)據(jù)與相應(yīng)的設(shè)備信息封裝為skb格式;A4、由標(biāo)準(zhǔn)函數(shù)netif_rx()上交給運(yùn)行于主處理單元的上層協(xié)議棧。
2)、上層協(xié)議棧向下發(fā)送協(xié)議報文時,通過該設(shè)備的發(fā)送操作,封裝報文,將報文放入對應(yīng)于該設(shè)備的發(fā)送隊列的隊尾,等待內(nèi)部通信模塊從虛擬驅(qū)動模塊中以輪詢方式從隊頭取出。
B1、通過dev_start_xmit()函數(shù)下發(fā)以skb格式封裝的報文;B2、在本發(fā)明的虛擬驅(qū)動模塊中,查找相應(yīng)的設(shè)備名稱;B3、搜索設(shè)備隊列,判斷相應(yīng)的設(shè)備名稱是否在設(shè)備隊列中,若在隊列中,則執(zhí)行步驟B4,否則對報文做丟棄處理;B4、將對應(yīng)的skb報文放入對應(yīng)設(shè)備的發(fā)送隊列的隊尾,等待內(nèi)部通信模塊以輪詢的方式將該報文取出。
輪詢方式算法包括C1通過相應(yīng)設(shè)備的ioctl將內(nèi)存空間指針遞入虛擬驅(qū)動模塊,申請內(nèi)存空間;C2通過ioctl操作,通過copy_from_user()函數(shù)完成內(nèi)存映射;C3判斷相應(yīng)設(shè)備的發(fā)送隊列中的skb節(jié)點(diǎn)上的數(shù)據(jù)長度是否小于或等于申請的內(nèi)存空間,如果是,則執(zhí)行步驟B244;如果否,則執(zhí)行步驟B241,重新申請;C4通過copy_to_user()將相應(yīng)的報文傳遞至用戶空間;C5從發(fā)送隊列中刪除該skb節(jié)點(diǎn)。
C2通過ioctl操作,通過copy_from_user()函數(shù)完成內(nèi)存映射;C3判斷相應(yīng)設(shè)備的發(fā)送隊列中的skb節(jié)點(diǎn)上的數(shù)據(jù)長度是否小于或等于申請的內(nèi)存空間,如果是,則執(zhí)行步驟B244;如果否,則執(zhí)行步驟B241,重新申請;C4通過copy_to_user()將相應(yīng)的報文傳遞至用戶空間;C5從發(fā)送隊列中刪除該skb節(jié)點(diǎn)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)在多用戶接入的條件下,基于嵌入式操作系統(tǒng)的單內(nèi)核模塊,根據(jù)ACR系統(tǒng)的實(shí)際需要,在主處理器中,實(shí)現(xiàn)了能夠模擬多個接口的虛擬驅(qū)動的動態(tài)加載與狀態(tài)控制。完成對數(shù)據(jù)平面實(shí)際多接口收發(fā)數(shù)據(jù)包的收發(fā)行為的模擬,并且直接為運(yùn)行于主處理單元的上層協(xié)議?;蛘呗酚蓞f(xié)議提供統(tǒng)一的標(biāo)準(zhǔn)接口,使上層協(xié)議軟件的移植和功能擴(kuò)展時不考慮底層硬件實(shí)現(xiàn)的技術(shù)細(xì)節(jié)。同時,本發(fā)明能夠為整個系統(tǒng)提供并行的研發(fā)與調(diào)試提供基礎(chǔ),縮短系統(tǒng)調(diào)試周期和產(chǎn)品的研發(fā)周期。
圖1是ACR實(shí)現(xiàn)網(wǎng)絡(luò)業(yè)務(wù)的接入的示意圖。
圖2是本發(fā)明方法在整個ACR系統(tǒng)中的應(yīng)用環(huán)境。
圖3是多個虛擬接口在嵌入式操作系統(tǒng)中的注冊與撤銷的方法示意圖。
圖4是本發(fā)明方法的結(jié)構(gòu)示意圖。
圖5是本發(fā)明的設(shè)備隊列與發(fā)送隊列結(jié)構(gòu)示意圖。
圖6是本發(fā)明需要完成的外部接口示意圖。
圖7是本發(fā)明中的虛擬驅(qū)動向內(nèi)部通信模塊的數(shù)據(jù)傳遞算法流程。
具體實(shí)施例方式
本發(fā)明所提供的一種多用戶條件下分布式高性能路由器虛擬驅(qū)動模塊的動態(tài)加載與控制的方法,為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
首先,對本發(fā)明的系統(tǒng)環(huán)境和方法進(jìn)行總體描述如圖2圖和圖3所示,ACR系統(tǒng)的應(yīng)用環(huán)境中,主要包括ACR-S主處理單元和ACR-S從處理單元,在它們之間的是ACR-S內(nèi)部通信模塊。對照圖3,其中的數(shù)據(jù)平面的實(shí)際硬件接口與圖2中的ACR-S從處理單元相對應(yīng),虛擬驅(qū)動模塊處于ACR-S主處理單元。系統(tǒng)數(shù)據(jù)模塊與內(nèi)部通信模塊傳遞下發(fā)命令包括注冊、撤銷設(shè)備;UP、DOWN接口。數(shù)據(jù)平面的實(shí)際硬件接口向內(nèi)部通信模塊上報狀態(tài)。內(nèi)部通信模塊與虛擬驅(qū)動模塊之間通過基設(shè)備的ioctl和設(shè)備的ioctl進(jìn)行操作。在虛擬驅(qū)動模塊中完成,注冊新設(shè)備、撤銷設(shè)備、UP接口和DOWN操作。
本發(fā)明涉及到在多用戶接入條件下,需要在ACR-S的主處理器上完成對通過遠(yuǎn)端接口單元RIU接入的多個用戶接口進(jìn)行模擬,該模擬是基于嵌入式實(shí)時操作系統(tǒng),以驅(qū)動程序的形式實(shí)現(xiàn)。由于用戶接入的數(shù)量未知,而且各個實(shí)際接口的狀態(tài)也會不斷發(fā)生變化。因此,本發(fā)明需要完成由單內(nèi)核模塊實(shí)現(xiàn)對多個實(shí)際接口數(shù)據(jù)包收發(fā)行為的動態(tài)虛擬,那么首先需要以驅(qū)動的形式完成各個虛擬接口的動態(tài)加載或者撤銷,同時,需要根據(jù)系統(tǒng)數(shù)據(jù)維護(hù)模塊下發(fā)的指令完成對其狀態(tài)的控制與更新。
因此,在實(shí)施過程中,可以從結(jié)構(gòu)上將本發(fā)明分為兩個部分來實(shí)施,一是需要完成控制部分,二是需要完成數(shù)據(jù)傳遞功能的數(shù)據(jù)交換部分。
本發(fā)明所提供的方法包括一、本發(fā)明控制部分的實(shí)施如圖3所示,內(nèi)部通信模塊和系統(tǒng)數(shù)據(jù)維護(hù)模塊位于用戶空間,虛擬驅(qū)動模塊位于內(nèi)核空間;同時內(nèi)部通信模塊、系統(tǒng)數(shù)據(jù)維護(hù)模塊、虛擬驅(qū)動模塊位于控制平面,數(shù)據(jù)平面的實(shí)際硬件接口位于數(shù)據(jù)平面。
具體步驟包括步驟1如圖4所示,在ACR路由器啟動時,就在操作系統(tǒng)中加載該內(nèi)核模塊,而且完成該內(nèi)核模塊的初始化。在初始化過程中,完成整個基本設(shè)備向操作系統(tǒng)注冊,而且初始化一個雙向鏈表來鏈接各個設(shè)備的設(shè)備隊列。
基本設(shè)備只包括一個操作,即基本設(shè)備的ioctl操作,而且該設(shè)備始終處于Down狀態(tài)。其中基本設(shè)備的ioctl操作主要是根據(jù)由內(nèi)部通信模塊通過該基本設(shè)備的ioctl調(diào)用,將要向設(shè)備注冊的設(shè)備名遞交內(nèi)核模塊。在該操作中向操作系統(tǒng)注冊相應(yīng)名稱的設(shè)備,即虛擬設(shè)備,如圖4所示。根據(jù)接入用戶的接口類型,初始狀態(tài)等完成初始化,并且將該設(shè)備加入該內(nèi)核模塊的如圖5所示的設(shè)備隊列中。
步驟2如圖4所示,當(dāng)內(nèi)部通信模塊接收到來自系統(tǒng)數(shù)據(jù)維護(hù)模塊關(guān)于數(shù)據(jù)平面上低層硬件的實(shí)際狀態(tài)的指令時,根據(jù)低層硬件的實(shí)際狀態(tài),內(nèi)部通信模塊調(diào)用基本設(shè)備的ioctl操作完成創(chuàng)建設(shè)備指令或注銷設(shè)備指令,如果是創(chuàng)建設(shè)備指令進(jìn)入步驟3;如果是注銷設(shè)備指令,則進(jìn)入步驟4;如果是修改狀態(tài)指令,則進(jìn)入步驟5;否則進(jìn)入步驟6執(zhí)行異常處理。
步驟3執(zhí)行創(chuàng)建設(shè)備指令。如圖4所示,根據(jù)整個ACR的運(yùn)行機(jī)制,RIU如果探測到有用戶接入時,通過內(nèi)部通信模塊向位于主處理器的控制平面報告,由控制平面的系統(tǒng)數(shù)據(jù)維護(hù)模塊通過內(nèi)部通信模塊向位于內(nèi)核空間的虛擬驅(qū)動模塊向操作系統(tǒng)進(jìn)行設(shè)備注冊,內(nèi)部通信模塊接收到來自系統(tǒng)數(shù)據(jù)維護(hù)模塊關(guān)于數(shù)據(jù)平面上低層硬件的實(shí)際狀態(tài)的指令,調(diào)用基本設(shè)備的ioctl操作,根據(jù)設(shè)備名稱完成各個虛擬設(shè)備的注冊任務(wù),同時完成虛擬設(shè)備的初始化任務(wù),虛擬驅(qū)動模塊完成具有相應(yīng)名稱的設(shè)備的注冊以后,轉(zhuǎn)到步驟8結(jié)束操作其中每注冊一個虛擬設(shè)備時,同時定義該接口的打開、關(guān)閉、ioctl操作等,并且初始化對應(yīng)該設(shè)備的發(fā)送隊列。在每一個虛擬設(shè)備注冊時,主要完成設(shè)備的初始化,在設(shè)備的初始化中,需要創(chuàng)建對應(yīng)于該設(shè)備的如圖5所示的發(fā)送隊列,用于存儲由上層協(xié)議棧發(fā)送的以skb格式封裝的需要下發(fā)的協(xié)議報文。設(shè)備的主要操作包括ioctl操作、接收操作、發(fā)送操作、Down操作以及Up操作等。其中ioctl操作主要完成向運(yùn)行于用戶空間的內(nèi)部通信模塊數(shù)據(jù)報文的交換,狀態(tài)變化指示以及配置(如Down,Up,IP地址等等),這部分的主要內(nèi)容由本發(fā)明的數(shù)據(jù)交換部分來完成。
接收操作主要將從內(nèi)部通信模塊中接收的來自于數(shù)據(jù)平面的協(xié)議報文,并封裝成協(xié)議棧需要的skb格式后,通過標(biāo)準(zhǔn)接口netif_rx()函數(shù)交上層協(xié)議棧。
發(fā)送操作主要是接收上層以標(biāo)準(zhǔn)接口dev_start_xmit()函數(shù)下發(fā)的以skb格式封裝的協(xié)議報文,并根據(jù)設(shè)備名稱在設(shè)備隊列中查找相應(yīng)的設(shè)備,并且將每下發(fā)的skb報文加入對應(yīng)設(shè)備的發(fā)送隊列的尾部。
Down操作以及Up操作主要是根據(jù)設(shè)備物理接口上報給主處理器上的系統(tǒng)數(shù)據(jù)維護(hù)模塊的狀態(tài)指令,系統(tǒng)數(shù)據(jù)維護(hù)模塊以消息隊列的方式告知內(nèi)部通信模塊,并且由內(nèi)部通信模塊通過相應(yīng)設(shè)備的ioctl操作來修改虛擬接口的狀態(tài),使其與實(shí)際的物理設(shè)備接口的狀態(tài)保持一致。
步驟4執(zhí)行設(shè)備的撤銷指令。從主控制平面內(nèi)的操作系統(tǒng)中撤銷一個虛擬設(shè)備的過程。該過程可以簡要描述如下一旦ACR系統(tǒng)中的RIU探測到用戶從ACR上撤銷,則需要從數(shù)據(jù)平面通過內(nèi)部通信模塊向運(yùn)行于控制平面的系統(tǒng)數(shù)據(jù)維護(hù)模塊通告需要撤銷的消息。系統(tǒng)數(shù)據(jù)維護(hù)模塊則向內(nèi)部通信模塊發(fā)送相應(yīng)的指令,在內(nèi)部通信模塊中,通過基本設(shè)備的ioctl操作,撤銷相應(yīng)名稱的設(shè)備,在對應(yīng)于該命令的ioctl操作,需要完成對對應(yīng)設(shè)備的發(fā)送隊列進(jìn)行清空,同時回收與該設(shè)備有關(guān)的資源,而且將該設(shè)備的節(jié)點(diǎn)從設(shè)備隊列中刪除,最后從操作系統(tǒng)中撤銷該設(shè)備。
步驟5執(zhí)行設(shè)備的狀態(tài)控制與更新指令。如圖3所示,根據(jù)系統(tǒng)數(shù)據(jù)維護(hù)模塊下達(dá)的相應(yīng)的實(shí)際低層硬件的狀態(tài)指令,由內(nèi)部通信模塊通過相應(yīng)虛擬設(shè)備的ioctl的UP和DOWN操作向虛擬驅(qū)動內(nèi)核模塊發(fā)送相應(yīng)設(shè)備名稱狀態(tài)修改指令,在內(nèi)核模塊中完成相應(yīng)設(shè)備的狀態(tài)修改,保持虛擬設(shè)備的狀態(tài)與位于數(shù)據(jù)平面上的實(shí)際物理設(shè)備接口的狀態(tài)一致,完成后轉(zhuǎn)到步驟8結(jié)束操作。
步驟6如圖4所示,本發(fā)明提供了控制部分的異常處理機(jī)制,即在出現(xiàn)異常時,刪除模塊需要對各種隊列進(jìn)行清空處理,關(guān)閉相應(yīng)的套接字(Socket)描述符以及從操作系統(tǒng)內(nèi)核中注銷相應(yīng)的設(shè)備。
步驟7結(jié)束操作。
其中在步驟4和步驟5中對設(shè)備隊列和發(fā)送隊列的操作,如圖5所示,有新設(shè)備加入隊列,則將其鏈入隊列尾部,建立相關(guān)隊列頭,可以正常加入skb,刪除skb。在設(shè)備隊列頭部可以完成三種操作增加新設(shè)備、給設(shè)備添加skb、刪除設(shè)備中skb數(shù)據(jù);如果有發(fā)送給設(shè)備0的skb,則加入鏈表尾部、如果收到刪除設(shè)備1中的skb,則完成刪除工作。
二、本發(fā)明數(shù)據(jù)交換部分的實(shí)施如圖6所示,內(nèi)部通信模塊位于用戶空間,虛擬驅(qū)動模塊和協(xié)議棧位于內(nèi)核空間中。
本部分完成兩個外部接口主要有一個是虛擬驅(qū)動模塊與內(nèi)部通信模塊的接口,該接口主要完成操作系統(tǒng)用戶空間與內(nèi)核空間之間的協(xié)議數(shù)據(jù)報文的交換。另一個是虛擬驅(qū)動模塊與運(yùn)行于內(nèi)核空間的上層協(xié)議棧,該接口主要完成協(xié)議數(shù)據(jù)報文的封裝與分解。然后完成數(shù)據(jù)的順利傳遞。
如圖6所示,具體步驟包括步驟8如果是上傳的協(xié)議報文則執(zhí)行步驟9,如果是向下發(fā)送的協(xié)議報文執(zhí)行步驟10。
步驟9虛擬驅(qū)動模塊從內(nèi)部通信模塊中接收來自數(shù)據(jù)平面的協(xié)議報文。內(nèi)部通信模塊通過相應(yīng)設(shè)備的ioctl系統(tǒng)調(diào)用,將協(xié)議報文的所在的用戶空間的虛擬內(nèi)存地址指針以及數(shù)據(jù)報文的長度等信息遞交虛擬驅(qū)動模塊的ioctl操作。在虛擬驅(qū)動的ioctl操作中,通過copy_from_user()函數(shù)完成用戶空間數(shù)據(jù)的虛擬內(nèi)存向內(nèi)核虛擬內(nèi)存的映射,并且將相應(yīng)長度的數(shù)據(jù)拷貝至內(nèi)核空間。通過虛擬設(shè)備的接收操作將數(shù)據(jù)與相應(yīng)的設(shè)備信息封裝為skb格式,由標(biāo)準(zhǔn)函數(shù)netif_rx()上交給運(yùn)行于主處理單元的上層協(xié)議棧。
步驟10當(dāng)上層協(xié)議棧向下發(fā)送協(xié)議報文時,通過該設(shè)備的發(fā)送操作,利用標(biāo)準(zhǔn)接口函數(shù)dev_start_xmit()函數(shù)下發(fā)以skb格式封裝的報文。在該設(shè)備的發(fā)送操作中,從設(shè)備隊列中查找相應(yīng)的設(shè)備名稱,將對應(yīng)的skb報文放入對應(yīng)于該設(shè)備的發(fā)送隊列的隊尾,等待內(nèi)部通信模塊從虛擬驅(qū)動模塊中取出,并交ACR數(shù)據(jù)平面處理。虛擬驅(qū)動模塊向運(yùn)行于用戶空間的內(nèi)部通信模塊遞交協(xié)議報文的流程如圖7所示,內(nèi)部通信模塊按照設(shè)備隊列進(jìn)行輪詢,通過相應(yīng)設(shè)備的ioctl操作,將足夠大的內(nèi)存空間指針遞入虛擬驅(qū)動模塊,通過copy_from_user()函數(shù)完成內(nèi)存映射,并判斷相應(yīng)設(shè)備的發(fā)送隊列中的skb節(jié)點(diǎn)上的數(shù)據(jù)長度是否小于該內(nèi)存空間,若滿足,則通過copy_to_user()將相應(yīng)的報文傳遞至用戶空間。否則,通知用戶空間,申請相應(yīng)大小的虛擬內(nèi)存空間,重新讀取相應(yīng)的數(shù)據(jù),完成后,從發(fā)送隊列中刪除該skb節(jié)點(diǎn)。
步驟11在虛擬驅(qū)動模塊中的設(shè)備隊列中,查找相應(yīng)的設(shè)備名稱,將對應(yīng)的skb報文放入對應(yīng)設(shè)備的發(fā)送隊列的隊尾,等待內(nèi)部通信模塊以輪詢的方式將該報文取出。若不能查到相對應(yīng)的設(shè)備,則丟棄該報文。
其中步驟11中的內(nèi)部通信模塊與虛擬驅(qū)動模塊的輪詢方式的數(shù)據(jù)傳遞算法,如圖7所示,具體包括步驟步驟701~702從數(shù)組頭節(jié)點(diǎn)讀取數(shù)組節(jié)點(diǎn)。
步驟703判斷數(shù)組輪詢是否完畢,如果完畢則返回步驟701重新讀取數(shù)組節(jié)點(diǎn);如果完畢則進(jìn)入下一步。
步驟704判斷讀到的頭節(jié)點(diǎn)是否有效,如果無效則返回步驟702重新讀??;如果有效則進(jìn)入下一步。
步驟705從取到的數(shù)據(jù)中取得接口的名稱。
步驟706申請存放數(shù)據(jù)的空間。
步驟707填寫ifreq->name為接口名稱,data域為包含申請空間及長度和flag的結(jié)構(gòu)指針。
步驟708執(zhí)行ioctl調(diào)用。
步驟709判斷Flag的值的真假。為真則執(zhí)行步驟710;為假則進(jìn)入步711。
步驟710調(diào)整緩沖區(qū)長度,并返回步驟708步驟711判斷Len值是否為零,如果為零則返回步驟702;不為零則進(jìn)入下一步。
步驟712根據(jù)接口名稱填寫內(nèi)部通信模塊頭。
步驟713發(fā)送數(shù)據(jù)至單板,并返回步驟706。
本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種多用戶條件下分布式高性能路由器虛擬驅(qū)動模塊的動態(tài)加載與控制方法,其特征在于,內(nèi)部通信模塊接收來自系統(tǒng)數(shù)據(jù)維護(hù)模塊發(fā)來的低層硬件的實(shí)際狀態(tài)的指令,調(diào)用虛擬驅(qū)動模塊中的基本設(shè)備的ioct操作,對操作系統(tǒng)進(jìn)行設(shè)備操作。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,調(diào)用虛擬驅(qū)動模塊中的基本設(shè)備的ioct操作進(jìn)一步包括在單內(nèi)核模塊中創(chuàng)建虛擬設(shè)備和撤銷虛擬設(shè)備的操作。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在操作系統(tǒng)對模塊進(jìn)行初始化過程中,首先需要完成基本設(shè)備的注冊,并定義基本設(shè)備的ioct操作。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,創(chuàng)建設(shè)備操作進(jìn)一步包括1)、ACR系統(tǒng)中的RIU探測到用戶請求,則需要從數(shù)據(jù)平面通過內(nèi)部通信模塊向運(yùn)行于控制平面的系統(tǒng)數(shù)據(jù)維護(hù)模塊通告需要注冊設(shè)備的消息;2)通過基本設(shè)備的ioct1操作,遞交給內(nèi)核模塊要注冊設(shè)備的名稱、類型等信息,向操作系統(tǒng)注冊相應(yīng)名稱的設(shè)備,即虛擬設(shè)備;3)、創(chuàng)建對應(yīng)于該設(shè)備的發(fā)送隊列,用于存儲由上層協(xié)議棧發(fā)送的以skb格式封裝的需要下發(fā)的協(xié)議報文;4)、設(shè)備的操作包括ioct1操作、接收操作、發(fā)送操作、Down操作和Up等操作。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,撤銷設(shè)備操作進(jìn)一步包括1)、ACR系統(tǒng)中的RIU探測到用戶從ACR上撤銷,則需要從數(shù)據(jù)平面通過內(nèi)部通信模塊向運(yùn)行于控制平面的系統(tǒng)數(shù)據(jù)維護(hù)模塊通告需要撤銷的消息;2)、系統(tǒng)數(shù)據(jù)維護(hù)模塊則向內(nèi)部通信模塊發(fā)送相應(yīng)的指令,在內(nèi)部通信模塊中,通過基本設(shè)備的ioct1操作,撤銷相應(yīng)名稱的設(shè)備并完成對對應(yīng)設(shè)備的發(fā)送隊列進(jìn)行清空,同時回收與該設(shè)備有關(guān)的資源,而且將該設(shè)備的節(jié)點(diǎn)從設(shè)備隊列中刪除,最后從操作系統(tǒng)中撤銷該設(shè)備。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,本發(fā)明的控制部分的異常處理機(jī)制,即在出現(xiàn)異常時,需要對各種隊列進(jìn)行清空處理,關(guān)閉相應(yīng)的套接字(Socket)描述符以及從操作系統(tǒng)內(nèi)核中撤銷相應(yīng)的設(shè)備。
7.一種數(shù)據(jù)交換的方法,其特征在于,包括1)、虛擬驅(qū)動模塊從內(nèi)部通信模塊中接收來自數(shù)據(jù)平面的協(xié)議報文,內(nèi)部通信模塊通過相應(yīng)虛擬設(shè)備的ioct1的接收操作將數(shù)據(jù)與相應(yīng)的設(shè)備信息封裝上交給運(yùn)行于主處理單元的上層協(xié)議棧;2)、上層協(xié)議棧向下發(fā)送協(xié)議報文時,通過該設(shè)備的發(fā)送操作,封裝報文,將報文放入對應(yīng)于該設(shè)備的發(fā)送隊列的隊尾,等待內(nèi)部通信模塊從虛擬驅(qū)動模塊中以輪詢方式從相應(yīng)的隊頭取出。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟1)包括A1、在內(nèi)部通信模塊向虛擬驅(qū)動模塊通過相應(yīng)虛擬設(shè)備的ioct1調(diào)用傳遞數(shù)據(jù)時,在ioct1操作中,通過copy_from_user( )函數(shù)完成用戶空間數(shù)據(jù)的虛擬內(nèi)存向內(nèi)核虛擬內(nèi)存的映射;A2、將相應(yīng)的數(shù)據(jù)拷貝至內(nèi)核空間;A3、通過虛擬設(shè)備的接收操作將數(shù)據(jù)與相應(yīng)的設(shè)備信息封裝為skb格式;A4、由標(biāo)準(zhǔn)函數(shù)netif_rx( )上交給運(yùn)行于主處理單元的上層協(xié)議棧。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟2)包括B1、通過dev_start_xmit( )函數(shù)下發(fā)以skb格式封裝的報文;B2、在本發(fā)明的虛擬驅(qū)動模塊中,查找相應(yīng)的設(shè)備名稱;B3、搜索設(shè)備隊列,判斷相應(yīng)的設(shè)備名稱是否在設(shè)備隊列中,若在隊列中,則執(zhí)行步驟B4,否則對報文做丟棄處理;B4、將對應(yīng)的skb報文放入對應(yīng)設(shè)備的發(fā)送隊列的隊尾,等待內(nèi)部通信模塊以輪詢的方式將該報文從隊頭取出。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,步驟B4中的輪詢方式算法包括C1通過相應(yīng)設(shè)備的ioct1將內(nèi)存空間指針遞入虛擬驅(qū)動模塊,申請內(nèi)存空間;C2通過ioct1操作,通過copy_from_user( )函數(shù)完成內(nèi)存映射;C3判斷相應(yīng)設(shè)備的發(fā)送隊列中的skb節(jié)點(diǎn)上的數(shù)據(jù)長度是否小于或等于申請的內(nèi)存空間,如果是,則執(zhí)行步驟C4;如果否,則執(zhí)行步驟C1,重新申請;C4通過copy_to_user( )將相應(yīng)的報文傳遞至用戶空間;C5從發(fā)送隊列中刪除該skb節(jié)點(diǎn)。
全文摘要
本發(fā)明公開了一種多用戶條件下分布式高性能路由器虛擬驅(qū)動模塊的動態(tài)加載與控制方法。該方法包括由單內(nèi)核模塊實(shí)現(xiàn)對多個實(shí)際接口數(shù)據(jù)包收發(fā)行為的動態(tài)虛擬,則首先需要以驅(qū)動的形式完成各個虛擬接口的動態(tài)加載或者撤銷。同時,需要根據(jù)系統(tǒng)數(shù)據(jù)維護(hù)模塊下發(fā)的指令完成對其狀態(tài)的控制與更新。另外,本發(fā)明還完成了與上層協(xié)議軟件之間的標(biāo)準(zhǔn)接口以及數(shù)據(jù)的有效傳遞,以及與運(yùn)行于用戶空間的內(nèi)部通信模塊之間的協(xié)議數(shù)據(jù)以及狀態(tài)指令的交互。本發(fā)明解決了由于多用戶接入造成的用戶數(shù)量不確定、接口類型多的復(fù)雜條件下,由嵌入式操作系統(tǒng)的單內(nèi)核模塊,模擬多個接口的虛擬驅(qū)動的動態(tài)加載與控制問題。
文檔編號H04L29/06GK1881936SQ20061007809
公開日2006年12月20日 申請日期2006年5月9日 優(yōu)先權(quán)日2006年5月9日
發(fā)明者陳庶樵, 魏進(jìn)武, 張興明, 魏星平, 周麗 申請人:國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心