sbcap: Log info about messages received and trasmitted

Change-Id: Ifd1eca79bf4fac63de8066cd6a18004138d51d04
This commit is contained in:
Pau Espin 2022-07-27 17:46:14 +02:00
parent e416069cf6
commit ab8b8402a4
4 changed files with 65 additions and 20 deletions

View File

@ -137,12 +137,14 @@ void sbcap_pdu_free(SBcAP_SBC_AP_PDU_t *pdu);
struct msgb *sbcap_encode(SBcAP_SBC_AP_PDU_t *pdu);
SBcAP_SBC_AP_PDU_t *sbcap_decode(const struct msgb *msg);
const char *sbcap_procedure_code_str(SBcAP_ProcedureCode_t pc);
const char *sbcap_cause_str(SBcAP_Cause_t cause);
void sbcap_set_log_area(int log_area);
SBcAP_ProcedureCode_t sbcap_pdu_get_procedure_code(const SBcAP_SBC_AP_PDU_t *pdu);
SBcAP_Criticality_t sbcap_pdu_get_criticality(const SBcAP_SBC_AP_PDU_t *pdu);
const char *sbcap_pdu_get_name(const SBcAP_SBC_AP_PDU_t *pdu);
void *sbcap_as_find_ie(void *void_list, SBcAP_ProtocolIE_ID_t ie_id);

View File

