2008年4月7日 星期一

SS的Scheduler10---process_ranging_rsp (mac802_16_rng_rsp_frame *frame)

當SS從MAC收到packet後,檢查其type若是為MAC_RNG_RSP,就會執行這個member function,以下將會敘述此member function流程---

Step1. 先判斷所收到的frame其所包含的SS address是否跟自己的address一樣,是的話就進行後續動作,不是的話就把frame drop掉.

Step2. 判斷frame內的ranging status為何種型態,在code裡面有分四種型態: (1) RNG_SUCCESS, (2) RNG_ABORT, (3) RNG_CONTINUE以及(4) RNG_RERANGE這四種,但是在code中主要只有針對第一種進行相對應的procedure.

Step3. 若是frame內的ranging status為RNG_SUCCESS,則把先前產生的request移除,並且判斷sub state是否為SCANNING,是的話將取出Mac backup的state (Mac備份的資訊包含BS id, frameduration, frame_number......等等)存回state_info中,並且把此neighber當為detected.接著把frame的資訊複製到另一mac802_16_rng_rsp_frame frame中,以及在scanning期間設定UCD message,並且變更到另一channel.

Step4. 若是sub state不是為SCANNING,則分別取出basic/primary connect.判斷basic connect是否為null以及其connection id是否跟傳回的frame basic id一樣,若是一樣則表示收到同一BS所回傳的frame,則不進行後續動作.若是不同且basic connect不為null,則把舊的basic/primary/secondary/outdate/indata connect刪除.利用所收到的mac802_16_rng_rsp_frame frame內其包含的basic/primary cid產生新的basic/parmary/upbasic/upprimary connection.並且透過這些connection把BS新增為peer node,並且將這些cid紀錄起來.

Step5. 把Mac state設為MAC802_16_REGISTER,並且執行send_registration().

End~~

沒有留言: