diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-12-28 12:08:28 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2015-01-02 11:43:06 +0100 |
commit | 454140e7fcd9c904ffbdf5b16af84e52efe9b4d4 (patch) | |
tree | ce7409a449e1e42280967b8fb5ad2db5303ed588 /openbsc/src/libbsc/abis_rsl.c | |
parent | 52fa7bd2da381cf933052806eb1fd78f3fc0967c (diff) |
lchan: Remember why a channel is broken using static strings
Remember why a channel is being marked as broken. So we can
maybe understand what happend.
Diffstat (limited to 'openbsc/src/libbsc/abis_rsl.c')
-rw-r--r-- | openbsc/src/libbsc/abis_rsl.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index ae405c98c..479323d3d 100644 --- a/openbsc/src/libbsc/abis_rsl.c +++ b/openbsc/src/libbsc/abis_rsl.c @@ -210,7 +210,7 @@ static void lchan_act_tmr_cb(void *data) "%s Timeout during activation. Marked as broken.\n", gsm_lchan_name(lchan)); - rsl_lchan_set_state(lchan, LCHAN_S_BROKEN); + rsl_lchan_mark_broken(lchan, "activation timeout"); lchan_free(lchan); } @@ -222,7 +222,7 @@ static void lchan_deact_tmr_cb(void *data) "%s Timeout during deactivation! Marked as broken.\n", gsm_lchan_name(lchan)); - rsl_lchan_set_state(lchan, LCHAN_S_BROKEN); + rsl_lchan_mark_broken(lchan, "de-activation timeout"); lchan_free(lchan); } @@ -943,6 +943,13 @@ int rsl_release_request(struct gsm_lchan *lchan, uint8_t link_id, return 0; } +int rsl_lchan_mark_broken(struct gsm_lchan *lchan, const char *reason) +{ + lchan->state = LCHAN_S_BROKEN; + lchan->broken_reason = reason; + return 0; +} + int rsl_lchan_set_state(struct gsm_lchan *lchan, int state) { lchan->state = state; @@ -1013,13 +1020,14 @@ static int rsl_rx_chan_act_nack(struct msgb *msg) print_rsl_cause(LOGL_ERROR, cause, TLVP_LEN(&tp, RSL_IE_CAUSE)); msg->lchan->error_cause = *cause; - if (*cause != RSL_ERR_RCH_ALR_ACTV_ALLOC) - rsl_lchan_set_state(msg->lchan, LCHAN_S_BROKEN); - else + if (*cause != RSL_ERR_RCH_ALR_ACTV_ALLOC) { + rsl_lchan_mark_broken(msg->lchan, "NACK on activation"); + } else rsl_rf_chan_release(msg->lchan, 1, SACCH_DEACTIVATE); - } else - rsl_lchan_set_state(msg->lchan, LCHAN_S_BROKEN); + } else { + rsl_lchan_mark_broken(msg->lchan, "NACK on activation no IE"); + } LOGPC(DRSL, LOGL_ERROR, "\n"); |