LTE中RLC分段、串接、重組與實(shí)現(xiàn)_第1頁
LTE中RLC分段、串接、重組與實(shí)現(xiàn)_第2頁
LTE中RLC分段、串接、重組與實(shí)現(xiàn)_第3頁
LTE中RLC分段、串接、重組與實(shí)現(xiàn)_第4頁
LTE中RLC分段、串接、重組與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1 將RLCSDU組成RLCPDU1.1 功能介紹發(fā)送UMRLC實(shí)體/AMRLC實(shí)體的發(fā)送側(cè)將RLCSDU組成UMDPDU時,它們將:-根據(jù)低層通知的特定發(fā)送時機(jī)以及由低層指示的RLCPDU(s)的總大小,將RLCSDU分段和/或用接成合適的RLCPDU(UMDPDU/AMDPDU)-在RLCPDU中包含相應(yīng)的RLCPDU頭。RLCSDUnn+1n+2n+3RLCheaderRLCheadertRLCPDU-Figure1.1-1:RLCPDUStructure1.2數(shù)據(jù)結(jié)構(gòu)和宏MIN_PDU_DATA_SIZE宏值,表示PDU數(shù)據(jù)域元素的最小長度(>=1)。PDU_Header_Ext

2、表示PDU頭擴(kuò)展部分的結(jié)構(gòu)類型,包含E和LI位域。PDU表示一個RLCPDU結(jié)構(gòu)的類型,包含的數(shù)據(jù)成員有:?PDU頭固定部分:UM和AM模式的PDU頭不同,不同模式,包含各自的所有的位域;?PDU頭擴(kuò)展部分:指向PDU_HeaderExt的指針;數(shù)據(jù)域:每個元素為一個字節(jié)的數(shù)組。SDU_context:表示SDU上下文的結(jié)構(gòu)類型,并包含的數(shù)據(jù)成員有:BYTE*tbuff:指向存放RLCSDU的緩存器;SDU_leftsize:RLCSDU的長度,初始表示當(dāng)前順序從buffer里取出的RLCSDU的長度,每次組建后更新為剩下的RLCSDU的長度;Segment:表示RLCSDU分段的標(biāo)識,初始為

