欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法及裝置的制作方法

文檔序號(hào):7764624閱讀:145來源:國知局
專利名稱:一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及路由器數(shù)據(jù)通信技術(shù),特別涉及驅(qū)動(dòng)報(bào)文接收的方法。
背景技術(shù)
目前網(wǎng)絡(luò)設(shè)備中,設(shè)備驅(qū)動(dòng)軟件接收數(shù)據(jù)普遍采用緩沖區(qū)描述符(BD)環(huán)機(jī)制。如圖1所示,BD環(huán)是驅(qū)動(dòng)軟件101與硬件收發(fā)器102之間的一個(gè)數(shù)據(jù)緩沖。在設(shè)備內(nèi)存103 中分配BD 104,每個(gè)BD 104由狀態(tài)標(biāo)志Gtatus & Control,SC)和報(bào)文緩沖指針(Packet Pointer, PP)組成,狀態(tài)標(biāo)志指示這個(gè)BD是空閑的還是有報(bào)文需要處理的,報(bào)文緩沖指針指向一塊用于存放待處理的報(bào)文內(nèi)存區(qū)域,即該指針指向報(bào)文存放的位置。每個(gè)BD的結(jié)構(gòu)如圖2所示,其SC標(biāo)志中的E標(biāo)志位指示該BD對(duì)應(yīng)的緩沖區(qū)是否空閑,E標(biāo)志位為0表示該BD中有報(bào)文待處理,為1表示該BD對(duì)應(yīng)的緩沖區(qū)空閑;W標(biāo)志位指示該BD是否為BD環(huán)的最后一個(gè)BD,W標(biāo)志位為1表示其為最后一個(gè)BD,否則為0。多個(gè)BD 104首尾相接組成 BD環(huán)。BD環(huán)是驅(qū)動(dòng)軟件101與硬件收發(fā)器102之間的一個(gè)數(shù)據(jù)緩沖。軟硬件分別通過BD環(huán)的讀指針和寫索引對(duì)BD環(huán)進(jìn)行相關(guān)操作。當(dāng)硬件接收到報(bào)文時(shí),判斷BD環(huán)的寫指針當(dāng)前所對(duì)應(yīng)的BD的E標(biāo)志位是否為1,如果為1,則把報(bào)文存放到該BD的報(bào)文緩沖指針?biāo)赶虻木彌_區(qū)中,保存完成后,設(shè)置對(duì)應(yīng)BD的E標(biāo)志位為0,如果當(dāng)前BD的W標(biāo)志位為1,則令BD環(huán)寫指針為0,否則令BD環(huán)寫指針指向BD環(huán)的下一個(gè)BD。 最后,通知驅(qū)動(dòng)軟件報(bào)文處理接收的報(bào)文。通常,驅(qū)動(dòng)軟件得到硬件接收完成通知后,判斷BD環(huán)的讀指針當(dāng)前所對(duì)應(yīng)的BD的 E標(biāo)志位是否為0,如果為0,首先取出該BD的報(bào)文緩沖指針?biāo)赶蚓彌_區(qū)的報(bào)文(即保存 BD的報(bào)文緩沖指針);然后,并在內(nèi)存申請(qǐng)分配一個(gè)新的報(bào)文緩沖區(qū),并設(shè)置該BD的報(bào)文緩沖指針指向新的報(bào)文緩沖區(qū),設(shè)置該BD的SC標(biāo)志中的E標(biāo)志位為1,如果當(dāng)前BD的SC標(biāo)志中的W標(biāo)志位為1,則令BD環(huán)讀指針為0,否則令BD環(huán)讀指針指向BD環(huán)的下一個(gè)BD。為了實(shí)現(xiàn)軟硬件并行工作,驅(qū)動(dòng)軟件可以連續(xù)執(zhí)行該過程,直到BD環(huán)的讀指針?biāo)鶎?duì)應(yīng)的BD的 E標(biāo)志位等于1為止。上述驅(qū)動(dòng)接收?qǐng)?bào)文的方法是低效的,因?yàn)槊看螐腂D中取報(bào)文時(shí),都需要申請(qǐng)分配一個(gè)新的報(bào)文緩沖區(qū)。如果一個(gè)系統(tǒng)每秒鐘處理的報(bào)文數(shù)目為N,那么在接收?qǐng)?bào)文的過程中,驅(qū)動(dòng)軟件會(huì)調(diào)用N次報(bào)文緩沖區(qū)的分配函數(shù)。對(duì)于一個(gè)高速轉(zhuǎn)發(fā)系統(tǒng)而言,這個(gè)開銷是非常大的,特別是緩沖區(qū)分配函數(shù)的處理時(shí)間過長時(shí),開銷更加明顯。

