blob: af9a59b52265d37fa11f4232ac87bd5c7b4f97c6 [file] [log] [blame]
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +02001msc {
2 hscale=2;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02003 ms [label="MS/BTS"], ts [label="BSC timeslot FSM"],
4 lchan[label="BSC lchan FSM"], rtp[label="BSC lchan RTP FSM"],mgwep[label="BSC MGW endpoint FSM"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +02005
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02006 ms box mgwep [label="lchan allocation sequence"];
7 lchan abox lchan [label="LCHAN_ST_UNUSED"];
8 ...;
9 lchan rbox lchan [label="lchan_activate(activate_info)"];
10 lchan note lchan [label="Dispatching event to make sure the lchan FSM permits activation."];
11 lchan -> lchan [label="LCHAN_EV_ACTIVATE\ndata = activate_info"];
12 lchan abox lchan [label="LCHAN_ST_\nWAIT_TS_READY"];
13 ts <- lchan [label="TS_EV_LCHAN_REQUESTED"];
14 ts rbox ts [label="Most details omitted. See timeslot FSM diagrams."];
15 ts note ts [label="A dyn TS may be in PDCH mode and will asynchronously switch off PDCH first. A
16 non-dynamic TS is ready immediately."];
17 |||;
18 --- [label="IF requires_voice_stream"];
19 lchan -> rtp [label="lchan_rtp_fsm_start()"];
20 rtp abox rtp [label="allocate\n LCHAN_RTP_ST_\nWAIT_MGW_ENDPOINT_\nAVAILABLE"];
21 --- [label="IF no endpoint-CI yet"];
22 rtp box rtp [label="gscon_ensure_mgw_endpoint()"];
23 rtp -> mgwep [label="mgw_endpoint_ci_add(to-BTS)"];
24 rtp -> mgwep [label="CRCX to-BTS"];
25 mgwep rbox mgwep [label="MGCP: CRCX"];
26 ...;
27 mgwep rbox mgwep [label="MGCP: CRCX OK"];
28 rtp <- mgwep [label="LCHAN_RTP_EV_MGW_ENDPOINT_AVAILABLE"];
29 rtp note mgwep [label="The CRCX OK has assigned us a new endpoint CI number"];
30 rtp abox rtp [label="LCHAN_RTP_ST_WAIT_LCHAN_READY"];
31 --- [label="END: no endpoint-CI yet"];
32 --- [label="END: requires_voice_stream"];
33 |||;
34 ...;
35 ts -> lchan [label="LCHAN_EV_TS_READY"];
36 lchan abox lchan [label="LCHAN_ST_\nWAIT_ACTIV_ACK"];
37 --- [label="IF FOR_MS_CHANNEL_REQUEST"];
38 ms <= lchan [label="RSL Chan Activ (RSL_ACT_INTRA_IMM_ASS)"];
39 --- [label="ELSE: FOR_ASSIGNMENT"];
40 ms <= lchan [label="RSL Chan Activ (RSL_ACT_INTRA_NORM_ASS)"];
41 --- [label="ELSE: FOR_HANDOVER"];
42 ms <= lchan [label="RSL Chan Activ (RSL_ACT_INTER_ASYNC)"];
43 --- [label="END"];
44 ...;
45 ms rbox lchan [label="On timeout or Chan Activ NACK, see: 'On any error', 'unrecoverable'"];
46 ...;
47 ms => lchan [label="RSL Chan Activ ACK"];
48 lchan box lchan [label="lchan_fsm_post_activ_ack()"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020049
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020050 --- [label="IF FOR_MS_CHANNEL_REQUEST"];
51 ms <= lchan [label="RR Immediate Assignment"];
52 --- [label="ELSE: FOR_ASSIGNMENT"];
53 lchan rbox lchan [label="dispatch\nASSIGNMENT_EV_\nLCHAN_ACTIVE\n(see Assignment FSM diagrams)"];
54 ms <= lchan [label="RR Assignment Command"];
55 --- [label="ELSE: FOR_HANDOVER"];
56 lchan rbox lchan [label="dispatch\nHO_EV_LCHAN_ACTIVE\n(see Handover FSM diagrams)"];
57 --- [label="END"];
58
59
60 lchan abox lchan [label="LCHAN_ST_WAIT_\nRLL_RTP_ESTABLISH\nT3101"];
61 |||;
62 |||;
63 --- [label="IF requires_voice_stream"];
64 lchan -> rtp [label="LCHAN_RTP_EV_LCHAN_READY"];
65 |||;
66 --- [label="IF ip.access style BTS"];
67 rtp abox rtp [label="LCHAN_RTP_ST_WAIT_IPACC_CRCX_ACK"];
68 ms <= rtp [label="IPACC CRCX"];
69 ...;
70 ms => rtp [label="IPACC CRCX ACK (BTS RTP port info)"];
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020071 --- [label="END ip.access style BTS"];
72 |||;
73 rtp box rtp [label="lchan_rtp_fsm_switch_rtp()"];
74 |||;
75 --- [label="IF wait_before_switching_rtp"];
76 rtp note rtp [label="During Handover, wait for HO DETECT before redirecting an existing endpoint
77 CI towards the new lchan."];
78 rtp abox rtp [label="LCHAN_RTP_ST_WAIT_READY_TO_SWITCH_RTP"];
79 ...;
80 ms => rtp [label="HO DETECT (via Handover FSM)"];
81 --- [label="END: wait_before_switching_rtp"];
82 |||;
83 rtp abox rtp [label="LCHAN_RTP_ST_WAIT_MGW_ENDPOINT_CONFIGURED"];
84 rtp box rtp [label="connect_mgw_endpoint_to_lchan()"];
85 rtp -> mgwep [label="MDCX to-BTS"];
86 mgwep rbox mgwep [label="MGCP: MDCX"];
87 ...;
88 mgwep rbox mgwep [label="MGCP: MDCX OK"];
89 rtp <- mgwep [label="LCHAN_RTP_EV_MGW_ENDPOINT_CONFIGURED"];
Pau Espin Pedrolf087c1e2020-09-02 18:40:43 +020090 --- [label="IF ip.access style BTS"];
91 rtp abox rtp [label="LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK"];
92 ms <= rtp [label="IPACC MDCX (MGW RTP port info)"];
93 ...;
94 ms => rtp [label="IPACC MDCX ACK"];
95 --- [label="END ip.access style BTS"];
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020096 rtp abox rtp [label="LCHAN_RTP_ST_READY"];
97 lchan <- rtp [label="LCHAN_EV_RTP_READY"];
98 rtp note rtp [label="RTP FSM stays ready for Rollback until final establish event"];
99 ...;
100 lchan -> rtp [label="LCHAN_RTP_EV_ESTABLISHED\nvia gscon_change_primary_lchan()"];
101 rtp abox rtp [label="LCHAN_RTP_ST_\nESTABLISHED"];
102 --- [label="END: requires_voice_stream"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200103 |||;
104 |||;
105
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200106 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200107 ms => lchan [label="RLL Establish Ind"];
108 lchan abox lchan [label="LCHAN_ST_\nESTABLISHED"];
109 lchan box lchan [label="lchan_on_fully_established()"];
110 --- [label="IF FOR_MS_CHANNEL_REQUEST"];
111 ms note lchan [label="No action required. The MS will have sent an L3 message in the RLL
112 Establish Ind and is then free to dispatch DTAP."];
113 --- [label="ELSE: FOR_ASSIGNMENT"];
114 lchan rbox lchan [label="dispatch\nASSIGNMENT_EV_\nLCHAN_ESTABLISHED\n(see Assignment FSM diagrams)"];
115 --- [label="ELSE: FOR_HANDOVER"];
116 lchan rbox lchan [label="dispatch\nHO_EV_LCHAN_ESTABLISHED\n(see Handover FSM diagrams)"];
117 --- [label="END"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200118 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200119 --- [label="IF requires_voice_stream"];
120 lchan rbox lchan [label="Assignment or Handover FSM:"];
121 lchan -> mgwep [label="CRCX/MDCX to-MSC"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200122 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200123 lchan <- mgwep [label="OK"];
124 lchan box lchan [label="gscon_change_primary_lchan()"];
125 lchan -> rtp [label="LCHAN_RTP_EV_ESTABLISHED"];
126 rtp abox rtp [label="LCHAN_RTP_ST_\nESTABLISHED"];
127 rtp box rtp [label="Forget any Rollback info"];
128 --- [label="END: requires_voice_stream"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200129
130 ...;
131 ...;
132 ...;
133
Philipp Maier92eed412020-08-21 20:47:49 +0200134 ms rbox mgwep [label="On Mode Modify (e.g. change a TCH lchan from signalling to voice)"];
135 lchan abox lchan [label="LCHAN_ST_\nWAIT_RR_CHAN_\nMODE_MODIFY_ACK"];
136 ms <= lchan [label="RR Chan Mode Modif"];
137 ...;
138 ms => lchan [label="RR Chan Mode Modif Ack"];
139 lchan abox lchan [label="LCHAN_ST_\nWAIT_RSL_CHAN_\nMODE_MODIFY_ACK"];
140 ms <= lchan [label="RSL MT Mode Modify Req"];
141 ...;
142 ms => lchan [label="RSL MT Mode Modify Ack"];
143 --- [label="IF adding RTP stream"];
144 lchan abox lchan [label="LCHAN_ST_WAIT_\nRLL_RTP_ESTABLISH\nT3101"];
145 lchan rbox rtp [label="See above at 'LCHAN_RTP_EV_LCHAN_READY'"];
146 --- [label="IF not adding RTP stream"];
147 lchan abox lchan [label="LCHAN_ST_\nESTABLISHED"];
148 --- [label="END: whether adding voice stream"];
149
150 ...;
151 ...;
152 ...;
153
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200154 ms rbox mgwep [label="When the MS or BTS release the lchan"];
155 lchan abox lchan [label="LCHAN_ST_\nESTABLISHED"];
156 ms -> lchan [label="RLL Release Ind for SAPI=0"];
157 lchan abox lchan [label="LCHAN_ST_WAIT_RLL_RTP_RELEASED"];
158 lchan rbox lchan [label="Continue at 'common release' below"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200159 ...;
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200160 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200161 ms rbox mgwep [label="When the BSC decides to release the lchan"];
162 lchan box lchan [label="lchan_release()"];
163 lchan abox lchan [label="LCHAN_ST_WAIT_RLL_RTP_RELEASED"];
164 ms <= lchan [label="RR Release"];
165 lchan rbox lchan [label="common release"];
166 --- [label="IF RTP FSM present"];
167 lchan -> rtp [label="LCHAN_RTP_EV_RELEASE"];
168 --- [label="END: RTP FSM present"];
169 ms <= lchan [label="RSL Deactivate SACCH"];
170 ms <= lchan [label="RSL Release Request (Local End)",ID="for each SAPI except [0]"];
171 lchan note lchan [label="for ms->nokia.no_loc_rel_cnf we do not expect Release Confirm
172 messages and immediately mark all SAPIs as released"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200173
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200174 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200175 lchan <- rtp [label="LCHAN_EV_RTP_RELEASED"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200176 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200177 ms => lchan [label="RLL Release Confirm",ID="for each SAPI except [0]"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200178 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200179 lchan box lchan [label="Stay in\nLCHAN_ST_WAIT_\nRLL_RTP_RELEASED\nuntil only SAPI[0] remains active"];
180 lchan abox lchan [label="LCHAN_ST_WAIT_\nBEFORE_RF_RELEASE\nT3111"];
181 ...;
182 lchan box lchan [label="T3111 expires"];
183 lchan box lchan [label="lchan_fsm_pre_rf_release()"];
184 lchan abox lchan [label="LCHAN_ST_WAIT_\nRF_RELEASE_ACK\nT3111"];
185 ms <= lchan [label="RSL RF Channel Release"];
186 ...;
187 lchan rbox lchan [label="On timeout, continue at: 'On any error', 'unrecoverable'"];
188 ...;
189 ms => lchan [label="RSL RF Channel Release Ack"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200190 |||;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200191 --- [label="IF release_in_error"];
Neels Hofmeyr638eb992020-09-16 00:56:19 +0200192 lchan abox lchan [label="LCHAN_ST_WAIT_\nAFTER_ERROR\n(timeout: T3111+2 s, X3111)"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200193 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200194 lchan box lchan [label="timer expires"];
195 --- [label="END: release_in_error"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200196 |||;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200197 lchan abox lchan [label="LCHAN_ST_UNUSED"];
198 ts <- lchan [label="TS_EV_LCHAN_UNUSED"];
199 |||;
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200200 |||;
201 |||;
202
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200203 ms rbox mgwep [label="On any error"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200204 |||;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200205 --- [label="IF FOR_MS_CHANNEL_REQUEST"];
206 ms <= lchan [label="RR Immediate Assign Reject"];
207 --- [label="ELSE: FOR_ASSIGNMENT"];
208 lchan rbox lchan [label="dispatch\nASSIGNMENT_EV_\nLCHAN_ERROR\n(see Assignment FSM diagrams)"];
209 --- [label="ELSE: FOR_HANDOVER"];
210 lchan rbox lchan [label="dispatch\nHO_EV_LCHAN_ERROR\n(see Handover FSM diagrams)"];
211 --- [label="END"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200212 |||;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200213 --- [label="IF fi_rtp present"];
214 lchan -> rtp [label="LCHAN_RTP_EV_ROLLBACK"];
215 rtp rbox rtp [label="If to-BTS is not established yet, ROLLBACK is synonymous to LCHAN_RTP_EV_RELEASE"];
216 rtp rbox rtp [label="If there is no old_lchan, just DLCX instead"];
217 rtp abox rtp [label="LCHAN_RTP_ST_ROLLBACK"];
218 rtp box rtp [label="connect_mgw_endpoint_to_lchan()\nusing old_lchan"];
219 rtp -> mgwep [label="MDCX to-BTS"];
220 mgwep rbox mgwep [label="MGCP: MDCX"];
221 ...;
222 mgwep rbox mgwep [label="MGCP: MDCX OK"];
223 rtp <- mgwep [label="LCHAN_RTP_EV_MGW_ENDPOINT_CONFIGURED"];
224 rtp abox rtp [label="terminate"];
225 lchan <- rtp [label="LCHAN_EV_RTP_RELEASED"];
226 --- [label="END: fi_rtp present"];
227 |||;
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200228 |||;
229 --- [label="IF unrecoverable error"];
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200230 lchan abox lchan [label="LCHAN_ST_BORKEN"];
231 ms note lchan [label="The broken state usually stays around
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200232 until the BTS disconnects."];
233 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200234 ms note lchan [label="If an ACK comes in late, for specific BTS models, we may choose to
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200235 'repair' the lchan so that it is usable again."];
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +0200236 ms -> lchan [label="RF Chan Release ACK"];
237 lchan rbox lchan [label="continue above at\nLCHAN_ST_WAIT_\nAFTER_ERROR"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +0200238}