Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 1 | # Handover between cells, intra-BSC |
| 2 | msc { |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 3 | 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 6 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 7 | ms note msc_ [label="intra-BSC Handover"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 8 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 9 | 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 21 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 22 | ...; |
| 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 29 | ...; |
Neels Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 30 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 31 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 32 | 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 36 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 37 | ...; |
| 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 43 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 44 | ...; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 45 | |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 46 | lchan abox lchan [label="LCHAN_ST_WAIT_ACTIV_ACK"]; |
| 47 | ms <= lchan [label="RSL Chan Activ"]; |
Neels Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 48 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 49 | 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 Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 52 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 53 | 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 57 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 58 | 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 63 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 64 | 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 Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 68 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 69 | 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 Hofmeyr | 44fcc9f | 2018-05-28 14:29:49 +0200 | [diff] [blame] | 73 | ...; |
Neels Hofmeyr | 3b5de1b | 2018-06-16 16:08:55 +0200 | [diff] [blame] | 74 | 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 Hofmeyr | 71e5a82 | 2018-05-26 23:53:31 +0200 | [diff] [blame] | 82 | } |