blob: fae088f2389e3df2708a535633e693c7a6b1b761 [file] [log] [blame]
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02001msc {
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02002 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 Hofmeyr71e5a822018-05-26 23:53:31 +02005
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02006 ms note msc_ [label="lchan allocation sequence for BSSMAP Assignment Request"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02007
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02008 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 Maier92eed412020-08-21 20:47:49 +020012 |||;
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 Hofmeyr3b5de1b2018-06-16 16:08:55 +020020 ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ACTIVE"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020021
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020022 |||;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020023 --- [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 Hofmeyr44fcc9f2018-05-28 14:29:49 +020029 ---;
30 |||;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020031 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 Hofmeyr44fcc9f2018-05-28 14:29:49 +020036 ...;
37 |||;
38 --- [label="on lchan FSM error or timeout"];
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020039 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 Hofmeyr44fcc9f2018-05-28 14:29:49 +020042 --- [label="END: 'on error'"];
43 ...;
44 ...;
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020045
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020046 lchan abox lchan [label="LCHAN_ST_WAIT_ACTIV_ACK"];
47 ms <= lchan [label="RSL Chan Activ"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020048 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020049 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 Hofmeyr71e5a822018-05-26 23:53:31 +020058 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020059 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 Hofmeyr71e5a822018-05-26 23:53:31 +020079
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020080}