@ -30,6 +30,22 @@ extern int asn1_xer_print;
int _sbcap_DSBCAP = 0;
#define DSBCAP _sbcap_DSBCAP
static const struct value_string sbcap_procedure_code_vals[] = {
{ SBcAP_ProcedureId_Write_Replace_Warning, "Write-Replace-Warning" },
{ SBcAP_ProcedureId_Stop_Warning, "Stop-Warning" },
{ SBcAP_ProcedureId_Error_Indication, "Error-Indication" },
{ SBcAP_ProcedureId_Write_Replace_Warning_Indication, "Write-Replace-Warning-Indication" },
{ SBcAP_ProcedureId_Stop_Warning_Indication, "Stop-Warning-Indication" },
{ SBcAP_ProcedureId_PWS_Restart_Indication, "PWS-Restart-Indication" },
{ SBcAP_ProcedureId_PWS_Failure_Indication, "PWS-Failure-Indication" },
{ 0, NULL }
};
const char *sbcap_procedure_code_str(SBcAP_ProcedureCode_t pc)
{
return get_value_string(sbcap_procedure_code_vals, pc);
}
static const struct value_string sbcap_cause_vals[] = {
{ SBcAP_Cause_message_accepted, "message accepted" },
{ SBcAP_Cause_parameter_not_recognised, "parameter not recognised" },
@ -141,6 +157,27 @@ SBcAP_Criticality_t sbcap_pdu_get_criticality(const SBcAP_SBC_AP_PDU_t *pdu)
}
}
const char *sbcap_pdu_get_name(const SBcAP_SBC_AP_PDU_t *pdu)
{
static char pdu_name[256] = "<unknown>";
struct osmo_strbuf sb = { .buf = pdu_name, .len = sizeof(pdu_name) };
SBcAP_ProcedureCode_t pc = sbcap_pdu_get_procedure_code(pdu);
OSMO_STRBUF_PRINTF(sb, "%s", sbcap_procedure_code_str(pc));
switch (pc) {
case SBcAP_ProcedureId_Write_Replace_Warning:
case SBcAP_ProcedureId_Stop_Warning:
OSMO_STRBUF_PRINTF(sb, "%s",
pdu->present == SBcAP_SBC_AP_PDU_PR_initiatingMessage
? "-Request" : "-Response");
break;
default:
break;
}
return pdu_name;
}
void *sbcap_as_find_ie(void *void_list, SBcAP_ProtocolIE_ID_t ie_id)
{
A_SEQUENCE_OF(SBcAP_ProtocolIE_ID_t) *li = (void *)void_list;

View File

@ -157,13 +157,13 @@ static int cbc_sbcap_link_cli_read_cb(struct osmo_stream_cli *conn)
if (rc == 0)
goto out;
LOGPSBCAPC(link, LOGL_DEBUG, "Received SBc-AP %s\n", msgb_hexdump(msg));
LOGPSBCAPC(link, LOGL_DEBUG, "Rx SBc-AP %s\n", msgb_hexdump(msg));
/* decode + dispatch message */
pdu = sbcap_decode(msg);
if (pdu) {
LOGPSBCAPC(link, LOGL_INFO, "Received SBc-AP %d\n",
pdu->present);
LOGPSBCAPC(link, LOGL_INFO, "Rx SBc-AP %s\n",
sbcap_pdu_get_name(pdu));
g_cbc->sbcap.mgr->rx_cb(link, pdu);
} else {
LOGPSBCAPC(link, LOGL_ERROR, "Unable to decode %s\n", msgb_hexdump(msg));
@ -274,13 +274,13 @@ static int sbcap_cbc_srv_read_cb(struct osmo_stream_srv *conn)
if (rc == 0)
goto out;
LOGPSBCAPC(link, LOGL_DEBUG, "Received SBc-AP %s\n", msgb_hexdump(msg));
LOGPSBCAPC(link, LOGL_DEBUG, "Rx SBc-AP %s\n", msgb_hexdump(msg));
/* decode + dispatch message */
pdu = sbcap_decode(msg);
if (pdu) {
LOGPSBCAPC(link, LOGL_INFO, "Received SBc-AP %d\n",
pdu->present);
LOGPSBCAPC(link, LOGL_INFO, "Rx SBc-AP %s\n",
sbcap_pdu_get_name(pdu));
cbc->rx_cb(link, pdu);
} else {
LOGPSBCAPC(link, LOGL_ERROR, "Unable to decode %s\n", msgb_hexdump(msg));
@ -389,16 +389,19 @@ void cbc_sbcap_link_tx(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu)
}
if (!link) {
LOGP(DSBcAP, LOGL_NOTICE, "Cannot transmit msg: no connection\n");
LOGP(DSBcAP, LOGL_NOTICE, "Cannot transmit msg %s: no connection\n",
sbcap_pdu_get_name(pdu));
return;
}
LOGPSBCAPC(link, LOGL_INFO, "Transmitting msg\n");
LOGPSBCAPC(link, LOGL_INFO, "Tx msg %s\n",
sbcap_pdu_get_name(pdu));
OSMO_ASSERT(link->conn);
msg = sbcap_encode(pdu);
if (!msg)
goto ret_free;
LOGPSBCAPC(link, LOGL_DEBUG, "Encoded message: %s\n", msgb_hexdump(msg));
LOGPSBCAPC(link, LOGL_DEBUG, "Encoded message %s: %s\n",
sbcap_pdu_get_name(pdu), msgb_hexdump(msg));
if (link->is_client)
osmo_stream_cli_send(link->cli_conn, msg);
else

View File

@ -193,7 +193,8 @@ static int get_msg_id(struct cbc_sbcap_link *link, const SBcAP_SBC_AP_PDU_t *pdu
if (!ie)
return -1;
if (ie->size != 2) {
LOGPSBCAPC(link, LOGL_ERROR, "get_msg_id wrong size %zu\n", ie->size);
LOGPSBCAPC(link, LOGL_ERROR, "get_msg_id(%s) wrong size %zu\n",
sbcap_pdu_get_name(pdu), ie->size);
return -1;
}
return osmo_load16be(ie->buf);
@ -235,8 +236,8 @@ static int cbc_sbcap_link_rx_error_ind(struct cbc_sbcap_link *link, SBcAP_SBC_AP
}
}
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);
LOGPSBCAPC(link, LOGL_ERROR, "Rx %s (cause=%ld, diagnostics=%d [proc_code=%ld, trigger_msg=%ld criticality=%ld])\n",
sbcap_pdu_get_name(pdu), cause, !!ie_diag, proc_code, trigger_msg, criticality);
return 0;
}
@ -255,15 +256,16 @@ int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu)
case SBcAP_ProcedureId_Write_Replace_Warning:
case SBcAP_ProcedureId_Stop_Warning:
LOGPSBCAPC(link, LOGL_ERROR,
"SBcAP initiatingMessage procedure=%ld MME->CBC not expected\n",
pdu->choice.initiatingMessage.procedureCode);
"SBcAP %s MME->CBC not expected\n",
sbcap_pdu_get_name(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_PWS_Failure_Indication:
LOGPSBCAPC(link, LOGL_NOTICE, "Rx PWS Failure Indication not implemented yet\n");
LOGPSBCAPC(link, LOGL_NOTICE, "Rx %s not implemented yet\n",
sbcap_pdu_get_name(pdu));
return 0;
case SBcAP_ProcedureId_Stop_Warning_Indication:
case SBcAP_ProcedureId_Write_Replace_Warning_Indication:
@ -276,7 +278,8 @@ int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu)
cbc_sbcap_link_tx(link, err_ind_pdu);
else
LOGPSBCAPC(link, LOGL_ERROR,
"Tx SBc-AP Error-Indication: msg gen failed\n");
"Tx SBc-AP %s: msg gen failed\n",
sbcap_pdu_get_name(err_ind_pdu));
return 0;
}
break;
@ -311,8 +314,8 @@ int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu)
/* look-up smscb_message */
smscb = cbc_message_by_id(msg_id);
if (!smscb) {
LOGPSBCAPC(link, LOGL_ERROR, "Rx SBc-AP msg for unknown message-id 0x%04x\n",
msg_id);
LOGPSBCAPC(link, LOGL_ERROR, "Rx SBc-AP %s for unknown message-id 0x%04x\n",
sbcap_pdu_get_name(pdu), msg_id);
/* TODO: inform peer? */
return 0;
}
@ -320,8 +323,8 @@ int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu)
/* look-up smscb_message_peer */
mp = cbc_message_peer_get(smscb, link->peer);
if (!mp) {
LOGPSBCAPC(link, LOGL_ERROR, "Rx SBc-AP msg for message-id 0x%04x without peer %s\n",
msg_id, link->peer->name);
LOGPSBCAPC(link, LOGL_ERROR, "Rx SBc-AP %s for message-id 0x%04x without peer %s\n",
sbcap_pdu_get_name(pdu), msg_id, link->peer->name);
/* TODO: inform peer? */
return 0;
}