blob: dbb283cd15b87ab8886112a42076d19ae9240cf9 [file] [log] [blame]
digraph G {
rankdir=TB;
invisible [style="invisible"]
UNUSED [penwidth=3.0]
WAIT_TS_READY
WAIT_MGW_ENDPOINT_AVAILABLE
WAIT_ACTIV_ACK
WAIT_IPACC_CRCX_ACK
WAIT_IPACC_MDCX_ACK
WAIT_RLL_ESTABLISH
ACTIVE [penwidth=3.0]
WAIT_SAPIS_RELEASED
WAIT_BEFORE_RF_RELEASE
WAIT_RF_RELEASE_ACK
WAIT_AFTER_ERROR
BORKEN
ts [label="timeslot FSM",shape=box3d];
gscon [label="conn FSM",shape=box3d];
UNUSED -> WAIT_TS_READY [label="lchan_allocate()"]
WAIT_TS_READY -> WAIT_ACTIV_ACK
WAIT_ACTIV_ACK -> WAIT_RLL_ESTABLISH
WAIT_RLL_ESTABLISH -> WAIT_MGW_ENDPOINT_AVAILABLE [label="TCH"]
WAIT_MGW_ENDPOINT_AVAILABLE -> WAIT_IPACC_CRCX_ACK [label="IPACC BTS"]
WAIT_MGW_ENDPOINT_AVAILABLE -> ACTIVE
WAIT_IPACC_CRCX_ACK -> WAIT_IPACC_MDCX_ACK
WAIT_IPACC_MDCX_ACK -> ACTIVE
WAIT_RLL_ESTABLISH -> ACTIVE [label="non-TCH"];
WAIT_RLL_ESTABLISH -> WAIT_RF_RELEASE_ACK [label="timeout",style=dashed,constraint=false]
ACTIVE -> WAIT_SAPIS_RELEASED [label="LCHAN_EV_\nRELEASE"]
WAIT_SAPIS_RELEASED -> WAIT_BEFORE_RF_RELEASE
WAIT_SAPIS_RELEASED -> WAIT_RF_RELEASE_ACK [label="timeout",style=dashed,constraint=false]
WAIT_BEFORE_RF_RELEASE -> WAIT_RF_RELEASE_ACK [label="T3111"]
WAIT_RF_RELEASE_ACK -> UNUSED
WAIT_RF_RELEASE_ACK -> WAIT_AFTER_ERROR [label="release was\ndue to error"]
WAIT_AFTER_ERROR -> UNUSED [label="T3111+2s"]
WAIT_TS_READY -> ts [label="TS_EV_\nLCHAN_\nREQUESTED",style=dotted,penwidth=3]
UNUSED -> ts [label="TS_EV_\nLCHAN_\nUNUSED",style=dotted,penwidth=3]
ts -> WAIT_TS_READY [label="LCHAN_EV_\nTS_READY",style=dotted]
WAIT_TS_READY -> UNUSED [label="error/timeout",style=dashed,constraint=false]
{WAIT_ACTIV_ACK,WAIT_RF_RELEASE_ACK} -> BORKEN [label="error/timeout",style=dashed]
{WAIT_MGW_ENDPOINT_AVAILABLE,WAIT_IPACC_CRCX_ACK,WAIT_IPACC_MDCX_ACK} -> WAIT_SAPIS_RELEASED [label=error,style=dashed]
WAIT_TS_READY -> gscon [label="GSCON_EV_\nENSURE_\nMGW_ENDPOINT",style=dotted]
gscon -> WAIT_MGW_ENDPOINT_AVAILABLE [label="LCHAN_EV_\nMGW_ENDPOINT_\n{AVAILABLE,ERROR}",style=dotted]
}