3、0,每次順序取到一個RLCSDU,如果標(biāo)識為1,表示是一個RLCSDU分段;否則,表示是一個RLCSDU;PDU_context:表示PDU上下文的結(jié)構(gòu)類型,并包含的數(shù)據(jù)成員有:PDU_SN:下一個將要發(fā)送的UMDPDU的SN。PDU_leftsize(PDU剩余大?。罕硎窘M建當(dāng)前RLCPDU時,該P(yáng)DU還可以包含的字節(jié)數(shù)。初始值為此發(fā)送時機(jī)低層指示的RLCPDU的總大小;ElemNo:該變量計數(shù)RLCPDU數(shù)據(jù)域元素的個數(shù),初始為0;每次組建一個RLCPDU結(jié)束,ElemNo更新為0。PDU_finish:表示組建一個RLCPDU結(jié)束的標(biāo)識。值為0,表示正在組建一個RLCPDU;值為1,表

4、示組建一個RLCPDU結(jié)束,也表示下一次將要組建一個新的RLCPDU。初始為1,每次組建后,如果正在組建的RLCPDU未結(jié)束,更新為0;在此發(fā)送時機(jī),開始宏定義、初始祀SDUt下文、PDUt下文發(fā)送Buffer里還有RLC SDU按順序從Buffer里取出第一個RLC新的RLC PDU即PDU finish=1 ?SDIM用于組建一個YPDU_leftsize = PDU_leftsize -2rr?Du_ieftsize < sDu_ieftsize,YsdU、段,把大小等于 PDU_lensize 的該RLC SDUJ前面部分映射到RLC PDU最后一個數(shù)據(jù)域元素更新SDUt下文和P

5、DUt下文以及SDUstruct ;確定RLCPDU?的各個位域, 組建一個RLC PD結(jié)束。PDU_leftsize = SDU_leftsize一.Y把該RLC SD映射到RLC PDUJ最后一個數(shù)據(jù)域元素;更新PDUb下文,確定RLC PD供的各個位域,組建一個RLC PD縉束。把該SD串接到正在組建的RLC PD質(zhì)面需要繼續(xù)串接SDIM發(fā)送Buffer不為空?更新PDUt下文,確定RLC PD快的各個位域,組建一個RLC PD結(jié)束。更新PDUt下文,確定RLC PD民的部分位域,繼續(xù)串接。將組建2束的RLCPD遞交給低層,同時更新發(fā)送狀態(tài)變量返回,結(jié)束1.4詳細(xì)設(shè)計函數(shù)原型voidRl

6、c_Pdu_Process(SDU_context&)描述RLCSDU分段或串接成RLCPDU輸入SDU上卜文:*tbuff指向存放RLCSDU的緩存器SDU_leftsizeRLCSDU的(乘U余)長度segment表示RLCSDU分段的標(biāo)識輸出SDU上下文(記錄發(fā)送buffer的»個RLCSDU的信息)1 .在MAC通知的發(fā)送時機(jī),初始化PDU上下文;2 .從發(fā)送Buffer里順序取出一個RLCSDU,更新SDU上下文,如果PDU上下文里的PDU_finish=1,該SDU將用于組建一個新的RLCPDU,轉(zhuǎn)到3;否則,轉(zhuǎn)到4;3 .創(chuàng)建一個新的RLCPDU?首先創(chuàng)建一個初

7、始的RLCPDU;?根據(jù)SDU上下文里的SDU分段標(biāo)識segment確定PDU頭固定部分的FI域的第一位:即如果segment為0,該RLCSDU是一個完整的SDU,FI第一位為0;否則,它是一個SDU分段,F(xiàn)I的第一位為1;?并更新PDU_leftsize=PDU_leftsize2(PDU頭的固定部分大?。? .比較PDU_leftsize與SDU_leftsize,如果:1) PDU_leftsize<SDU_leftsize:SDU需要分段將RLCSDU分段,把長度等于PDU_leftsize的SDU前面分段拷貝到RLCPDU的數(shù)據(jù)域后面(正好映射到RLCPDU的最后一個數(shù)據(jù)域

8、元素);更新SDU上下文:SDU_leftsize=SDU_leftsize-PDU_leftsize;segment=1;更新PDU上下文:PDU_leftsize=0;ElemNo+;PDU_finish=1(PDU數(shù)據(jù)域組建完成);確定RLCPDU頭的固定部分:FI域的后一位=1;如果RLCPDU只有一個數(shù)據(jù)域元素(即ElemNo=1),沒有擴(kuò)展部分,PDU頭固定部分的E域=0;否則,有擴(kuò)展部分,PDU頭固定部分的E域=1;確定SN域等于發(fā)送狀態(tài)變量(VT(US)或VT(S)。對AMPDU,確定D/C域=1,RF域=0,P域(跟輪詢機(jī)制有關(guān))。確定RLCPDU頭擴(kuò)展部分:(該SDU前面分

9、段在擴(kuò)展部分沒有E和LI;)如果ElemNo>1,擴(kuò)展部分的最后一個E域?yàn)?,即擴(kuò)展部分第(ElemNo-1)個E域=0。(第1到ElemNo個E域已經(jīng)確定,這里只需確定最后一個E域)如果ElemNo為奇數(shù),在最后一個LI后加四個填充比特,組建一個RLCPDU結(jié)束。實(shí)例:以下面的AMDPDU為例,假設(shè)這次分段結(jié)束后,當(dāng)前的ElemNo=k+1,Oct 1Oct 2Oct 3Oct 4Oct 5Oct 2+1.5*K-2Oct 2+1.5*K-1Oct 2+1.5*KOct 2+1.5*K+1Oct N那么,該SDU前面分段是RLCPDU的最后一個數(shù)據(jù)域元素,沒有E和LI域;固定部分如上所

10、述,其中FI=01或11,E=1;擴(kuò)展部分從第1個到第k-1個E=1;LIi»為各自數(shù)據(jù)域元素長度;第K個E=002) PDU_leftsize=SDU_leftsize:直接映射直接把該RLCSDU映射到RLCPDU的最后一個數(shù)據(jù)域元素(拷貝)。更新SDU上下文:SDU_leftsize=0;segment=0;更新PDU上下文:PDU_leftsize=0;PDU_finish=1;ElemNo+。確定RLCPDU頭的固定部分:FI域的后一位=0;如果RLCPDU只有一個數(shù)據(jù)域元素(即ElemNo=1),沒有擴(kuò)展部分,PDU頭固定部分的E域=0;否則,有擴(kuò)展部分,PDU頭固定部分

11、的E域=1;確定SN域等于發(fā)送狀態(tài)變量(VT(US)或VT(S)。對AMPDU,確定D/C域=1,RF域=0,P域這里不設(shè)置。確定PDU頭擴(kuò)展部分:(該RLCSDU在擴(kuò)展部分沒有E和LI;)如果ElemNo>1,擴(kuò)展部分的最后一個E域?yàn)?,即擴(kuò)展部分第(ElemNo-1)個E域=0。(第1到ElemNo個E域已經(jīng)確定,這里只需確定最后一個E域)如果ElemNo為奇數(shù),在最后一個LI后加四個填充比特,組建一個RLCPDU結(jié)束。實(shí)例:以下面的UMDPDU為例,假設(shè)這次組建結(jié)束后,當(dāng)前的ElemNo=1,Oct 1Oct 2Oct 3Oct N那么,該SDU是RLC PDU的唯一的一個數(shù)據(jù)域元

