這幾天想了解BS是如何形成frame,因此就去k了bssscheduler.cc 囧(呼...真難吃),在bsscheduler.cc中,我覺得它比較重要的有幾個部份: 1. init(), 2. process(Packet *p), 3. start_ulsubframe(), 4. star_dlsubframe(). 以下將敘述init()這個member function (若是有錯就麻煩糾正一下嚕^^)---
Step1. 首先會利用Frameduration time / PS (number fo Phy Slot)的duration time來得到PS的數量.
Step2. 產生用來broadcast的Profile,設定Interval Usage Code (IUC),以及設定Preamble的大小(單位為symbols).
Step3. 產生Burst(0)來carry broadcast message,並設定Cid為(BROADCAST_CID), IUC, Starttime, INIT_DL_DURATION, Preamble等等參數.另外產生Burst(1),也設定其IUC (DIUC_END_OF_MAP)以及其start time (INIT_DL_DURATION).
Step4. Create initial ranging. 先計算starttime, slotleft, rangingslot (slotleft/2), rangingduration, bwduration (duration的單位都是symbols),計算好後產生一個Profile,並將其IUC設為UIUC_INITIAL_RANGING, 接著為BW requset取得contention slots,並透過InitRangingopportunity得到nbPS,並將其設為contention slots的大小,再分別設定Backoff_star/stop.設定好這些參數後,實際產生Burst(0),並在Subframe第0的位置增加PDU,其IUC設為UIUC_INITIAL_RANGING,start time設為0.到此以完整產生出一uplink burst接收initial ranging request.
Step5. 產生一bw request配給相對應的burst與PDU.先產生一profile並將其IUC設為UIUC_REQ_REGION_FULL,利用getBw_req()取得BW request的contention slot,取回slot後分別設定slot的Size, Backoff_star/stop,接著產生Burst(0),並在Subframe第1的位置增加PDU,設定IUC為UIUC_REQ_REGION_FULL,以及設定相對應的Duration與Starttime.(start after the ranging slot)
Step6. 設定End of map. 產生Burst(0),並在Subframe第2的位置增加PDU,以及設定IUC為UIUC_END_OF_MAP,start time則為ranginnduration+bwduration.
Step7. Schedule the first frame by using a random & start the DCD, UCD and NBRADV timer (DCD=Downlink Channel Descriptor UCD=Uplink Channel Descriptor)
End~
沒有留言:
張貼留言