From 66625de21c8685040dfb1ff1b8dbea399e13b709 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Tue, 26 Jul 2022 12:40:18 +0200 Subject: [PATCH] sbcap: Improve logging of rx Error Indication Change-Id: I63871a57f219a98f8191e6ee4787fc33edb21528 --- src/sbcap_link_fsm.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/sbcap_link_fsm.c b/src/sbcap_link_fsm.c index d4d10f2..39dd281 100644 --- a/src/sbcap_link_fsm.c +++ b/src/sbcap_link_fsm.c @@ -212,6 +212,47 @@ static int get_msg_id(struct cbc_sbcap_link *link, const SBcAP_SBC_AP_PDU_t *pdu return osmo_load16be(ie->buf); } +/* Rx Error Indication from peer */ +static int cbc_sbcap_link_rx_error_ind(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu) +{ + A_SEQUENCE_OF(void) *as_pdu = NULL; + SBcAP_ErrorIndicationIEs_t *ie; + SBcAP_Criticality_Diagnostics_t *ie_diag = NULL; + long cause = -1; + long proc_code = -1; + long trigger_msg = -1; + long criticality = -1; + int i; + + as_pdu = (void *)&pdu->choice.initiatingMessage.value.choice.Error_Indication.protocolIEs.list; + OSMO_ASSERT(as_pdu); + + for (i = 0; i < as_pdu->count; i++) { + ie = (SBcAP_ErrorIndicationIEs_t *)(as_pdu->array[i]); + OSMO_ASSERT(ie); + switch (ie->id) { + case SBcAP_ErrorIndicationIEs__value_PR_Cause: + cause = ie->value.choice.Cause; + break; + case SBcAP_ErrorIndicationIEs__value_PR_Criticality_Diagnostics: + ie_diag = &ie->value.choice.Criticality_Diagnostics; + if (ie_diag->procedureCode) + proc_code = *ie_diag->procedureCode; + if (ie_diag->triggeringMessage) + trigger_msg = *ie_diag->triggeringMessage; + if (ie_diag->procedureCriticality) + criticality = *ie_diag->procedureCriticality; + break; + default: + continue; + } + } + + LOGPSBCAPC(link, LOGL_ERROR, "Rx ERROR_IND (cause=%ld, diagnostics=%d [proc_code=%ld, trigger_msg=%ld criticality=%ld])\n", + cause, !!ie_diag, proc_code, trigger_msg, criticality); + return 0; +} + /* message was received from remote SBcAP peer (BSC) */ int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu) { @@ -231,10 +272,11 @@ int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu) return -EINVAL; case SBcAP_ProcedureId_PWS_Restart_Indication: return osmo_fsm_inst_dispatch(link->fi, SBcAP_LINK_E_RX_RESTART, pdu); + case SBcAP_ProcedureId_Error_Indication: + return cbc_sbcap_link_rx_error_ind(link, pdu); case SBcAP_ProcedureId_Stop_Warning_Indication: case SBcAP_ProcedureId_Write_Replace_Warning_Indication: break; /* Handle msg id below */ - case SBcAP_ProcedureId_Error_Indication: case SBcAP_ProcedureId_PWS_Failure_Indication: default: LOGPSBCAPC(link, LOGL_ERROR, "SBcAP initiatingMessage procedure=%ld not implemented?\n",