12、素,沒有擴(kuò)展部分;固定部分如上所述,其中FI=00或10, E = 0;3) PDU_leftsize>SDU_leftsize:SDU用接把該RLCSDU用接到RLCPDU的當(dāng)前最后的數(shù)據(jù)域元素的后面。更新PDU上下文:PDU_leftsize=PDU_leftsizeSDU_leftsize;?如果PDU_leftsize+(k%2)*0.51.5>=MIN_PDU_DATA_SIZE,(1.5是PDU頭擴(kuò)展部分一個E和LI域的字節(jié)數(shù),當(dāng)k=ElemNo是奇數(shù)是,0.5是當(dāng)前補(bǔ)充比特的字節(jié)數(shù),MIN_PDU_DATA_SIZE是初始定義的宏)且Buffer不為空,那么還可以繼續(xù)

13、用接RLCSDU來組建該RLCPDU,- 更新PDU上下文:ElemNo+;PDU_finish=0;PDU_leftsize=PDU_leftsize(1.5*ElemNo+(ElemNo%2)*0.5)?ElemNo奇數(shù)PDU_leftsize=PDU_leftsize-(1.5*ElemNo+0.5);?ElemNo偶數(shù)PDU_leftsize=PDU_leftsize-1.5*ElemNo;- 確定RLCPDU頭的固定部分:確定PDU頭固定部分的E為1;確定SN域等于發(fā)送X態(tài)變量(VT(US)或VT(S);對AMPDU,確定D/C域=1;RF域=0;P域與輪詢機(jī)制有關(guān)。- 確定PDU頭

14、擴(kuò)展部分:PDU頭的擴(kuò)展部分包括第ElemNo個PDU_Header_Ext對象,即一個E和LIk域(k=ElemNo);確定LIk=SDU_leftsize(或者用偏移量來表示);確定擴(kuò)展部分的上一個(第k-1個)的E域?yàn)?;- 更新SDU上下文:SDU_leftsize=0;segment=0;- 循環(huán)回到2,即繼續(xù)順序取出發(fā)送Buffer里第一個RLCSDU,開始繼續(xù)用接該RLCSDU或一部分來組成RLCPDU;實(shí)例:以下面的AMDPDU為例,假設(shè)這次串接結(jié)束后,當(dāng)前的ElemNo=k+1,那么,擴(kuò)展部分新增的E和LIk+1是當(dāng)前串接的SDU的E和LI域;固定部分如上所述,其中E=1;擴(kuò)

15、展部分第k個E=1;第(K+1)個E=0;LIk+1=SDU_leftsize;?否則,如果發(fā)送Buffer為空,或者0<PDU_leftsize+(k%2)*0.51.5<MIN_PDU_DATA_SIZERLCPDU后面不能用接一個RLCSDU,該SDU是RLCPDU的最后一個數(shù)據(jù)域元素,不需要繼續(xù)用接,- 更新PDU上下文:PDU_finish=0;PDU_leftsize=0;- 更新SDU上下文:SDU_leftsize=0;segment=0;ElemNo+- 確定RLCPDU頭的固定部分:確定FI域的后一位為0;如果RLCPDU只有一個數(shù)據(jù)域元素(即ElemNo=1)

16、,沒有擴(kuò)展部分,PDU頭固定部分的£域=0;否則,有擴(kuò)展部分,PDU頭固定部分的E域=1;確定SN域等于發(fā)送狀態(tài)變量(VT(US)或VT(S)。對AMPDU,確定D/C域=1,RF域=0,P域這里不設(shè)置。-確定PDU頭擴(kuò)展部分:(該RLCSDU在擴(kuò)展部分沒有E和LI域;)如果ElemNo>1,擴(kuò)展部分的最后一個E域?yàn)?,即擴(kuò)展部分第ElemNo-1個£域=0;(第1到ElemNo-2個E域已經(jīng)確定,這里只需確定最后一個E域,所有的LI域已確定)-如果ElemNo為奇數(shù),在最后一個LI后加四個填充比特,組建一個RLCPDU結(jié)束。以下面的AMDPDU為例,假設(shè)這次串接結(jié)束

17、后,當(dāng)前的ElemNo=k,Oct N最后一個數(shù)據(jù)域元素Oct 1Oct 2Oct 3Oct 4Oct 5Oct 2+1.5*K-2Oct 2+1.5*K-1Oct 2+1.5*KOct 2+1.5*K+1那么,擴(kuò)展部分沒有當(dāng)前用接的SDU的E和LI域;固定部分如上所述,其中FI=00或10;E=0;擴(kuò)展部分第k個E=1;5.將組建結(jié)束的RLCPDU遞交給低層,同時更新發(fā)送狀態(tài)變量加1,結(jié)束1.5AMDPDU?什么時候用到AMDPDU分段?當(dāng)重傳AMDPDU的大小大于本次發(fā)送通知中對MACSDU長度的要求時,可以對AMDPDU進(jìn)行再分段,形成AMDPDU分段。?結(jié)構(gòu)再分段只是對數(shù)據(jù)域的分段,A

