Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 1 | msc { |
| 2 | hscale=3; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 3 | ms [label="MS/BTS"], bsc_lchan[label="BSC lchan FSM"], |
| 4 | bsc_gscon[label="BSC conn FSM"], bsc_mgcp[label="BSC mgcp FSM"], mgw_msc[label="MGW/MSC"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 5 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 6 | ms note mgw_msc [label="lchan allocation sequence for BSSMAP Assignment Request"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 7 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 8 | bsc_gscon <= mgw_msc [label="BSSMAP Assignment Request"]; |
| 9 | bsc_gscon abox bsc_gscon [label="ST_ASSIGNMENT_\nWAIT_LCHAN"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 10 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 11 | bsc_lchan <- bsc_gscon [label="lchan_select_by_chan_mode(chan_mode)"]; |
| 12 | |||; |
| 13 | --- [label="IF returned lchan is NULL"]; |
| 14 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Failure"]; |
| 15 | bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; |
| 16 | ---; |
| 17 | |||; |
| 18 | bsc_gscon box bsc_gscon [label="store lchan pointer in conn->lchan_for_assignment"]; |
| 19 | bsc_lchan <- bsc_gscon [label="lchan_activate(FOR_ASSIGNMENT)"]; |
| 20 | ...; |
| 21 | |||; |
| 22 | --- [label="on lchan FSM error or timeout"]; |
| 23 | bsc_lchan -> bsc_gscon [label="GSCON_EV_LCHAN_ALLOC_ERROR"]; |
| 24 | bsc_gscon box bsc_gscon [label="'forget' all about conn->lchan_for_assignment"]; |
| 25 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Failure"]; |
| 26 | bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; |
| 27 | --- [label="END: 'on error'"]; |
| 28 | ...; |
| 29 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 30 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 31 | --- [label="IF lchan FSM decides that it is an lchan for speech"]; |
| 32 | bsc_lchan -> bsc_gscon [label="GSCON_EV_ENSURE_MGW_ENDPOINT"]; |
| 33 | --- [label="IF there is an MGW endpoint for the BTS already (conn->user_plane.fi_bts)"]; |
| 34 | bsc_gscon -> bsc_lchan [label="LCHAN_EV_MGW_ENDPOINT_AVAILABLE"]; |
| 35 | --- [label="ELSE: no MGW endpoint for the BTS side yet"]; |
| 36 | bsc_gscon abox bsc_gscon [label="ST_ASSIGNMENT_\nWAIT_CRCX_BTS"]; |
| 37 | bsc_gscon box bsc_gscon [label="assignment_created_mgw_endpoint = true"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 38 | bsc_gscon -> bsc_mgcp [label="mgcp_conn_create()"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 39 | bsc_mgcp abox bsc_mgcp [label="ST_CRCX_RESP (MGCP_MGW_TIMEOUT = 4s)"]; |
| 40 | bsc_mgcp => mgw_msc [label="CRCX (for BTS)"]; |
| 41 | bsc_gscon note bsc_mgcp [label="conn FSM relies on mgcp FSM timeout"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 42 | ...; |
| 43 | --- [label="On Timeout"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 44 | bsc_mgcp note bsc_mgcp [label="On timeouit, the MGCP FSM will terminate, emitting the parent_term |
| 45 | event set upon mgcp_conn_create():"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 46 | bsc_mgcp -> bsc_gscon [label="GSCON_EV_MGW_FAIL_BTS"]; |
| 47 | bsc_gscon note bsc_gscon [label="GSCON_EV_MGW_FAIL_BTS is handled by the conn FSM allstate |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 48 | handler. It sets conn->user_plane.fi_bts = NULL."]; |
| 49 | bsc_gscon -> bsc_lchan [label="LCHAN_EV_MGW_ENDPOINT_ERROR"]; |
| 50 | bsc_lchan note bsc_gscon [label="conn FSM timeout handler exits and relies on the lchan FSM |
| 51 | signalling error, which should actually happen immediately:"]; |
| 52 | bsc_gscon <- bsc_lchan [label="GSCON_EV_LCHAN_ALLOC_ERROR"]; |
| 53 | bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; |
| 54 | bsc_gscon box bsc_gscon [label="'forget' all about conn->lchan_for_assignment"]; |
| 55 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Failure"]; |
| 56 | --- [label="END: 'On Timeout'"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 57 | ...; |
| 58 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 59 | bsc_mgcp <= mgw_msc [label="CRCX OK (for BTS)"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 60 | bsc_mgcp box bsc_mgcp [label="libosmo-mgcp-client fsm_crcx_resp_cb()"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 61 | bsc_mgcp abox bsc_mgcp [label="ST_READY"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 62 | bsc_mgcp -> bsc_gscon [label="GSCON_EV_MGW_CRCX_RESP_BTS"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 63 | bsc_gscon abox bsc_gscon [label="ST_ASSIGNMENT_\nWAIT_LCHAN"]; |
| 64 | bsc_gscon -> bsc_lchan [label="LCHAN_EV_MGW_ENDPOINT_AVAILABLE"]; |
| 65 | --- [label="END: lchan FSM decides that it is an lchan for speech"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 66 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 67 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 68 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 69 | bsc_lchan -> bsc_gscon [label="GSCON_EV_LCHAN_ACTIVE"]; |
| 70 | bsc_gscon abox bsc_gscon [label="ST_ASSIGNMENT_\nWAIT_COMPLETE\nT10, 6s"]; |
| 71 | ms <= bsc_gscon [label="RR Assignment"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 72 | ...; |
| 73 | --- [label="On Timeout"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 74 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Failure"]; |
| 75 | bsc_gscon -> bsc_lchan [label="LCHAN_EV_LCHAN_RELEASE"]; |
| 76 | bsc_gscon box bsc_gscon [label="'forget' all about conn->lchan_for_assignment"]; |
| 77 | --- [label="IF assignment_created_mgw_endpoint == true"]; |
| 78 | bsc_gscon -> bsc_mgcp [label="mgcp_conn_delete()"]; |
| 79 | bsc_gscon note bsc_mgcp [label="If the MGW endpoint didn't exist before the Assignment, release |
| 80 | it now. If there was one before this, it is probably still in use by a previous lchan, so |
| 81 | keep it in place."]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 82 | bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 83 | --- [label="END: 'On Timeout'"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 84 | ...; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 85 | ms => bsc_gscon [label="RR Assignment Complete"]; |
| 86 | bsc_gscon -> bsc_lchan [label="OLD lchan: LCHAN_EV_LCHAN_RELEASE"]; |
| 87 | bsc_gscon box bsc_gscon [label="conn->lchan = conn->lchan_for_assignment"]; |
| 88 | --- [label="IF: chan_mode a speech mode?"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 89 | bsc_gscon abox bsc_gscon [label="ST_WAIT_MDCX_BTS"]; |
| 90 | bsc_gscon -> bsc_mgcp [label="mgcp_conn_modify()"]; |
| 91 | bsc_mgcp note bsc_mgcp [label="same mgcp FSM as above, for BTS side"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 92 | bsc_mgcp abox bsc_mgcp [label="ST_MDCX_RESP"]; |
| 93 | bsc_mgcp => mgw_msc [label="MDCX (for BTS)"]; |
| 94 | ...; |
| 95 | --- [label="On Timeout"]; |
| 96 | bsc_gscon -> bsc_lchan [label="LCHAN_EV_RELEASE"]; |
| 97 | bsc_gscon -> bsc_mgcp [label="mgcp_conn_delete()"]; |
| 98 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Failure"]; |
| 99 | bsc_gscon abox bsc_gscon [label="ST_WAIT_CLEAR_CMD"]; |
| 100 | bsc_gscon => mgw_msc [label="BSSMAP Clear Request"]; |
| 101 | --- [label="END: 'On Timeout'"]; |
| 102 | ...; |
| 103 | bsc_mgcp <= mgw_msc [label="MDCX OK"]; |
| 104 | bsc_mgcp abox bsc_mgcp [label="ST_READY"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 105 | bsc_mgcp -> bsc_gscon [label="GSCON_EV_MGW_MDCX_RESP_BTS"]; |
| 106 | bsc_gscon abox bsc_gscon [label="ST_WAIT_CRCX_MSC"]; |
| 107 | bsc_gscon -> bsc_mgcp [label="mgcp_conn_create()"]; |
| 108 | bsc_mgcp note bsc_mgcp [label="second mgcp FSM for MSC side"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 109 | bsc_mgcp => mgw_msc [label="CRCX (for MSC)"]; |
| 110 | ...; |
| 111 | --- [label="On Timeout"]; |
| 112 | bsc_gscon -> bsc_lchan [label="LCHAN_EV_RELEASE"]; |
| 113 | bsc_gscon -> bsc_mgcp [label="mgcp_conn_delete()"]; |
| 114 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Failure"]; |
| 115 | bsc_gscon abox bsc_gscon [label="ST_WAIT_CLEAR_CMD"]; |
| 116 | bsc_gscon => mgw_msc [label="BSSMAP Clear Request"]; |
| 117 | --- [label="END: 'On Timeout'"]; |
| 118 | ...; |
| 119 | bsc_mgcp <= mgw_msc [label="CRCX OK (for MSC)"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 120 | bsc_gscon <- bsc_mgcp [label="GSCON_EV_MGW_CRCX_RESP_MSC"]; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 121 | --- [label="END: chan_mode a speech mode?"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 122 | |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame^] | 123 | bsc_gscon => mgw_msc [label="BSSMAP Assignment Complete"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 124 | |
| 125 | bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; |
| 126 | } |