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.
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index ae405c9..479323d 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -210,7 +210,7 @@
"%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 @@
"%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 @@
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 @@
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");