18、MDPDU分段中頭的部分除了RF域、新增的LSF域和SO域外都與再分段前的AMDPDU相同。2將RLCPDU重組為RLCSDU2.1 接收UMRLC實(shí)體SDU重組2.1.1 模塊介紹2.1.1.1 功能需求在接收UMRLC實(shí)體接收UMDPDU后,它:- 將完成重排序的UMDPDU(不考慮已檢測到丟失的RLCPDU)重組RLCSDU,并將完成重組的RLCSDU按序遞交給高層(先重排序,再重組)- 由于某個RLCSDU的一個UMDPDU在低層丟失,導(dǎo)致收到的UMDPDU不能重組為RLCSDU,則丟棄這些UMDPDU2.1.1.2 算法描述針對當(dāng)前接收Buffer里已重排序的UMDPDUs按序循環(huán)進(jìn)

19、行重組:(重組是按照SN從小大到的順序)?從最小的SN的UMDPDU開始,循環(huán)遍歷下一個SN(假設(shè)SN=x)的UMDPDU。每次循環(huán),順序遍歷UMDPDU的數(shù)據(jù)域元素,并把該數(shù)據(jù)域元素和上一次重組保留的RLCSDU分段(如果有的話)一起進(jìn)行重組(按照SN從小大到的順序):如果重組后的RLCSDU之前沒有遞交過,將完成重組的RLCSDU按序遞交給高層;將由于某個UMDPDU在低層丟失而不能重組為RLCSDU的PDU丟棄(丟失的PDU為SDU的前面部分分段或中間部分分段);將沒有完成重組的RLCSDU分段保留(SDU的后面部分分段沒有收到)。2.1.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計PDULeft:結(jié)構(gòu)類型,表示每

20、次重組之后,沒有完成重組的RLCSDU的相關(guān)信息,用于下一次按序重組,包含下面的成員:SN_Left:整型變量,記錄當(dāng)前沒有完成重組的RLCSDU包含的PDU的最大的SN,初始值為-1;若某次重組之后,當(dāng)前被重組的UMDPDU的數(shù)據(jù)域有剩余,SN_Left更新為該P(yáng)DU的SN;SDU_Left:數(shù)組,保留重組之后剩余的RLCPDU數(shù)據(jù)部分(即沒有完成重組的RLCSDU分段),也就是0個、1個或多個SDU分段。初始為空數(shù)組。注:PDULeft對象設(shè)計為靜態(tài)對象。2.1.3 算法流程重排序結(jié)束后,PDULeftX寸象初始(N一.接收Buffet里已重排序的UMD PDU(s)f環(huán)重組沒有結(jié)束? 二

21、 結(jié)束)V -如果PD頭固定部笏I的第一位為1?更新PDULef以寸象;x = x+1;把UMCPDU的第一個數(shù)據(jù)域元素直接重組為RLCSDUNY<PD頭固頂部分EM=T?把UMDPDU的最后一個*數(shù)據(jù)域元素直接重組為RLCSDU2.1.4詳細(xì)設(shè)計函數(shù)原型voidRlc_Reassemble_UM_ProcessPDU_Left&,SN_MIX,SN_MAX)描述將RLCPDU重組成RLCSDU輸入PDU_Left:SN_LeftSDU_LeftSN_MIX:要重組的最小的SNSN_MAX:要重組的最大的SN輸出PDU_Left當(dāng)前接收Buffer里已重排序的UMDPDU(s)最

22、小的SN=SN_MIX;循環(huán)對SN=x的UMDPDU進(jìn)行重組,循環(huán)直到接收Buffer里已重排序的最后一個SN(SN=SN_MAX)的UMDPDU重組后結(jié)束;PDULeft對象保留上一次重組后沒有完成重組RLCSDU的信息??聪旅娴睦樱杭僭O(shè)開始重組SN=x的UMDPDU,止匕時:PDULeft對象:RLCSDU1SDU_Left(分段)SN_Left=x-1,SN=x的UMDPDUheaderRLCSDU1(分段)RLCSDU2RLCSDU3RLCSDU4(分段)FI=11固定部分E=1第1步:判斷接受Buffer里SN=x的UMDPDU是否存在,?如果不存在,該UMDPDU在低層丟失,那么

23、:丟棄PDULeft對象保留的沒有完成重組的RLCSDU,即清空SDU_Left;更新PDULeft對象的SN成員=-1;x=x+1;(下一個SN)循環(huán)回到第1步;?如果存在,繼續(xù)第2步;第2步:檢查SN=x的UMDPDU頭固定部分FI和E域,如果:-如果E=0,那么該UMDPDU只有一個數(shù)據(jù)域元素,又?如果FI的第一位為1,那么該UMDPDU的第一個數(shù)據(jù)域元素是一個SDU的后面分段(前面分段和后面分段根據(jù)2個SDU分段在原來的SDU中的相對位置而言),判斷PDULeft對象的成員SN,如果SN!=x-1,包含該SDU的前面分段的UMDPDU已經(jīng)丟失,那么:直接丟棄該UMDPDU;更新PDUL