發(fā)明內(nèi)容
本發(fā)明的目的就是克服目前驅(qū)動(dòng)接收?qǐng)?bào)文的方法中由于報(bào)文緩沖區(qū)分配函數(shù)的處理時(shí)間過長的缺點(diǎn),提供一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法。本發(fā)明解決其技術(shù)問題,采用的技術(shù)方案是,驅(qū)動(dòng)報(bào)文接收方法,其特征在于,包括以下步驟A.預(yù)先分配一定數(shù)目的報(bào)文緩沖區(qū),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,保存每個(gè)報(bào)文緩沖區(qū)的地址指針到其對(duì)應(yīng)的報(bào)文描述符中,將所有報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈;B.將所述每個(gè)報(bào)文描述符的地址指針依次組織成一個(gè)報(bào)文描述符棧;所述報(bào)文描述符棧的棧首存放的是報(bào)文描述符鏈的首地址;C.驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符, 并更新報(bào)文描述符鏈和報(bào)文描述符棧; D.驅(qū)動(dòng)軟件從步驟C中所述的有報(bào)文的BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針。具體的,步驟C中,判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),是指判斷BD環(huán)中E標(biāo)志位為有報(bào)文狀態(tài)的連續(xù)的BD個(gè)數(shù)。優(yōu)選的,步驟C中,驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù)后,再判斷報(bào)文描述符棧中是否有足夠的報(bào)文描述符,如是,則依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符;否則,驅(qū)動(dòng)軟件觸發(fā)報(bào)文緩沖區(qū)的分配及對(duì)應(yīng)的報(bào)文描述符的創(chuàng)建,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符。優(yōu)選的,步驟C中,依據(jù)報(bào)文描述符棧的棧首從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符,是指從報(bào)文描述符鏈中取出含有對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符的子鏈,并返回該子鏈的首地址給驅(qū)動(dòng)軟件。具體的,步驟D中,驅(qū)動(dòng)軟件從每個(gè)BD中接收?qǐng)?bào)文后,還要設(shè)置該BD的E標(biāo)志位為空閑的狀態(tài)。具體的,所述報(bào)文描述符鏈的結(jié)構(gòu)為前插鏈表,所述報(bào)文描述符棧的結(jié)構(gòu)為堆棧。本發(fā)明的另一個(gè)目的,還提供一種驅(qū)動(dòng)接收?qǐng)?bào)文的裝置,包括報(bào)文緩沖區(qū)分配及組織模塊用于預(yù)先申請(qǐng)一定數(shù)目的報(bào)文緩沖區(qū),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,保存每個(gè)報(bào)文緩沖區(qū)的地址指針到其對(duì)應(yīng)的報(bào)文描述符中,將所有報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈后,再將所述每個(gè)報(bào)文描述符的地址指針依次組織成一個(gè)報(bào)文描述符棧,所述報(bào)文描述符棧的棧首為報(bào)文描述符鏈的首地址;并用于根據(jù)報(bào)文緩沖區(qū)請(qǐng)求模塊的請(qǐng)求,從報(bào)文描述符鏈中取出需要的報(bào)文描述符個(gè)數(shù)返回給報(bào)文緩沖區(qū)請(qǐng)求模塊,并更新報(bào)文描述符鏈和報(bào)文描述符棧;報(bào)文緩沖區(qū)請(qǐng)求模塊,用于判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),并向報(bào)文緩沖區(qū)分配及組織模塊請(qǐng)求包含對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符;報(bào)文讀取模塊;用于從有報(bào)文的BD中讀取報(bào)文緩沖區(qū)指針?biāo)赶蚓彌_區(qū)中的報(bào)文;BD更新模塊用于從每個(gè)BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針。優(yōu)選的,所述報(bào)文緩沖區(qū)分配及組織模塊,還用于在接收到報(bào)文緩沖區(qū)請(qǐng)求模塊的請(qǐng)求后,判斷報(bào)文描述符棧中是否有足夠的報(bào)文描述符,如是,則依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符返回給報(bào)文緩沖區(qū)請(qǐng)求模塊;否則,通知報(bào)文緩沖區(qū)分配及組織模塊分配報(bào)文緩沖區(qū)以及創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符返回給報(bào)文緩沖區(qū)請(qǐng)求模塊。優(yōu)選的,所述BD更新模塊,還用于從每個(gè)BD中接收?qǐng)?bào)文后,還要設(shè)置該BD的E標(biāo)志位為空閑的狀態(tài)。具體的,所述報(bào)文描述符鏈的結(jié)構(gòu)為前插鏈表,所述報(bào)文描述符棧的結(jié)構(gòu)為堆棧。本發(fā)明的有益效果是,通過上述驅(qū)動(dòng)報(bào)文接收方法,由于其在驅(qū)動(dòng)接收?qǐng)?bào)文之前根據(jù)BD個(gè)數(shù)優(yōu)先分配足夠的PD,再進(jìn)行驅(qū)動(dòng)報(bào)文的接收,其僅調(diào)用少數(shù)幾次甚至僅一次的 PD分配函數(shù)即可,大大提高了驅(qū)動(dòng)接收?qǐng)?bào)文的效率。


