blob: 1a2580a063968c5d9630e425f6fdd2614a62db1a [file] [log] [blame]
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02001# Handover between cells, intra-BSC
2msc {
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02003 hscale=2;
4 ms [label="MS via BTS"], lchan[label="BSC lchan FSM"], ho[label="BSC Handover FSM"],
5 gscon[label="BSC conn FSM"], msc_[label="MSC"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02006
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02007 ms note msc_ [label="intra-BSC Handover"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +02008
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +02009 gscon abox gscon [label="ST_ACTIVE"];
10
11 ms => ho [label="Measurement Report"];
12 ho box ho [label="Handover Decision"];
13 ho box ho [label="handover_request\n(struct handover_out_req)"];
14 ho note gscon [label="To make sure the conn FSM permits a handover, trigger an event:"];
15 ho -> gscon [label="GSCON_EV_HANDOVER_START\ndata=handover_out_req"];
16 gscon abox gscon [label="ST_HANDOVER"];
17 ho <- gscon [label="handover_start\n(handover_out_req)"];
18 ho box ho [label="handover_start_intra_bsc()"];
19 ho abox ho [label="allocate\nHO_ST_NOT_STARTED"];
20
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020021 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020022 ...;
23 --- [label="On any error or timeout"];
24 ho box ho [label="handover_end(fail)"];
25 ho -> gscon [label="GSCON_EV_HANDOVER_END"];
26 gscon abox gscon [label="ST_ACTIVE"];
27 ms note gscon [label="MS happily continues on the old lchan."];
28 --- [label="END: 'On any error or timeout'"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020029 ...;
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020030 ...;
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020031
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020032 ho box ho [label="lchan_select_by_type()"];
33 ho abox ho [label="HO_ST_WAIT_\nLCHAN_ACTIVE"];
34 lchan <- ho [label="lchan_activate(FOR_HANDOVER)"];
35 lchan rbox lchan [label="(most details omitted, see lchan_fsm diagrams)"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020036
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020037 ...;
38 ...;
39 --- [label="On lchan error or timeout"];
40 lchan -> ho [label="HO_EV_LCHAN_ERROR"];
41 ho rbox gscon [label="same as above"];
42 --- [label="END: 'On lchan error or timeout'"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020043 ...;
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020044 ...;
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 -> ho [label="HO_EV_LCHAN_ACTIVE"];
51 ho abox ho [label="HO_ST_WAIT_\nRR_HO_DETECT"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020052 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020053 ms => ho [label="RR Handover Detect\nHO_EV_RR_HO_DETECT"];
54 lchan note ho [label="At this point we should start to switch the MGW over to the new lchan.
55 But this is not implemented yet, as was not before introducing these FSMs."];
56 ho abox ho [label="HO_ST_WAIT_\nRR_HO_COMPLETE"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020057 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020058 lchan note ho [label="The lchan FSM will continue with RSL and RTP while the HO FSM waits.
59 HO_EV_LCHAN_ESTABLISHED means that both RSL and RTP are established.
60 Usually, RTP will be done first, and the HO_EV_LCHAN_ESTABLISHED may be
61 received even before HO_EV_RR_HO_COMPLETE.
62 ho_fsm_wait_lchan_established_onenter() decides whether to wait or not."];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020063 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020064 ms => lchan [label="RSL EST IND"];
65 lchan -> ho [label="HO_EV_LCHAN_ESTABLISHED",ID="(may come as early as this, or...)"];
66 ms => ho [label="RR Handover Complete (from EST IND)\n HO_EV_RR_HO_COMPLETE"];
67 ho abox ho [label="HO_ST_WAIT_\nLCHAN_ESTABLISHED"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020068 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020069 lchan rbox lchan [label="when lchan FSM is done with setting up RTP"];
70 lchan -> ho [label="HO_EV_LCHAN_ESTABLISHED",ID="(...may come only now)"];
71 ho abox ho [label="HO_ST_WAIT_\nMGW_ENDPOINT_TO_MSC"];
72 ho -> gscon [label="gscon_connect_mgw_to_msc()"];
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +020073 ...;
Neels Hofmeyr3b5de1b2018-06-16 16:08:55 +020074 ho <- gscon [label="HO_EV_MSC_MGW_OK"];
75 ho box ho [label="handover_end(OK)"];
76 ho -> gscon [label="gscon_change_primary_lchan()"];
77 lchan <- gscon [label="LCHAN_RTP_EV_ESTABLISHED"];
78 ho -> gscon [label="GSCON_EV_HANDOVER_END"];
79 gscon abox gscon [label="ST_ACTIVE"];
80 ho box ho [label="detach from parent to not fire another meaningless GSCON_EV_HANDOVER_END"];
81 ho abox ho [label="terminate"];
Neels Hofmeyr71e5a822018-05-26 23:53:31 +020082}