24、eft對象:如果SN!=-1,丟棄的SDUs成員保留的數(shù)據(jù);然后SN=-1;x=x+1;循環(huán)回到第1步;否則SN=x-1,PDULeft對象的SDUs成員保留了該SDU的前面分段,那么:去掉PDU頭,將這2個SDU分段按序重組(SN升序)為RLCSDU;這時,$如果FI的后一位為0,那么:更新PDULeft對象:SN=-1;SDUs清空;將完成重組的RLCSDU按序遞交給高層;4否則FI的后一位為1,那么更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;x=x+1;循環(huán)回到第1步;?否則,F(xiàn)I的第一位為0,那么:去掉PDU頭,把PDU的數(shù)據(jù)域直接重組為RLCSD

25、U;這時,如果FI的后一位為0,那么:將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDU_Left清空;否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;x=x+1;循環(huán)回到第1步;-否則E=1,該UMDPDU有多個數(shù)據(jù)域元素,那么:(一)遍歷PDU頭擴(kuò)展部分第一個數(shù)據(jù)域元素的E和LI域,該數(shù)據(jù)域元素長度二LI;?如果FI的第一位為1,該UMDPDU的第一個數(shù)據(jù)域元素是一個SDU的后面分段,那么:判斷PDULeft對象的成員SN:如果SN!=x-1,包含該SDU的部分前面分段的UMDPDU已經(jīng)丟失,那

26、么:直接丟棄該UMDPDU的第一個數(shù)據(jù)域元素;更新PDULeft對象:如果SN!=-1,丟棄SDUs成員保留的數(shù)據(jù);然后SN=-1;否則SN=x-1,PDULeft對象的SDUs成員保留了該SDU的前面分段,那么:將這2個SDU分段按序重組為RLCSDU;將完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;此時,上面的例子的變化:SN=x的UMDPDURLCSDU2RLCSDU3RLCSDU4header(分段)?否則FI的第一位為0,那么:把第一個數(shù)據(jù)域元素直接重組為RLCSDU;將完成重組的RLCSDU按序遞交給高層;(二)檢查當(dāng)前遍歷的E域,循環(huán)執(zhí)行

27、下面的操作:?如果E=0,該UMDPDU只剩下的最后一個數(shù)據(jù)域元素,那么:去掉PDU頭,把PDU的最后一個數(shù)據(jù)域元素直接重組為RLCSDU;如果FI的后一位為0,那么:將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;x=x+1;循環(huán)回到第1步;最后,關(guān)于上面的例子:RLCSDU1、RLCSDU2、RLCSDU3提交給高層;?否則E=1,該UMDPDU還剩下多個數(shù)據(jù)域元素,那么:按序遍歷PDU頭的擴(kuò)展部分下一個數(shù)據(jù)域元素的E和LI域,下一個數(shù)據(jù)

28、域元素長度=LI;直接把下一個數(shù)據(jù)域元素重組為一個完整的RLCSDU;更新PDULeft對象:SN=-1;SDUs清空;將該完成重組的RLCSDU按序遞交給高層;循環(huán)回到(二)。第3步,循環(huán)結(jié)束,返回。2.2AMRLC實(shí)體接收側(cè)SDU重組2.2.1 模塊介紹2.2.1.1 功能需求AMRLC實(shí)體的接收側(cè)收到RLC數(shù)據(jù)PDU后,它:將完成重排序的RLC數(shù)據(jù)PDU(完整的PDU)重組成RLCSDU,并將完成重組的RLCSDU按序遞交給高層2.2.1.2 算法描述將落在接收窗外的SN所對應(yīng)的AMDPDU的任何字節(jié)分段和SN=VR(R)的AMDPDU的連續(xù)字節(jié)分段進(jìn)行重組:從最小SN的AMDPDU或A

29、MDPDU分段開始,循環(huán)遍歷下一個SN的AMDPDU或AMDPDU分段。每次循環(huán),有下面2種情況:?對AMDPDU:根據(jù)E域和LI域,順序遍歷AMDPDU的數(shù)據(jù)域元素,把該P(yáng)DU的數(shù)據(jù)域進(jìn)行重組,重組時去掉RLC頭:如果重組后的RLCSDU之前沒有遞交過,將完成重組的RLCSDU按序遞交給高層;將沒有完成重組的RLCSDU保留,等到下一次繼續(xù)重組。?對AMDPDU分段:首先根據(jù)LSF域和SO域?qū)MDPDU分段重組為AMDPDU,然后再根據(jù)同上把AMDPDU重組為RLCSDU。?按當(dāng)前遍歷的相同SN的AMDPDU分段在原AMDPDU中的順序,把該AMDPDU的可以被重組的連續(xù)的字節(jié)分段進(jìn)行重組

30、,重組時去掉RLC頭。2.2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計PDULeft:結(jié)構(gòu)類型,表示每次重組之后,沒有完成重組的RLCSDU的相關(guān)信息,用于下一次按序重組,包含下面的成員:SN_Left:整型變量,記錄當(dāng)前沒有完成重組的RLCSDU包含的PDU的最大的SN,初始值為-1;若某次重組之后,當(dāng)前被重組的UMDPDU的數(shù)據(jù)域有剩余,SN_Left更新為該P(yáng)DU的SN;SDU_Left:數(shù)組,保留重組之后剩余的RLCPDU數(shù)據(jù)部分(即沒有完成重組的RLCSDU分段),也就是0個、1個或多個SDU分段。初始為空數(shù)組。注:PDULeft對象設(shè)計為靜態(tài)對象。AMD_SegContext:表示AMDPDU分段上下文,

