48 lines
1.8 KiB

msc {
ms [label="MS/BTS"], ho[label="BSC Handover FSM"], gscon[label="BSC conn FSM"], msc_[label="MSC"];
ms note msc_ [label="inter-BSC Handover to another BSS"];
gscon abox gscon [label="ST_ACTIVE"];
ms => ho [label="Measurement Report"];
ho box ho [label="Handover Decision"];
ho box ho [label="handover_request\n(struct handover_out_req)"];
ho note gscon [label="To make sure the conn FSM permits a handover, trigger an event:"];
ho -> gscon [label="GSCON_EV_HANDOVER_START\ndata=handover_out_req"];
gscon abox gscon [label="ST_HANDOVER"];
ho <- gscon [label="handover_start\n(handover_out_req)"];
ho box ho [label="handover_start_inter_bsc_out()"];
ho => msc_ [label="BSSMAP Handover Required"];
ho abox ho [label="HO_OUT_ST_WAIT_HO_COMMAND"];
--- [label="On Timeout"];
ho box ho [label="handover_end(fail)"];
ho -> gscon [label="GSCON_EV_HANDOVER_END"];
gscon abox gscon [label="ST_ACTIVE"];
ms note gscon [label="MS happily continues on the old lchan."];
--- [label="END: 'On Timeout'"];
ho <= msc_ [label="BSSMAP Handover Command\n HO_OUT_EV_BSSMAP_HO_COMMAND"];
ms <= ho [label="Forward L3 Info (RR Handover Command from new BSS)"];
ho abox ho [label="HO_OUT_ST_WAIT_CLEAR"];
gscon abox gscon [label="ST_HANDOVER_MO_\nWAIT_CLEAR_CMD\nT8"];
ms <= gscon [label="RR Handover Command"];
ho rbox gscon [label="On Timeout: same as above"];
msc_ note msc_ [label="Remote BSS reported Handover Complete to the MSC,
this connection has been superseded."];
gscon <= msc_ [label="BSSMAP Clear Command\n GSCON_EV_A_CLEAR_CMD"];
gscon abox gscon [label="ST_CLEARING"];
gscon => msc_ [label="BSSMAP Clear Complete"];
gscon <= msc_ [label="DISC IND\n GSCON_EV_A_DISC_IND"];
ho abox ho [label="terminate\n(child of conn FSM)"];
gscon abox gscon [label="terminate"];