Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 1 | msc { |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 2 | hscale=2; |
| 3 | ms [label="MS/BTS"], lchan[label="BSC lchan FSM"], ass[label="BSC Assignment FSM"], |
| 4 | gscon[label="BSC conn FSM"], msc_[label="MSC"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 5 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 6 | ms note msc_ [label="lchan allocation sequence for BSSMAP Assignment Request"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 7 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 8 | gscon <= msc_ [label="BSSMAP Assignment Request"]; |
| 9 | gscon note gscon [label="GSCON_EV_ASSIGNMENT_START\n data=struct assignment_request"]; |
| 10 | gscon abox gscon [label="ST_ASSIGNMENT"]; |
| 11 | ass <- gscon [label="assignment_fsm_start()"]; |
Philipp Maier | 92eed41 | 2020-08-21 20:47:49 +0200 | [diff] [blame] | 12 | |||; |
| 13 | --- [label="IF current lchan supports requested channel mode (re-use)"]; |
| 14 | lchan <- ass [label="LCHAN_EV_REQUEST_MODE_MODIFY"]; |
| 15 | ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ESTABLISHED"]; |
| 16 | ass rbox ass [label="see below"]; |
| 17 | |
| 18 | |||; |
| 19 | --- [label="ELSE: if current lchan does not support requested channel mode (establish new lchan)"]; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 20 | ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ACTIVE"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 21 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 22 | |||; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 23 | --- [label="On any error (no lchan, etc.)"]; |
| 24 | ass box ass [label="on_assignment_failure()"]; |
| 25 | ass => msc_ [label="BSSMAP Assignment Failure"]; |
| 26 | ass abox ass [label="terminate"]; |
| 27 | ass -> gscon [label="GSCON_EV_ASSIGNMENT_END"]; |
| 28 | gscon abox gscon [label="ST_ACTIVE"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 29 | ---; |
| 30 | |||; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 31 | lchan abox lchan [label="UNUSED"]; |
| 32 | ass box ass [label="conn->assignment.new_lchan = lchan_select_by_chan_mode()"]; |
| 33 | lchan <- ass [label="lchan_activate(FOR_ASSIGNMENT)"]; |
| 34 | lchan abox lchan [label="WAIT_TS_READY"]; |
| 35 | lchan rbox lchan [label="most details omitted, see lchan_fsm and lchan_rtp_fsm diagrams"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 36 | ...; |
| 37 | |||; |
| 38 | --- [label="on lchan FSM error or timeout"]; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 39 | lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ERROR"]; |
| 40 | ass box ass [label="on_assignment_failure()"]; |
| 41 | ass rbox gscon [label="See 'On any error' above"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 42 | --- [label="END: 'on error'"]; |
| 43 | ...; |
| 44 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 45 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 46 | lchan abox lchan [label="LCHAN_ST_WAIT_ACTIV_ACK"]; |
| 47 | ms <= lchan [label="RSL Chan Activ"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 48 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 49 | ms => lchan [label="RSL Chan Activ ACK"]; |
| 50 | lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ACTIVE"]; |
| 51 | ass abox ass [label="ASSIGNMENT_ST_\nWAIT_RR_ASS_COMPLETE"]; |
| 52 | ms <= ass [label="RR Assignment Command"]; |
| 53 | lchan note ass [label="The lchan FSM will continue with RSL and RTP while the Assignment FSM waits. |
| 54 | ASSIGNMENT_EV_LCHAN_ESTABLISHED means that both RSL and RTP are established. |
| 55 | Usually, RTP will be done first, and the ASSIGNMENT_EV_LCHAN_ESTABLISHED may be |
| 56 | received even before ASSIGNMENT_EV_RR_ASSIGNMENT_COMPLETE. |
| 57 | assignment_fsm_wait_lchan_established_onenter() decides whether to wait or not."]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 58 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 59 | ms => lchan [label="RSL EST IND"]; |
| 60 | lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ESTABLISHED",ID="(may come as early as this, or...)"]; |
| 61 | ms => ass [label="RR Assignment Complete (came with EST IND)"]; |
| 62 | ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ESTABLISHED"]; |
| 63 | --- [label="IF lchan is not in LCHAN_ST_ESTABLISHED yet (waiting for RTP)"]; |
| 64 | ...; |
| 65 | lchan rbox lchan [label="when lchan RTP FSM is done with setting up RTP"]; |
| 66 | lchan -> ass [label="ASSIGNMENT_EV_LCHAN_ESTABLISHED",ID="(...may come only now)"]; |
| 67 | ---; |
| 68 | ass abox ass [label="ASSIGNMENT_ST_WAIT_\nMGW_ENDPOINT_TO_MSC"]; |
| 69 | ass -> gscon [label="gscon_connect_mgw_to_msc()"]; |
| 70 | ...; |
| 71 | ass <- gscon [label="ASSIGNMENT_EV_MSC_MGW_OK"]; |
| 72 | ass box ass [label="assignment_success()"]; |
| 73 | ass => msc_ [label="BSSMAP Assignment Complete"]; |
| 74 | ass -> gscon [label="gscon_change_primary_lchan()"]; |
| 75 | lchan <- gscon [label="LCHAN_RTP_EV_ESTABLISHED"]; |
| 76 | ass abox ass [label="terminate"]; |
| 77 | ass -> gscon [label="GSCON_EV_ASSIGNMENT_END"]; |
| 78 | gscon abox gscon [label="ST_ACTIVE"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 79 | |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 80 | } |