31、包含下面的變量:SN:AMDPDU分段的SN,初始為-1;SO:沒有被全部重組的AMDPDU分段在原AMDPDU中的偏移量;初始為0,每次重組之后更新;CSO(字節(jié)分段偏移):沒有被重組的第一個字節(jié)分段在原AMDPDU中的偏移,初始為0;LISN:沒有被重組的連續(xù)字節(jié)分段的所有的LI中,順序最小的LI的序號;初始為1;LISN=0表示這些連續(xù)字節(jié)分段是AMDPDU最后一個數(shù)據(jù)域元素;LISN=k(正整數(shù)),表示這些連續(xù)字節(jié)分段對應(yīng)的順序最小的LI的序號。注:AMD_SegContext對象設(shè)計為靜態(tài)對象。開始PDULeft初家初始化,AMD_SegContext劉家初始化Y循環(huán)對落在接收窗外的

32、SN勺RLCPDU(s)重組是否結(jié)束?原AMDPDURF=QN_.如果PD以固定部分FI的第一位為對象的_-PDULeft把UMDPDU的第一個數(shù)據(jù)域元素直接重組為RLCSDU把AMDPDU第一,PDULeft對象的SDUSI組為個數(shù)據(jù)域元素和RLCSDU.SN=xV.-.T-YPD聯(lián)固頂部分哪=1?將完成重組的RLCSDU按序遞交給高層;TN當(dāng)前E域=1?Y按序遍歷PDU-的蚌展部分下一個數(shù)據(jù)域元素的E禾口LI域;t?E-一7'數(shù)據(jù)域X-素重組為一個完整的RLCSDU;信新PDULeft升象.SN-1;SDUs0;將該完成甑組的RLCSDU按序遞交給高層;機(jī)UMDPDU的最后,個數(shù)據(jù)

33、域元素直接重組為RLCSDU落在接收窗外的最小的SN=x,循環(huán)開始對SN=x的RLCPDU進(jìn)行重組,循環(huán)結(jié)束條件:SN=VR(R);PDULeft對象初始化,以后保留上一次重組后沒有完成重組RLCSDU的信息;AMD_SegContext對象初始化,以后記錄上一次重組后AMDPDU分段的上下文信息。第1步:對SN=x的RLCPDU(s),執(zhí)行:1.如果RLCPDU頭RF域=1,表示該RLCPDUs是一些AMDPDU分段,那么:(1)執(zhí)行循環(huán),循環(huán)結(jié)束條件為LSF=1,LSF初始為0,每次循環(huán),循環(huán)體里執(zhí)行:(按SO升序)得到對應(yīng)的AMDPDU分段;(按序)把當(dāng)前AMDPDU分段的數(shù)據(jù)域串接,組

34、成AMDPDU的數(shù)據(jù)域;LSF=當(dāng)前AMDPDU分段頭的LSF域;循環(huán)回到(1);加上該AMDPDU的頭,RF域修改為0,接著轉(zhuǎn)到第2步對該AMDPDU進(jìn)行重組。附注:下面紅色的部分是上面“1的另一種方法:“(按照AMDPDU分段重組)1 .如果RLCPDU頭RF域=1,表示這些RLCPDUs是一些AMDPDU分段,那么:檢查AMDPDU分段頭E域:?如果E=0,即SN=VR(R)的原AMDPDU只有一個數(shù)據(jù)域元素,那么:執(zhí)行循環(huán),循環(huán)結(jié)束條件為LSF=1,LSF初始為0,每次循環(huán),循環(huán)體里執(zhí)行:(按SO升序)得到對應(yīng)的AMDPDU分段;(按序)把當(dāng)前AMDPDU分段的數(shù)據(jù)域串接,重組為RLC

35、SDU;LSF=當(dāng)前AMDPDU分段頭的LSF域;接著,檢查分段頭FI域:如果FI的第一位為1,那么重組后的RLCSDU是一個SDU的后面分段,顯然PDULeft對象的SDUs成員保留了該SDU的前面分段,那么:將這2個SDU分段按序重組為一個RLCSDU;這時,* 如果FI的后一位為0,那么:更新PDULeft對象:SN=-1;SDUs清空;將完成重組的RLCSDU按序遞交給高層;幸否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;否則,F(xiàn)I的第一位為0,且* 如果FI的后一位為0,那么:將該完成重組的RLCSDU按序遞交給高層;更

