73 lines
3.0 KiB
Plaintext
73 lines
3.0 KiB
Plaintext
msc {
|
|
hscale=2;
|
|
ms [label="MS/BTS"], lchan[label="BSC lchan FSM"], ass[label="BSC Assignment FSM"],
|
|
gscon[label="BSC conn FSM"], msc_[label="MSC"];
|
|
|
|
ms note msc_ [label="lchan allocation sequence for BSSMAP Assignment Request"];
|
|
|
|
gscon <= msc_ [label="BSSMAP Assignment Request"];
|
|
gscon note gscon [label="GSCON_EV_ASSIGNMENT_START\n data=struct assignment_request"];
|
|
gscon abox gscon [label="ST_ASSIGNMENT"];
|
|
ass <- gscon [label="assignment_fsm_start()"];
|
|
ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ACTIVE"];
|
|
|
|
|||;
|
|
--- [label="On any error (no lchan, etc.)"];
|
|
ass box ass [label="on_assignment_failure()"];
|
|
ass => msc_ [label="BSSMAP Assignment Failure"];
|
|
ass abox ass [label="terminate"];
|
|
ass -> gscon [label="GSCON_EV_ASSIGNMENT_END"];
|
|
gscon abox gscon [label="ST_ACTIVE"];
|
|
---;
|
|
|||;
|
|
lchan abox lchan [label="UNUSED"];
|
|
ass box ass [label="conn->assignment.new_lchan = lchan_select_by_chan_mode()"];
|
|
lchan <- ass [label="lchan_activate(FOR_ASSIGNMENT)"];
|
|
lchan abox lchan [label="WAIT_TS_READY"];
|
|
lchan rbox lchan [label="most details omitted, see lchan_fsm and lchan_rtp_fsm diagrams"];
|
|
...;
|
|
|||;
|
|
--- [label="on lchan FSM error or timeout"];
|
|
lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ERROR"];
|
|
ass box ass [label="on_assignment_failure()"];
|
|
ass rbox gscon [label="See 'On any error' above"];
|
|
--- [label="END: 'on error'"];
|
|
...;
|
|
...;
|
|
|
|
lchan abox lchan [label="LCHAN_ST_WAIT_ACTIV_ACK"];
|
|
ms <= lchan [label="RSL Chan Activ"];
|
|
...;
|
|
ms => lchan [label="RSL Chan Activ ACK"];
|
|
lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ACTIVE"];
|
|
ass abox ass [label="ASSIGNMENT_ST_\nWAIT_RR_ASS_COMPLETE"];
|
|
ms <= ass [label="RR Assignment Command"];
|
|
lchan note ass [label="The lchan FSM will continue with RSL and RTP while the Assignment FSM waits.
|
|
ASSIGNMENT_EV_LCHAN_ESTABLISHED means that both RSL and RTP are established.
|
|
Usually, RTP will be done first, and the ASSIGNMENT_EV_LCHAN_ESTABLISHED may be
|
|
received even before ASSIGNMENT_EV_RR_ASSIGNMENT_COMPLETE.
|
|
assignment_fsm_wait_lchan_established_onenter() decides whether to wait or not."];
|
|
...;
|
|
ms => lchan [label="RSL EST IND"];
|
|
lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ESTABLISHED",ID="(may come as early as this, or...)"];
|
|
ms => ass [label="RR Assignment Complete (came with EST IND)"];
|
|
ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ESTABLISHED"];
|
|
--- [label="IF lchan is not in LCHAN_ST_ESTABLISHED yet (waiting for RTP)"];
|
|
...;
|
|
lchan rbox lchan [label="when lchan RTP FSM is done with setting up RTP"];
|
|
lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ESTABLISHED",ID="(...may come only now)"];
|
|
---;
|
|
ass abox ass [label="ASSIGNMENT_ST_WAIT_\nMGW_ENDPOINT_TO_MSC"];
|
|
ass -> gscon [label="gscon_connect_mgw_to_msc()"];
|
|
...;
|
|
ass <- gscon [label="ASSIGNMENT_EV_MSC_MGW_OK"];
|
|
ass box ass [label="assignment_success()"];
|
|
ass => msc_ [label="BSSMAP Assignment Complete"];
|
|
ass -> gscon [label="gscon_change_primary_lchan()"];
|
|
lchan <- gscon [label="LCHAN_RTP_EV_ESTABLISHED"];
|
|
ass abox ass [label="terminate"];
|
|
ass -> gscon [label="GSCON_EV_ASSIGNMENT_END"];
|
|
gscon abox gscon [label="ST_ACTIVE"];
|
|
|
|
}
|