diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2013-06-03 18:46:41 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2013-07-29 12:44:36 +0200 |
commit | 66d7ef8a1fab715ed7254c7ffb4e032a9aba6f3b (patch) | |
tree | c27e098c3263efd92da29c98a4fce7fe56c605bb | |
parent | c186375109757598414fbf5aace3276f76c58ffa (diff) |
HO: In case of assignment failure, release all call control transactions
If the initial assignment to the TCH channel fails, the call is released
and the MNCC application receives cause 41 (Temporary Failure).
-rw-r--r-- | openbsc/include/openbsc/gsm_04_08.h | 2 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_04_08.c | 13 | ||||
-rw-r--r-- | openbsc/src/libmsc/osmo_msc.c | 2 |
3 files changed, 17 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gsm_04_08.h b/openbsc/include/openbsc/gsm_04_08.h index d071ad595..7944a05b1 100644 --- a/openbsc/include/openbsc/gsm_04_08.h +++ b/openbsc/include/openbsc/gsm_04_08.h @@ -78,4 +78,6 @@ int tch_frame_down(struct gsm_network *net, uint32_t callref, struct gsm_data_fr int gsm48_multirate_config(uint8_t *lv, struct amr_multirate_conf *mr, int ms); +void gsm48_lchan_modify_error(struct gsm_subscriber_connection *conn); + #endif diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c index ea0aedf0a..e504925a5 100644 --- a/openbsc/src/libmsc/gsm_04_08.c +++ b/openbsc/src/libmsc/gsm_04_08.c @@ -3017,6 +3017,19 @@ static int _gsm48_lchan_modify_error(struct gsm_trans *trans, void *arg) return 0; } +void gsm48_lchan_modify_error(struct gsm_subscriber_connection *conn) +{ + struct gsm_network *net = conn->lchan->ts->trx->bts->network; + struct gsm_trans *trans, *trans2; + + llist_for_each_entry_safe(trans, trans2, &net->trans_list, entry) { + if (trans->protocol != GSM48_PDISC_CC) + continue; + if (trans->conn == conn) + _gsm48_lchan_modify_error(trans, NULL); + } +} + static int _gsm48_lchan_modify(struct gsm_trans *trans, void *arg) { struct gsm_bts *bts = trans->conn->bts; diff --git a/openbsc/src/libmsc/osmo_msc.c b/openbsc/src/libmsc/osmo_msc.c index 31b72b925..2b1655905 100644 --- a/openbsc/src/libmsc/osmo_msc.c +++ b/openbsc/src/libmsc/osmo_msc.c @@ -76,6 +76,8 @@ static void msc_assign_compl(struct gsm_subscriber_connection *conn, static void msc_assign_fail(struct gsm_subscriber_connection *conn, uint8_t cause, uint8_t *rr_cause) { + /* release call transactions */ + gsm48_lchan_modify_error(conn); } static void msc_classmark_chg(struct gsm_subscriber_connection *conn, |