當BS收到SS所發出的MAC_MOB_SCN_REQ packet時,會執行process_scan_request (p),但是此member function主要是在wimaxctrlagent.cc內(不知道為何要把它寫在別的file~),以下將會敘述此function的流程---
Step1. 首先產生Scan_req物件entry,並且設定一些哩哩摳摳的參數,例如:delay, cid...等等.接著把scan_req的表頭加到list中.
Step2. 利用switch/case來判斷目前的default_association_level_為何.level主要有分成三種: (1) Scan without association, (2) Association without coordination, (3) Association with coordination.若是level為case1則透過entry來設定mac802_16_mob_scn_rsp_frame的相關參數;接著再根據nbmapentry_,依序將maptable_[i][0]內的值(第一row,紀錄node的mac address)放入rec_bs_full[]的recommended_bs_id(這個值似乎是紀錄被推薦的BS id),以及把scanning_type設為SCAN_WITHOUT_ASSOC,把被推薦的BS id都記錄好後,利用send_scan_response()把response傳回去.送回去後把entry remove~~.
Step2-2. 若是level為case2,跟Step2一樣設定mac802_16_mob_scn_rsp_frame的相關參數,把maptable_[][] 內的值放入rec_bs_full[]的recommended_bs_id,不同的是把scanning_type設為SCAN_ASSOC_LVL0,後續的動作則相同於Step2.
Step2-3. 若是level為case2,則會先將n_recommended_bs_index, n_recommended_bs_full, pending_rsp ()歸零,再根據nbmapentry_依序設定許多參數.先將wimax bs的type設為WIMAX_BS_SYNCH_REQ,將maptable_[][]設為目的地的address,接著利用port()取出目的端的port(應該是這樣XD),再經由getPeerNode取的設定Mac address.再來設定cid, scanning type, rdvt, rendezvous_time (不知道rdvt, rendezvous_time是作啥用的 囧),然後執行sned() (不知道是不是用這個function把packet送給SS).接著設定n_recommended_bs_full, recommended_bs_id,scanning_type以及rdv_time.最後,在初始化response()下的各參數.
沒有留言:
張貼留言