圖1是現(xiàn)有技術(shù)中BD環(huán)結(jié)構(gòu)示意圖;圖2是現(xiàn)有技術(shù)中BD環(huán)中的每個(gè)BD的結(jié)構(gòu)示意圖;圖3本發(fā)明實(shí)施例提供的一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法流程圖;圖4本發(fā)明實(shí)施例提供的一種報(bào)文描述符的結(jié)構(gòu)示意圖;圖5是本發(fā)明實(shí)施例提供的一種報(bào)文描述符鏈和報(bào)文描述符棧的結(jié)構(gòu)圖;圖6是本發(fā)明實(shí)施例提供的一種驅(qū)動(dòng)接收?qǐng)?bào)文的裝置的結(jié)構(gòu)框圖。
具體實(shí)施例方式下面結(jié)合實(shí)施例及附圖,詳細(xì)描述本發(fā)明的技術(shù)方案。參見圖3,是本發(fā)明實(shí)施例提供的一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法流程圖,包括如下步驟步驟101,預(yù)先分配一定數(shù)目的報(bào)文緩沖區(qū),分配的報(bào)文緩沖區(qū)的數(shù)目與系統(tǒng)資源相適應(yīng),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,保存每個(gè)報(bào)文緩沖區(qū)的地址指針到其對(duì)應(yīng)的報(bào)文描述符中,將所有報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈。本步驟是系統(tǒng)初始化步驟,預(yù)先分配一定數(shù)目的報(bào)文緩沖區(qū),這個(gè)一定數(shù)目可以根據(jù)系統(tǒng)中軟硬件交互報(bào)文的頻度來定,如可以一次性預(yù)先分配512報(bào)文緩沖區(qū),每個(gè)報(bào)文緩沖區(qū)可以用于存放一個(gè)交互報(bào)文。每分配一個(gè)報(bào)文緩沖區(qū),可以為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符(Packet Descriptor, PD),報(bào)文描述符PD的結(jié)構(gòu)示意圖參見圖4,其包含了指向報(bào)文緩沖區(qū)地址的每報(bào)文緩沖指針(Packet Pointer,PP)字段和指向下一個(gè)報(bào)文描述符地址的指針(Next Pointer,NP)字段。所有的報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈,如圖5所示。步驟102,將所述每個(gè)報(bào)文描述符的地址指針依次組織成一個(gè)報(bào)文描述符棧;所述報(bào)文描述符棧的棧首存放的是報(bào)文描述符鏈的首地址;如圖5所示,通過創(chuàng)建一個(gè)報(bào)文描述符棧,將步驟101中創(chuàng)建的所有報(bào)文描述符的地址指針(Packet Descriptor Pointer, PDP)組織起來。即系統(tǒng)初始化時(shí),報(bào)文描述符棧的深度和報(bào)文描述符鏈的節(jié)點(diǎn)個(gè)數(shù)相同。步驟103,驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符,并更新報(bào)文描述符鏈和報(bào)文描述符棧;本步驟中,驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù)后,再判斷報(bào)文描述符棧中是否有足夠的報(bào)文描述符,如是,則依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符,并更新報(bào)文描述符鏈和報(bào)文描述符棧;否則,驅(qū)動(dòng)軟件觸發(fā)報(bào)文緩沖區(qū)的分配及對(duì)應(yīng)的報(bào)文描述符的創(chuàng)建,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符;并更新報(bào)文描述符鏈和報(bào)文描述符棧。步驟104,驅(qū)動(dòng)軟件從步驟C中所述的有報(bào)文的BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針;另外驅(qū)動(dòng)軟件還要設(shè)置該BD的E標(biāo)志位為空閑的狀態(tài)。另外,在本發(fā)明的實(shí)施過程中,驅(qū)動(dòng)軟件在利用BD環(huán)接收?qǐng)?bào)文的同時(shí),還會(huì)利用另外一個(gè)BD環(huán)發(fā)送報(bào)文,所以當(dāng)驅(qū)動(dòng)軟件將連續(xù)的BD中的報(bào)文發(fā)送后,釋放所述連續(xù)的BD 中的PP字段中所對(duì)應(yīng)的報(bào)文描述符子鏈,并將所述報(bào)文描述符子鏈加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址。 從而達(dá)到報(bào)文描述符棧中一直可以滿足驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),請(qǐng)求的報(bào)文描述符的個(gè)數(shù)。 從而大大節(jié)省整個(gè)系統(tǒng)的開銷。實(shí)施例本實(shí)施例中,初始化后的報(bào)文描述符棧中,總共有PDB_SUE(默認(rèn)為512)個(gè)緩沖條目,當(dāng)前有效緩沖條目數(shù)記為Top Index(TI),初始時(shí)TI等于(PDB_SUE-1)。其中驅(qū)動(dòng)軟件和硬件收發(fā)器根據(jù)讀索引(Read Index, RI)和寫索引(Write Index, WI)對(duì)BD環(huán)進(jìn)行相關(guān)操作。本實(shí)施例的驅(qū)動(dòng)接收?qǐng)?bào)文的方法中,首先,從用于接收?qǐng)?bào)文的BD環(huán)的讀索引RI 所對(duì)應(yīng)的BD開始,判斷連續(xù)E標(biāo)志位為0 (E標(biāo)志位為有報(bào)文狀態(tài))的BD條目個(gè)數(shù);然后, 根據(jù)該數(shù)目調(diào)用多報(bào)文描述符分配函數(shù),請(qǐng)求分配的相應(yīng)個(gè)數(shù)的報(bào)文描述符;接著,對(duì)分配函數(shù)所返回的報(bào)文描述符鏈中的報(bào)文描述符,逐個(gè)做如下操作讀取RI所對(duì)應(yīng)的BD條目中的PP字段所指向報(bào)文緩沖區(qū)中的報(bào)文(即保存RI所對(duì)應(yīng)的BD條目中的PP字段)后,同時(shí)用新分配的報(bào)文描述符鏈中的報(bào)文描述符的PP字段更新當(dāng)前RI所對(duì)應(yīng)的BD條目的PP 字段,設(shè)置RI所對(duì)應(yīng)的BD條目的E標(biāo)志位為1,如果RI所對(duì)應(yīng)的BD條目的W標(biāo)志位為1, 則令BD環(huán)RI為0,否則令BD環(huán)RI指向下個(gè)有報(bào)文的BD。關(guān)于多PD的分配機(jī)制,詳細(xì)說明如下步驟1,驅(qū)動(dòng)軟件從用于接收?qǐng)?bào)文的BD環(huán)的讀索引RI所對(duì)應(yīng)的BD開始,判斷BD 環(huán)中E標(biāo)志位為有報(bào)文狀態(tài)(即E標(biāo)志位為1)的連續(xù)的BD的個(gè)數(shù),即請(qǐng)求分配的報(bào)文緩沖區(qū)PD的個(gè)數(shù),設(shè)為ReqCnt ;步驟2,如果TI的值大于等于ReqCnt,則首先,保存TI所對(duì)應(yīng)的報(bào)文描述符的地址指針PDP到指針RetPDHead處;然后,令(TI-ReqCnt+l)所對(duì)應(yīng)PDP指向的報(bào)文描述符鏈中PD的NP字段為空(NULL);接著,令TI = TI-ReqCnt ;最后,返回指針RetPDPHead給請(qǐng)求者,此時(shí)指針RetPDPHead所指向的報(bào)文描述符子鏈中含有ReqCnt個(gè)報(bào)文描述符,多報(bào)文描述符分配流程結(jié)束;否則進(jìn)入步驟3 ;
7
步驟3,驅(qū)動(dòng)軟件觸發(fā)報(bào)文緩沖區(qū)的分配及對(duì)應(yīng)的報(bào)文描述符的創(chuàng)建,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,更新后報(bào)文描述符棧的棧首為的報(bào)文描述符鏈的首地址,更新Tl,進(jìn)入步驟2。驅(qū)動(dòng)軟件在利用BD環(huán)接收?qǐng)?bào)文的同時(shí),還會(huì)利用另外一個(gè)BD環(huán)發(fā)送報(bào)文,對(duì)于驅(qū)動(dòng)將連續(xù)的BD中的報(bào)文發(fā)送后,釋放所述連續(xù)的BD中的PP字段中所對(duì)應(yīng)的報(bào)文描述符子鏈的過程如下,假設(shè)請(qǐng)求釋放的報(bào)文描述符子鏈?zhǔn)椎刂窞镻DHead ;步驟11,如果 PDHead 不為空(NULL),貝丨J 令 PDTmp = PDHead,令 PDHead = PDTmp 的NP字段,令PDTmp的NP字段為空,然后執(zhí)行步驟12 ;否則執(zhí)行步驟13 ;步驟12,如果TI字段小于(PDB_SIZE-1),則令PDTmp的NP字段等于TI所對(duì)應(yīng)的PDP,令(Tl = TI+1)所對(duì)應(yīng)的PDP等于PDTmp,令TI = TI+1,然后執(zhí)行步驟11 ;否則執(zhí)行步驟13 ;步驟13,如果PDHead不為空(NULL),則利用現(xiàn)有系統(tǒng)的PD分配機(jī)制,逐個(gè)釋放 PDHead對(duì)應(yīng)PD鏈中的各個(gè)PD ;設(shè)需要處理的報(bào)文數(shù)為pktCnt,初始為0 ;令TmpRI為RI ;驅(qū)動(dòng)軟件接收?qǐng)?bào)文過程如下步驟21,如果TmpRI所對(duì)應(yīng)的BD條目的E標(biāo)志位為0,則令pktCnt = pktCnt+1, 令TmpRI = (TmpRI+1) % BD_SUE,然后執(zhí)行步驟21 ;否則執(zhí)行步驟22 ;步驟22,如果pktCnt大于0,則調(diào)用多PD分配函數(shù)以分配pktCnt個(gè)PD,設(shè)分配返回的PD鏈?zhǔn)诪镻DHead,令TmpRI等于RI,然后執(zhí)行步驟23 ;步驟23,如果 PDHead 不為空(NULL),貝丨J 令 PDTmp = PDHead,令 PDHead = PDTmp 的NP字段,令PDTmp的NP字段為空(NULL),然后執(zhí)行步驟M ;否則執(zhí)行步驟25 ;步驟M,令TmpRI所對(duì)應(yīng)的BD條目的PP字段等于PDTmp所指向PD的PP字段,令 TmpRI所對(duì)應(yīng)的BD條目的E標(biāo)志位為1,令TmpRI = (TmpRI+1) % BD_SIZE,然后執(zhí)行步驟 24;步驟25,令 RI 等于 TmpRI。如圖6所示,本發(fā)明還提供一種驅(qū)動(dòng)接收?qǐng)?bào)文的裝置的結(jié)構(gòu)框圖,包括報(bào)文緩沖區(qū)分配及組織模塊601 用于預(yù)先申請(qǐng)一定數(shù)目的報(bào)文緩沖區(qū),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,保存每個(gè)報(bào)文緩沖區(qū)的地址指針到其對(duì)應(yīng)的報(bào)文描述符中,將所有報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈后,再將所述每個(gè)報(bào)文描述符的地址指針依次組織成一個(gè)報(bào)文描述符棧,所述報(bào)文描述符棧的棧首為報(bào)文描述符鏈的首地址; 并用于根據(jù)報(bào)文緩沖區(qū)請(qǐng)求模塊的請(qǐng)求,從報(bào)文描述符鏈中取出需要的報(bào)文描述符個(gè)數(shù)返回給報(bào)文緩沖區(qū)請(qǐng)求模塊,并更新報(bào)文描述符鏈和報(bào)文描述符棧;報(bào)文緩沖區(qū)請(qǐng)求模塊602 用于判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),并向報(bào)文緩沖區(qū)分配及組織模塊請(qǐng)求包含對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符;報(bào)文讀取模塊603 用于從有報(bào)文的BD中讀取報(bào)文緩沖區(qū)指針?biāo)赶蚓彌_區(qū)中的報(bào)文;BD更新模塊604 用于從每個(gè)BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針。所述報(bào)文緩沖區(qū)分配及組織模塊601,還用于在接收到報(bào)文緩沖區(qū)請(qǐng)求模塊的請(qǐng)求后,判斷報(bào)文描述符棧中是否有足夠的報(bào)文描述符,如是,則依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符返回給報(bào)文緩沖區(qū)請(qǐng)求模塊;否則,通知報(bào)文緩沖區(qū)分配及組織模塊分配報(bào)文緩沖區(qū)以及創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符返回給報(bào)文緩沖區(qū)請(qǐng)求模塊。所述BD更新模塊604,還用于從每個(gè)BD中接收?qǐng)?bào)文后,還要設(shè)置該BD的E標(biāo)志位為空閑的狀態(tài)。 本發(fā)明裝置實(shí)施上述驅(qū)動(dòng)接收?qǐng)?bào)文的方法,具體的過程不再贅述。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法,其特征在于,包括以下步驟A.預(yù)先分配一定數(shù)目的報(bào)文緩沖區(qū),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,保存每個(gè)報(bào)文緩沖區(qū)的地址指針到其對(duì)應(yīng)的報(bào)文描述符中,將所有報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈;B.將所述每個(gè)報(bào)文描述符的地址指針依次組織成一個(gè)報(bào)文描述符棧;所述報(bào)文描述符棧的棧首存放的是報(bào)文描述符鏈的首地址;C.驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符,并更新報(bào)文描述符鏈和報(bào)文描述符棧;D.驅(qū)動(dòng)軟件從步驟C中所述的有報(bào)文的BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針。
2.如權(quán)利要求1所述的方法,其特征在于,步驟C中,判斷BD環(huán)中有報(bào)文的連續(xù)的BD 的個(gè)數(shù),是指判斷BD環(huán)中E標(biāo)志位為有報(bào)文狀態(tài)的連續(xù)的BD個(gè)數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于,步驟C中,驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù)后,再判斷報(bào)文描述符棧中是否有足夠的報(bào)文描述符,如是, 則依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符;否則,驅(qū)動(dòng)軟件觸發(fā)報(bào)文緩沖區(qū)的分配及對(duì)應(yīng)的報(bào)文描述符的創(chuàng)建,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符。
4.如權(quán)利要求1所述的方法,其特征在于,步驟C中,依據(jù)報(bào)文描述符棧的棧首從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符,是指從報(bào)文描述符鏈中取出含有對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符的子鏈,并返回該子鏈的首地址給驅(qū)動(dòng)軟件。
5.如權(quán)利要求1所述的方法,其特征在于,步驟D中,驅(qū)動(dòng)軟件從每個(gè)BD中接收?qǐng)?bào)文后,還要設(shè)置該BD的E標(biāo)志位為空閑的狀態(tài)。
6.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,所述報(bào)文描述符鏈的結(jié)構(gòu)為前插鏈表,所述報(bào)文描述符棧的結(jié)構(gòu)為堆棧。
7.—種驅(qū)動(dòng)接收?qǐng)?bào)文的裝置,其特征在于,包括報(bào)文緩沖區(qū)分配及組織模塊用于預(yù)先申請(qǐng)一定數(shù)目的報(bào)文緩沖區(qū),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,保存每個(gè)報(bào)文緩沖區(qū)的地址指針到其對(duì)應(yīng)的報(bào)文描述符中, 將所有報(bào)文描述符組織成一個(gè)報(bào)文描述符鏈后,再將所述每個(gè)報(bào)文描述符的地址指針依次組織成一個(gè)報(bào)文描述符棧,所述報(bào)文描述符棧的棧首為報(bào)文描述符鏈的首地址;并用于根據(jù)報(bào)文緩沖區(qū)請(qǐng)求模塊的請(qǐng)求,從報(bào)文描述符鏈中取出需要的報(bào)文描述符個(gè)數(shù)返回給報(bào)文緩沖區(qū)請(qǐng)求模塊,并更新報(bào)文描述符鏈和報(bào)文描述符棧;報(bào)文緩沖區(qū)請(qǐng)求模塊,用于判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),并向報(bào)文緩沖區(qū)分配及組織模塊請(qǐng)求包含對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符;報(bào)文讀取模塊;用于從有報(bào)文的BD中讀取報(bào)文緩沖區(qū)指針?biāo)赶蚓彌_區(qū)中的報(bào)文;BD更新模塊用于從每個(gè)BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針。
8.如權(quán)利要求7所述的裝置,其特征在于,所述報(bào)文緩沖區(qū)分配及組織模塊,還用于在接收到報(bào)文緩沖區(qū)請(qǐng)求模塊的請(qǐng)求后,判斷報(bào)文描述符棧中是否有足夠的報(bào)文描述符,如是,則依據(jù)報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符返回給報(bào)文緩沖區(qū)請(qǐng)求模塊;否則,通知報(bào)文緩沖區(qū)分配及組織模塊分配報(bào)文緩沖區(qū)以及創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,并將所述創(chuàng)建的報(bào)文描述符加入到報(bào)文描述符鏈并填充報(bào)文描述符棧,依據(jù)更新后的報(bào)文描述符棧的棧首保存的報(bào)文描述符鏈的首地址,從報(bào)文描述符鏈中取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符返回給報(bào)文緩沖區(qū)請(qǐng)求模塊。
9.如權(quán)利要求7或8所述的裝置,其特征在于,所述BD更新模塊,還用于從每個(gè)BD中接收?qǐng)?bào)文后,還要設(shè)置該BD的E標(biāo)志位為空閑的狀態(tài)。
10.如權(quán)利要求9所述的裝置,其特征在于,所述報(bào)文描述符鏈的結(jié)構(gòu)為前插鏈表,所述報(bào)文描述符棧的結(jié)構(gòu)為堆棧。
全文摘要
本發(fā)明涉及路由器數(shù)據(jù)通信技術(shù)。本發(fā)明解決了現(xiàn)有驅(qū)動(dòng)接收?qǐng)?bào)文的方法中由于報(bào)文緩沖區(qū)分配函數(shù)的處理時(shí)間過長的問題,提供了一種驅(qū)動(dòng)接收?qǐng)?bào)文的方法,其技術(shù)方案可概括為預(yù)先分配一定數(shù)目的報(bào)文緩沖區(qū),并為每個(gè)報(bào)文緩沖區(qū)創(chuàng)建對(duì)應(yīng)的報(bào)文描述符,驅(qū)動(dòng)軟件接收?qǐng)?bào)文時(shí),判斷BD環(huán)中有報(bào)文的連續(xù)的BD的個(gè)數(shù),取出對(duì)應(yīng)個(gè)數(shù)的報(bào)文描述符,驅(qū)動(dòng)軟件從步驟C中所述的有報(bào)文的BD中接收?qǐng)?bào)文后,依次根據(jù)取出的報(bào)文描述符中的報(bào)文緩沖區(qū)的地址指針更新所述BD中的報(bào)文緩沖區(qū)指針。本發(fā)明的有益效果是大大提高了驅(qū)動(dòng)接收?qǐng)?bào)文的效率,適用于驅(qū)動(dòng)接收?qǐng)?bào)文。
文檔編號(hào)H04L12/56GK102255818SQ201110248360
公開日2011年11月23日 申請(qǐng)日期2011年8月26日 優(yōu)先權(quán)日2011年8月26日
發(fā)明者曹淋 申請(qǐng)人:邁普通信技術(shù)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
龙井市| 岳西县| 易门县| 青铜峡市| 应城市| 沙田区| 南涧| 德格县| 巴青县| 太原市| 新干县| 竹溪县| 新民市| 乐亭县| 碌曲县| 滨州市| 满城县| 常宁市| 曲阳县| 双鸭山市| 邯郸县| 大田县| 张家界市| 仁寿县| 宜君县| 巨鹿县| 潼南县| 宜昌市| 怀来县| 松滋市| 天水市| 沙湾县| 香港| 蕉岭县| 和林格尔县| 农安县| 略阳县| 侯马市| 贡觉县| 广丰县| 武鸣县|