This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/15408 Change subject: bsc_subscr_conn_fsm: Cleanly clear BSSAP conn if associated channel closed during WAIT_CC ...................................................................... bsc_subscr_conn_fsm: Cleanly clear BSSAP conn if associated channel closed during WAIT_CC TTCN3 BSC_Tests.TC_ms_rel_ind_does_not_cause_bssmap_reset seems to sometimes run into a race condition on the order of messages received by osmo-bsc comming from MSC and BTS. Usual (expected) scenario): BTS->BSC EST IND BSC->MSC CL3 Info BSC<-MSC CC BTS->BSC REL IND BTS<-BSC DEACT SACCH BSC->MSC ClearRequest BSC<-MSC ClearCommand BSC->MSC ClearComplete BTS<-BSC RF Chan Release BTS->BSC RF Chan Release ACK Sometimes CC message and REL IND message are received swapped (because they are sent by different components asynchronously in TTCN3). As a result, osmo-bsc was failing to go into CLEARING state and was unable to send the ClearRequest because CC was still not received. So the idea is to stay in WAIT_CC until CC is received, then check if the lchan was dropped and in that case go into clearing state. Change-Id: Id1abf5ee44c60925b478123409f26bd29006202b --- M src/osmo-bsc/bsc_subscr_conn_fsm.c 1 file changed, 24 insertions(+), 8 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/08/15408/1 diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c index f8784f9..b5edeb8 100644 --- a/src/osmo-bsc/bsc_subscr_conn_fsm.c +++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c @@ -99,6 +99,12 @@ conn->network->T_defs, \ -1) +static bool gscon_is_active(struct gsm_subscriber_connection *conn) +{ + enum gscon_fsm_states st = conn->fi->state; + return st == ST_ACTIVE || st == ST_ASSIGNMENT || st == ST_HANDOVER; +} + /* forward MT DTAP from BSSAP side to RSL side */ static inline void submit_dtap(struct gsm_subscriber_connection *conn, struct msgb *msg) { @@ -333,10 +339,19 @@ switch (event) { case GSCON_EV_A_CONN_CFM: /* MSC has confirmed the connection, we now change into the - * active state and wait there for further operations */ - conn_fsm_state_chg(ST_ACTIVE); - /* if there's user payload, forward it just like EV_MT_DTAP */ - /* FIXME: Question: if there's user payload attached to the CC, forward it like EV_MT_DTAP? */ + * active state and wait there for further operations. */ + if (conn->lchan) { + conn_fsm_state_chg(ST_ACTIVE); + /* if there's user payload, forward it just like EV_MT_DTAP */ + /* FIXME: Question: if there's user payload attached to the CC, forward it like EV_MT_DTAP? */ + } else { + /* If associated lchan was released while we were + * waiting for the confirmed connection, then instead + * simply drop the connection */ + LOGPFSML(fi, LOGL_INFO, "Connection confirmed but lchan was dropped before, clearing conn\n"); + osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, 999); + gscon_bssmap_clear(conn, GSM0808_CAUSE_EQUIPMENT_FAILURE); + } break; default: OSMO_ASSERT(false); @@ -589,7 +604,7 @@ [ST_WAIT_CC] = { .name = "WAIT_CC", .in_event_mask = S(GSCON_EV_A_CONN_CFM), - .out_state_mask = S(ST_ACTIVE), + .out_state_mask = S(ST_ACTIVE) | S(ST_CLEARING), .action = gscon_fsm_wait_cc, }, [ST_ACTIVE] = { @@ -651,9 +666,10 @@ lchan_forget_conn(conn->lchan); conn->lchan = NULL; } - if (!conn->lchan) { - if (conn->fi->state != ST_CLEARING) - osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, 999); + /* if conn is not active we cannot send bssap. If on WAIT_CC, then let's + * wait until CC is received to tear down */ + if (!conn->lchan && gscon_is_active(conn)) { + osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, 999); gscon_bssmap_clear(conn, GSM0808_CAUSE_EQUIPMENT_FAILURE); } } -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/15408 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: Id1abf5ee44c60925b478123409f26bd29006202b Gerrit-Change-Number: 15408 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190904/e54e5b61/attachment.htm>