| 帮同学宣传一下http://shop57644665.taobao.com/ |
当MS选择了一个不同的小区后,MM就需要开始进行location updating.此时MM的状态应该是IDLE ATTEMPT TO UPDATE.。
如果Location Update被接受,则RR会返回如下原语
MM在处理RR_DATA_IND(Location Update Accept)是会先停掉Timer T3212,T3210,然后将MM的 mm_data->reg.update_stat = MS_UPDATED;
在RR_DATA_IND中会带有Mobile Identity的类型。Mobile Identity的类型可能是TMSI,IMSI,IMEI或者为空
MM对应不同的Mobile Identity处理如下:
MM会先reallocation TMSI,然后将RR_DATA_IND中的TMSI保存在MM信息的reg.tmsi中,然后向RR发送BSIZE_U_TMSI_REALLOC_COMP,保存RR_DATA_IND的lai信息,然后发送RR_SYNC_REQ(rr_sync_req_tmsi),最后发送RR_SYNC_REQ (Location Area allowed)。
对应代码如下:
MCAST (tmsi_realloc_comp, U_TMSI_REALLOC_COMP);
/* Save TMSI in MM registration data */
mm_store_tmsi (&loc_upd_accept->mob_id);
/* Send RR_DATA_REQ (TMSI_REALLOC_COMPLETE) */
tmsi_realloc_comp->msg_type = U_TMSI_REALLOC_COMP;
for_data_req (BSIZE_U_TMSI_REALLOC_COMP);
mm_data->reg.lai = loc_upd_accept->loc_area_ident;
/* Send RR_SYNC_REQ */
mm_build_rr_sync_req_tmsi ();
/* Send RR_SYNC_REQ (Location Area allowed) */
mm_build_rr_sync_req_cause (SYNCCS_LAI_ALLOW);
MM会先删除存储的TMSI,保存RR_DATA_IND的lai信息,然后通过RR_SYNC_REQ向RR说明TMSI已经失效,最后发送RR_SYNC_REQ (Location Area allowed)。
对应代码如下:
mm_data->reg.tmsi = TMSI_INVALID_VALUE;
mm_build_rr_sync_req_cause (SYNCCS_TMSI_INVAL);
mm_data->reg.lai = loc_upd_accept->loc_area_ident;
mm_build_rr_sync_req_cause (SYNCCS_LAI_ALLOW);

MM只会创建一个BSIZE_B_MM_STATUS发送给RR,MM似乎会将这个mobile identity忽略掉。
对应代码如下:
MCAST (mm_status, B_MM_STATUS);
mm_build_mm_status (RC_INCORRECT_MESSAGE, mm_status);
for_data_req (BSIZE_B_MM_STATUS);
MM直接向RR发送RR_SYNC_REQ (Location Area allowed)。
对应代码如下:
mm_data->reg.lai = loc_upd_accept->loc_area_ident;
mm_build_rr_sync_req_cause (SYNCCS_LAI_ALLOW);























September 26, 2009 @ 12:34 pm.
老兄,你的gsm协议栈代码是哪里搞的啊??能不能给我参考一下?