| msc { |
| hscale=2; |
| ms [label="MS"], bts [label="BTS"], bsc[label="BSC"], bsc_lchan[label="BSC lchan FSM"], |
| bsc_gscon[label="BSC conn FSM"], msc_[label="MSC"]; |
| |
| ms note bsc_gscon [label="various lchan release scenarios"]; |
| |
| ms rbox msc_ [label="MSC releases"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_ACTIVE"]; |
| bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; |
| bsc_gscon <= msc_ [label="BSSMAP Clear Command"]; |
| bsc_gscon abox bsc_gscon [label="ST_CLEARING"]; |
| bsc_gscon => msc_ [label="BSSMAP Clear Complete"]; |
| bsc_gscon -> bsc_lchan [label="LCHAN_EV_RELEASE"]; |
| --- [label="IF SAPIs besides SAPI[0] are active"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nSAPIS_RELEASED\nT3109"]; |
| bts <= bsc_lchan [label="RSL Release Request (Local End)..."]; |
| bts <= bsc_lchan [label="...for each SAPI, except link_id=0"]; |
| ms <= bsc_lchan [label="RR Channel Release"]; |
| bts <= bsc_lchan [label="RSL Deactivate SACCH",ID="if appropriate pchan"]; |
| ...; |
| bts => bsc_lchan [label="RSL Release ACKs"]; |
| --- [label="END: SAPIs besides SAPI[0] are active"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nBEFORE_RF_RELEASE\nT3111"]; |
| bsc_lchan -> bsc_gscon [label="GSCON_EV_FORGET_LCHAN"]; |
| bsc_gscon note bsc_gscon [label="has already forgotten the lchan above."]; |
| ...; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nRF_RELEASE_ACK\n4s"]; |
| bts <= bsc_lchan [label="RSL RF Channel Release"]; |
| ...; |
| bts => bsc_lchan [label="RSL RF Channel Release ACK"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_UNUSED"]; |
| ...; |
| ...; |
| |
| ms rbox msc_ [label="BSC releases, outside of conn FSM's flow"]; |
| bsc -> bsc_lchan [label="LCHAN_EV_RELEASE"]; |
| --- [label="IF SAPIs besides SAPI[0] are active"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nSAPIS_RELEASED\nT3109"]; |
| bts <= bsc_lchan [label="RSL Release Request (Local End)..."]; |
| bts <= bsc_lchan [label="...for each SAPI, except link_id=0"]; |
| ms <= bsc_lchan [label="RR Channel Release",ID="if conn is present"]; |
| bts <= bsc_lchan [label="RSL Deactivate SACCH",ID="if appropriate pchan"]; |
| ...; |
| bts => bsc_lchan [label="RSL Release ACKs"]; |
| --- [label="END: SAPIs besides SAPI[0] are active"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nBEFORE_RF_RELEASE\nT3111"]; |
| bsc_lchan -> bsc_gscon [label="GSCON_EV_FORGET_LCHAN"]; |
| bsc_gscon note bsc_gscon [label="conn FSM notices that its primary lchan is gone"]; |
| bsc_gscon => msc_ [label="BSSMAP Clear Request"]; |
| bsc_gscon abox bsc_gscon [label="ST_WAIT_CLEAR_CMD"]; |
| ...; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nRF_RELEASE_ACK\n4s"]; |
| bts <= bsc_lchan [label="RSL RF Channel Release"]; |
| ...; |
| bts => bsc_lchan [label="RSL RF Channel Release ACK"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_UNUSED"]; |
| ...; |
| bsc_gscon <= msc_ [label="BSSMAP Clear Command"]; |
| bsc_gscon abox bsc_gscon [label="ST_CLEARING"]; |
| bsc_gscon => msc_ [label="BSSMAP Clear Complete"]; |
| ...; |
| ...; |
| |
| ms rbox msc_ [label="MS releases"]; |
| ms => bts [label="DISC"]; |
| bts => bsc_lchan [label="RLL Release Ind..."]; |
| bts => bsc_lchan [label="...for each SAPI"]; |
| bsc_lchan note bsc_lchan [label="The lchan FSM notices when all SAPIs have been released"]; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nBEFORE_RF_RELEASE\nT3111"]; |
| ...; |
| bsc_lchan abox bsc_lchan [label="LCHAN_ST_WAIT_\nRF_RELEASE_ACK\n4s"]; |
| bts <= bsc_lchan [label="RSL RF Channel Release"]; |
| bsc_lchan -> bsc_gscon [label="GSCON_EV_FORGET_LCHAN"]; |
| bsc_gscon note bsc_gscon [label="conn FSM notices that its primary lchan is gone"]; |
| bsc_gscon => msc_ [label="BSSMAP Clear Request"]; |
| bsc_gscon abox bsc_gscon [label="ST_WAIT_CLEAR_CMD"]; |
| ...; |
| bts => bsc_lchan [label="RSL RF Channel Release ACK"]; |
| ...; |
| bsc_gscon <= msc_ [label="BSSMAP Clear Command"]; |
| bsc_gscon => msc_ [label="BSSMAP Clear Complete"]; |
| } |