aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-03-24 03:10:06 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-03-24 03:26:42 +0100
commit2e476c692b02afb5d96311240c14ec35b4c6ea90 (patch)
treed668ecd69515888cc8be4c802f672cae43754ddd
parent2790599e56d926eb6d59b14ddea61f5c99d2d505 (diff)
fix sccp_scoc state S_WAIT_CONN_CONF out_state_mask
In sccp_scoc_states, allow the state transitions present in S_WAIT_CONN_CONF's event handler function scoc_fsm_wait_conn_conf(), and thus fix handling of N-DISCONNECT while waiting for SCCP Conn Confirm. Fixes this error: DLSCCP ERROR SCCP-SCOC(1016){WAIT_CONN_CONF}: transition to state IDLE not permitted! (sccp_scoc.c:1213) S_WAIT_CONN_CONF happens when the caller sends an N-DISCONNECT during S_CONN_PEND_OUT -- that means, while we are waiting for a CC from the peer, the caller ends the conn. SCCP-SCOC still waits for the CC first. When S_WAIT_CONN_CONF expires, the intended path is state change to S_IDLE, which then deallocates the connection. Allow this state transition from S_WAIT_CONN_CONF to S_IDLE. When S_WAIT_CONN_CONF receives a CC, the intended path is to send a RELRE and state change to S_DISCONN_PEND. Allow this state transition from S_WAIT_CONN_CONF to S_DISCONN_PEND. Change-Id: I8145e53124cabd76bd2cee159ab01306a1afaa27
-rw-r--r--src/sccp_scoc.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/sccp_scoc.c b/src/sccp_scoc.c
index db1db23..c929ed6 100644
--- a/src/sccp_scoc.c
+++ b/src/sccp_scoc.c
@@ -1468,6 +1468,8 @@ static const struct osmo_fsm_state sccp_scoc_states[] = {
S(SCOC_E_CONN_TMR_EXP) |
S(SCOC_E_RCOC_CREF_IND) |
S(SCOC_E_RCOC_ROUT_FAIL_IND),
+ .out_state_mask = S(S_IDLE) |
+ S(S_DISCONN_PEND),
},
};