blob: 9534f908a4987833dce543f00dd5203cc9467f4b [file] [log] [blame]
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02001msc {
2 hscale=2;
3 ms [label="MS/BTS"], lchan[label="BSC lchan FSM"], ho[label="BSC Handover FSM"],
4 gscon[label="BSC conn FSM"], msc_[label="MSC"];
5
6 ms note msc_ [label="inter-BSC Handover Incoming"];
7
8 gscon <= msc_ [label="N-Connect: BSSMAP Handover Request"];
9 gscon box gscon [label="bsc_subscr_con_allocate()"];
10 gscon abox gscon [label="ST_INIT"];
11 gscon -> gscon [label="GSCON_EV_A_CONN_IND"];
12 ho <- gscon [label="handover_start_inter_bsc_in()"];
13
14 ho abox ho [label="allocate\nHO_ST_NOT_STARTED"];
15 ho box ho [label="lchan_select_by_chan_mode()"];
16 ho abox ho [label="HO_ST_WAIT_\nLCHAN_ACTIVE"];
17 lchan <- ho [label="lchan_activate(FOR_HANDOVER)"];
18 lchan rbox lchan [label="(most details omitted, see lchan_fsm diagrams)"];
19
20 ...;
21 ...;
22 --- [label="On any error or timeout"];
23 ho box ho [label="handover_end(fail)"];
24 ho -> gscon [label="GSCON_EV_HANDOVER_END"];
25 gscon note msc_ [label="There is no specific BSSMAP Handover Request NACK message."];
26 gscon => msc_ [label="BSSMAP Clear Request"];
27 gscon abox gscon [label="ST_CLEARING"];
28 gscon rbox msc_ [label="the usual disconnect dance"];
29 --- [label="END: 'On any error or timeout'"];
30 ...;
31 ...;
32
33 lchan abox lchan [label="LCHAN_ST_WAIT_\nACTIV_ACK"];
34 ms <= lchan [label="RSL Chan Activ"];
35 ...;
36 ms => lchan [label="RSL Chan Activ ACK"];
37 lchan -> ho [label="HO_EV_LCHAN_ACTIVE"];
38 ho abox ho [label="HO_ST_WAIT_\nRR_HO_DETECT"];
39 ho => msc_ [label="BSSMAP Handover Request Acknowledge\nwith RR Handover Command"];
40
41 ...;
42
43 ms => ho [label="RR Handover Detect\nHO_EV_RR_HO_DETECT"];
44 ho => msc_ [label="BSSMAP Handover Detect"];
45 ho abox ho [label="HO_ST_WAIT_\nRR_HO_COMPLETE"];
46
47 ...;
48 lchan note ho [label="The lchan FSM will continue with RSL and RTP while the HO FSM waits.
49 HO_EV_LCHAN_ESTABLISHED means that both RSL and RTP are established.
50 Usually, RTP will be done first, and the HO_EV_LCHAN_ESTABLISHED may be
51 received even before HO_EV_RR_HO_COMPLETE.
52 ho_fsm_wait_lchan_established_onenter() decides whether to wait or not."];
53 ...;
54 ms => lchan [label="RSL EST IND"];
55 lchan -> ho [label="HO_EV_LCHAN_ESTABLISHED",ID="(may come as early as this, or...)"];
56 ms => ho [label="RR Handover Complete (from EST IND)\n HO_EV_RR_HO_COMPLETE"];
57 ho abox ho [label="HO_ST_WAIT_\nLCHAN_ESTABLISHED"];
58 ...;
59 lchan rbox lchan [label="when lchan FSM is done with setting up RTP"];
60 lchan -> ho [label="HO_EV_LCHAN_ESTABLISHED",ID="(...may come only now)"];
61 ho abox ho [label="HO_ST_WAIT_\nMGW_ENDPOINT_TO_MSC"];
62 ho -> gscon [label="gscon_connect_mgw_to_msc()"];
63 ...;
64 ho <- gscon [label="HO_EV_MSC_MGW_OK"];
65 ho box ho [label="handover_end(OK)"];
66 ho => msc_ [label="BSSMAP Handover Complete"];
67
68 ho -> gscon [label="gscon_change_primary_lchan()"];
69 lchan <- gscon [label="LCHAN_RTP_EV_ESTABLISHED"];
70 ho -> gscon [label="GSCON_EV_HANDOVER_END"];
71 gscon abox gscon [label="ST_ACTIVE"];
72 ho box ho [label="detach from parent to not fire another meaningless GSCON_EV_HANDOVER_END"];
73 ho abox ho [label="terminate"];
74}