blob: 9f10ea1babecf8e14594fe4611c123a6b442e8d5 [file] [log] [blame]
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02001msc {
2 hscale=3;
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +02003 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 Hofmeyr71e5a822018-05-26 23:53:31 +02005
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +02006 ms note mgw_msc [label="lchan allocation sequence for BSSMAP Assignment Request"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02007
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +02008 bsc_gscon <= mgw_msc [label="BSSMAP Assignment Request"];
9 bsc_gscon abox bsc_gscon [label="ST_ASSIGNMENT_\nWAIT_LCHAN"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020010
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020011 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 Hofmeyr71e5a822018-05-26 23:53:31 +020030
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020031 --- [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 Hofmeyr71e5a822018-05-26 23:53:31 +020038 bsc_gscon -> bsc_mgcp [label="mgcp_conn_create()"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020039 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 Hofmeyr71e5a822018-05-26 23:53:31 +020042 ...;
43 --- [label="On Timeout"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020044 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 Hofmeyr71e5a822018-05-26 23:53:31 +020046 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 Hofmeyr44fcc9f2018-05-28 14:29:49 +020048 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 Hofmeyr71e5a822018-05-26 23:53:31 +020057 ...;
58
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020059 bsc_mgcp <= mgw_msc [label="CRCX OK (for BTS)"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020060 bsc_mgcp box bsc_mgcp [label="libosmo-mgcp-client fsm_crcx_resp_cb()"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020061 bsc_mgcp abox bsc_mgcp [label="ST_READY"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020062 bsc_mgcp -> bsc_gscon [label="GSCON_EV_MGW_CRCX_RESP_BTS"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020063 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 Hofmeyr71e5a822018-05-26 23:53:31 +020066 ...;
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020067 ...;
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020068
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020069 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 Hofmeyr71e5a822018-05-26 23:53:31 +020072 ...;
73 --- [label="On Timeout"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020074 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 Hofmeyr71e5a822018-05-26 23:53:31 +020082 bsc_gscon abox bsc_gscon [label="ST_ACTIVE"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020083 --- [label="END: 'On Timeout'"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020084 ...;
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020085 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 Hofmeyr71e5a822018-05-26 23:53:31 +020089 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 Hofmeyr44fcc9f2018-05-28 14:29:49 +020092 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 Hofmeyr71e5a822018-05-26 23:53:31 +0200105 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 Hofmeyr44fcc9f2018-05-28 14:29:49 +0200109 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 Hofmeyr71e5a822018-05-26 23:53:31 +0200120 bsc_gscon <- bsc_mgcp [label="GSCON_EV_MGW_CRCX_RESP_MSC"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200121 --- [label="END: chan_mode a speech mode?"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +0200122
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200123 bsc_gscon => mgw_msc [label="BSSMAP Assignment Complete"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +0200124
125 bsc_gscon abox bsc_gscon [label="ST_ACTIVE"];
126}