msc { hscale=2; ms [label="MS via BTS"], bsc_lchan[label="BSC lchan FSM"], bsc_gscon[label="BSC conn FSM"], msc_[label="MSC"]; ms note msc_ [label="inter-BSC Handover to another BSS"]; bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; bsc_gscon box bsc_gscon [label="bsc_handover_start(): init conn->ho"]; bsc_gscon -> bsc_gscon [label="GSCON_EV_HO_START (inter-BSC MO)"]; bsc_gscon abox bsc_gscon [label="ST_HANDOVER_MO_\nWAIT_HO_CMD\nT7"]; bsc_gscon => msc_ [label="BSSMAP Handover Required"]; ...; --- [label="On Timeout"]; ms note bsc_gscon [label="MS happily continues on the old lchan."]; bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; bsc_gscon box bsc_gscon [label="handover_end(fail)"]; --- [label="END: 'On Timeout'"]; ...; bsc_gscon <= msc_ [label="BSSMAP Handover Command"]; bsc_gscon abox bsc_gscon [label="ST_HANDOVER_MO_\nWAIT_CLEAR_CMD\nT8"]; ms <= bsc_gscon [label="RR Handover Command"]; ...; --- [label="On Timeout"]; ms note bsc_gscon [label="MS happily continues on the old lchan."]; bsc_gscon abox bsc_gscon [label="ST_ACTIVE"]; bsc_gscon box bsc_gscon [label="handover_end(fail)"]; --- [label="END: 'On Timeout'"]; ...; msc_ note msc_ [label="Remote BSS reported Handover Complete to the MSC, this connection has been superseded."]; bsc_gscon <= msc_ [label="BSSMAP Clear Command"]; bsc_gscon abox bsc_gscon [label="ST_CLEARING"]; bsc_gscon => msc_ [label="BSSMAP Clear Complete"]; bsc_lchan <- bsc_gscon [label="LCHAN_EV_RELEASE"]; ms <=> bsc_lchan [label="release procedure (async)"]; }