36、新PDULeft對象:SN=-1;SDUs清空;$否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;更新AMD_SegContext對象:(初始值)CSO=0;SN=-1;LISN=1;SO=0;x=x+1;循環(huán)回到第1步;?否則E域=1,即該SN的AMDPDU有多個數(shù)據(jù)域元素,那么:檢查AMD_SegContext對象的SN是否指示接收窗外最小的SN:如果SN=x,即在上次重組過程中,該RLCPDUs的一部分連續(xù)的字節(jié)分段已經(jīng)被重組為RLCSDU,那么:4如果LISN=0,即剩下的RLCPDUs對應(yīng)于原AMDPDU的最后的數(shù)據(jù)域元素

37、,那么:設(shè)置循環(huán)變量E=0;(轉(zhuǎn)到(1)否則,SN=x的RLCPDUs不是最小SN的AMDPDU分段。(1)執(zhí)行循環(huán):循環(huán)結(jié)束條件為E=0,(循環(huán)變量E初始為1),在循環(huán)體里,執(zhí)行:根據(jù)AMD_SegContext對象的LISN,找至UAMDPDU分段頭擴(kuò)展部分的第LISN個E和LI域;更新循環(huán)變量E=第LISN個E域;計算得到長度為LI的連續(xù)字節(jié)分段,返回當(dāng)前的AMDPDU分段的SO;(計算時,用到SO和AMDPDU分段長)檢查CSO,判斷這些連續(xù)的字節(jié)分段是否從第一個字節(jié)分段開始的,即:如果CSO=0且分段頭FI的第一位為1,即這些第一個連續(xù)字節(jié)分段是一個SDU的后面分段,顯然PDULef

38、t對象的SDUs成員保留了該SDU的前面分段,那么:將這2個SDU分段按序重組為RLCSDU;將該完成重組的RLCSDU按序遞交給高層;否則,CSO!=0或FI的第一位為0,那么:把這些連續(xù)字節(jié)分段重組為RLCSDU;將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;更新AMD_SegContext對象:CSO=CSO+LI;如果E=1,LISN+;否則LISN=0;如果LI=length-CSO,SO二當(dāng)前AMDPDU分段的SO十分段長度;否則(LI<length-CSO)SO-當(dāng)前AMDPDU分段的SO;循環(huán)回到(1);循環(huán)結(jié)束后,即循環(huán)變量

39、E=0,那么剩下的RLCPDUs正好對應(yīng)于原AMDPDU的最后的數(shù)據(jù)域元素,那么:*執(zhí)行循環(huán),循環(huán)結(jié)束條件為LSF=1,LSF初始為0,每次循環(huán),循環(huán)體里執(zhí)行:(按SO升序)得到對應(yīng)的AMDPDU分段;(按序)把當(dāng)前AMDPDU分段的數(shù)據(jù)域用接,從而重組為RLCSDU;LSF=當(dāng)前AMDPDU分段頭的LSF域;*繼續(xù)檢查分段頭FI域如果FI的后一位為0,那么:將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;$更新AMD_SegContext對

40、象:(初始值)CSO=0;SN=-1;LISN=1;SO=0;61x=x+1;本循環(huán)回到第1步;2.如果RLCPDU頭RF域=0,檢查SN=x(x<VR(R)的AMDPDU頭FI和E域,即:?如果E=0,該AMDPDU只有一個數(shù)據(jù)域元素,又如果FI的第一位為1,那么該AMDPDU的第一個數(shù)據(jù)域元素是一個SDU的后面分段,顯然PDULeft對象的SDUs成員保留了該SDU的前面分段,那么:去掉PDU頭,將這2個SDU分段按序重組(SN升序)為RLCSDU;這時,$如果FI的后一位為0,那么:更新PDULeft對象:SN=-1;SDUs清空;將完成重組的RLCSDU按序遞交給高層;*否則FI

41、的后一位為1,那么更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;否則,F(xiàn)I的第一位為0,那么:去掉PDU頭,把PDU的數(shù)據(jù)域直接重組為RLCSDU;這時,$如果FI的后一位為0,那么:將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;*否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;x=x+1;循環(huán)回到第1步;?否則E=1,該UMDPDU有多個數(shù)據(jù)域元素,那么:(一)遍歷PDU頭擴(kuò)展部分第一個數(shù)據(jù)域元素的E和LI域,該數(shù)據(jù)域元素長度二LI;然后判斷:如果F

42、I的第一位為1,該UMDPDU的第一個數(shù)據(jù)域元素是一個SDU的后面分段,顯然PDULeft對象的SDUs成員保留了該SDU的前面分段,那么:將這2個SDU分段按序重組為RLCSDU;將完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;否則FI的第一位為0,那么:把第一個數(shù)據(jù)域元素直接重組為RLCSDU;將完成重組的RLCSDU按序遞交給高層;(二)檢查當(dāng)前遍歷的E域,循環(huán)執(zhí)行下面的操作:?如果E=0,該AMDPDU只剩下的最后一個數(shù)據(jù)域元素,那么:把PDU的最后一個數(shù)據(jù)域元素直接重組為RLCSDU;如果FI的后一位為0,那么:將該完成重組的RLCSDU按序

43、遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;否則FI的后一位為1,那么:更新PDULeft對象:SN=x;SDUs=當(dāng)前重組后沒有完成重組的RLCSDU;x=x+1;循環(huán)回到第1步;?否則E=1,該UMDPDU還剩下多個數(shù)據(jù)域元素,那么:按序遍歷PDU頭的擴(kuò)展部分下一個數(shù)據(jù)域元素的E和LI域,下一個數(shù)據(jù)域元素長度=LI;直接把下一個數(shù)據(jù)域元素重組為一個完整的RLCSDU;將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;循環(huán)回到(二)。第2步:嘗試對SN=VR(R)的未完整接收的AMDPDU的連續(xù)字節(jié)分段進(jìn)行重組:有下面的例子:對SN

44、=VR(R)的未完整接收的AMDPDU的連續(xù)字節(jié)分段進(jìn)行重組,第3個分段還沒有接收到。PDULeft對象:SDUs:RLC SDUSN=VR(R-1原SN=VR(R)的AMDPDU頭RLCSDU1(分段)1rLcSDU21rRlCSDU31RLCSDU4(分段)FI=11固定部分E=1SN=VR(RO的AMDPDU段:分段頭數(shù)據(jù)2FI = 11固定部分E=1SO =數(shù)據(jù)1長 LSF=0分段頭數(shù)據(jù)1(分為3段)FI=11固定部分E=1SO=0LSF=0分段頭數(shù)據(jù)3FI=11固定部分E=1SO=數(shù)據(jù)1長+數(shù)據(jù)2長LSF=1-如果沒有接收到SN=VR(R)的AMDPDU任何字節(jié)分段,RLCSDU重組

45、結(jié)束,返回。-否則,嘗試對從AMDPDU第一個字節(jié)分段開始的連續(xù)的字節(jié)分段進(jìn)行重組,第一個不連續(xù)的字節(jié)分段之后的所有字節(jié)分段不進(jìn)行重組,那么:檢查所有的AMDPDU分段頭的SO:?如果最小的SO>0,不又t該AMDPDU的任何字節(jié)分段進(jìn)行重組,RLCSDU重組結(jié)束,返回。?如果最小的SO=0,那么:檢查AMDPDU分段頭E域:如果E=0,即SN=VR(R)的AMDPDU只有一個數(shù)據(jù)域元素,顯然這些字節(jié)分段不能被重組,那么:RLCSDU重組結(jié)束,返回。否則E=1,即SN=VR(R)的AMDPDU有多個數(shù)據(jù)域元素,那么:計算未被重組的連續(xù)AMDPDU分段的總長度(設(shè)為length);(1)執(zhí)

46、行結(jié)束條件為E=0的循環(huán)(表示遍歷到AMDPDU的最后的未完整接收的數(shù)據(jù)域元素),在循環(huán)體里,執(zhí)行:得到AMDPDU分段頭擴(kuò)展部分的第LISN個E和LI域;更新循環(huán)條件的E=當(dāng)前E域;比較LI和lengthCSO,即:?如果LI=<length-CSO,從CSO開始長度為LI的連續(xù)字節(jié)分段可以被重組,那么:計算得到長度為LI的連續(xù)字節(jié)分段,以及當(dāng)前的AMDPDU分段的SO如果CSO=0且分段頭FI的第一位為1,即這些第一個連續(xù)字節(jié)分段是一個SDU的后面分段,顯然PDULeft對象的SDUs成員保留了該SDU的前面分段,那么:將這2個SDU分段按序重組為RLCSDU;將該完成重組的RLCS

47、DU按序遞交給高層;否則,CSO!=0或FI的第一位為0,那么:把這些連續(xù)字節(jié)分段重組為RLCSDU;將該完成重組的RLCSDU按序遞交給高層;更新PDULeft對象:SN=-1;SDUs清空;更新length:length=length-LI;更新AMD_SegContext對象:CSO=CSO+LI;SN=VR(R);如果E=1,LISN+;否則LISN=0;如果LI=length-CSO,SO二當(dāng)前AMDPDU分段的SO十分段長度;否貝U(LI<length-CSO)$0=當(dāng)前AMDPDU分段的SO;循環(huán)回到(1);?如果LI>length-CSO,沒有滿足長度為LI的連續(xù)字節(jié)分段,那么:退出循環(huán),RLCSDU重組結(jié)束。循環(huán)結(jié)束,返回。最后,關(guān)于上面的例子:RLCSDU1、RLCSDU2提交給高層;更新AMD_SegContext對象:CSO=LIi+LI2;SN=VR(R);LISN=3;SO=數(shù)據(jù)1長3實(shí)例、分段和串接RLC SDUnn+1n+2n+3n+4RLC headerRLC PDU2RLC headerRLC headerSN=1RLC header4最主要的就是要確定RLCPDU頭的位域RLCPDU數(shù)據(jù)域只有一個RLCSDU或RLCSDU分段SN=1:數(shù)據(jù)域剛好是一個RLCSDU前面部分分段PD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論