stats: Add counters for Tx BSSMAP messages.
We already have counters for Rx side, now we also count Tx side. See comments in the msc_ctr_description array implementation for the details. Change-Id: I89a173f6bdd9a3c21233fe01d07ab2ff0442bb10
This commit is contained in:
parent
69ba8be60e
commit
98824b8f06
|
@ -58,6 +58,7 @@ enum {
|
|||
|
||||
/* Constants for the MSC rate counters */
|
||||
enum {
|
||||
/* Rx message counters */
|
||||
MSC_CTR_BSSMAP_RX_UDT_RESET_ACKNOWLEDGE,
|
||||
MSC_CTR_BSSMAP_RX_UDT_RESET,
|
||||
MSC_CTR_BSSMAP_RX_UDT_PAGING,
|
||||
|
@ -71,6 +72,35 @@ enum {
|
|||
MSC_CTR_BSSMAP_RX_DT1_UNKNOWN,
|
||||
MSC_CTR_BSSMAP_RX_DTAP_MSG,
|
||||
MSC_CTR_BSSMAP_RX_DTAP_ERROR,
|
||||
|
||||
/* Tx message counters (per connection type) */
|
||||
MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT,
|
||||
MSC_CTR_BSSMAP_TX_DTAP,
|
||||
MSC_CTR_BSSMAP_TX_UNKNOWN,
|
||||
MSC_CTR_BSSMAP_TX_SHORT,
|
||||
MSC_CTR_BSSMAP_TX_ERR_CONN_NOT_READY,
|
||||
MSC_CTR_BSSMAP_TX_ERR_SEND,
|
||||
MSC_CTR_BSSMAP_TX_SUCCESS,
|
||||
|
||||
/* Tx message counters (per message type) */
|
||||
MSC_CTR_BSSMAP_TX_UDT_RESET,
|
||||
MSC_CTR_BSSMAP_TX_UDT_RESET_ACK,
|
||||
MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST,
|
||||
MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT,
|
||||
MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT,
|
||||
MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_LCLS_CONNECT_CTRL_ACK,
|
||||
MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED,
|
||||
MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED,
|
||||
MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT,
|
||||
MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE,
|
||||
MSC_CTR_BSSMAP_TX_DT1_DTAP,
|
||||
};
|
||||
|
||||
/* Constants for the MSC stats */
|
||||
|
|
|
@ -116,10 +116,12 @@ static void on_assignment_failure(struct gsm_subscriber_connection *conn)
|
|||
{
|
||||
struct msgb *resp = gsm0808_create_assignment_failure(conn->assignment.failure_cause, NULL);
|
||||
|
||||
if (!resp)
|
||||
if (!resp) {
|
||||
LOG_ASSIGNMENT(conn, LOGL_ERROR, "Unable to compose BSSMAP Assignment Failure message\n");
|
||||
else
|
||||
} else {
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE]);
|
||||
gscon_sigtran_send(conn, resp);
|
||||
}
|
||||
|
||||
/* If assignment failed as early as in assignment_fsm_start(), there may not be an fi yet. */
|
||||
if (conn->assignment.fi) {
|
||||
|
@ -206,6 +208,7 @@ static void send_assignment_complete(struct gsm_subscriber_connection *conn)
|
|||
conn->assignment.req.use_osmux)
|
||||
_gsm0808_ass_compl_extend_osmux(resp, osmux_cid);
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE]);
|
||||
rc = gscon_sigtran_send(conn, resp);
|
||||
if (rc) {
|
||||
assignment_fail(GSM0808_CAUSE_EQUIPMENT_FAILURE,
|
||||
|
|
|
@ -143,6 +143,7 @@ static void gscon_bssmap_clear(struct gsm_subscriber_connection *conn,
|
|||
LOGPFSML(conn->fi, LOGL_ERROR, "Unable to compose BSSMAP Clear Request message\n");
|
||||
return;
|
||||
}
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST]);
|
||||
rc = osmo_bsc_sigtran_send(conn, resp);
|
||||
if (rc < 0)
|
||||
LOGPFSML(conn->fi, LOGL_ERROR, "Unable to deliver BSSMAP Clear Request message\n");
|
||||
|
@ -157,6 +158,7 @@ static void forward_dtap(struct gsm_subscriber_connection *conn, struct msgb *ms
|
|||
OSMO_ASSERT(conn);
|
||||
|
||||
resp = gsm0808_create_dtap(msg, OBSC_LINKID_CB(msg));
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_DTAP]);
|
||||
gscon_sigtran_send(conn, resp);
|
||||
}
|
||||
|
||||
|
@ -761,6 +763,7 @@ static void gscon_fsm_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *d
|
|||
/* Close MGCP connections */
|
||||
osmo_mgcpc_ep_clear(conn->user_plane.mgw_endpoint);
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE]);
|
||||
gscon_sigtran_send(conn, gsm0808_create_clear_complete());
|
||||
break;
|
||||
case GSCON_EV_A_DISC_IND:
|
||||
|
|
|
@ -133,6 +133,7 @@ void bsc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci)
|
|||
|
||||
LOGP(DMSC, LOGL_NOTICE, "Tx MSC SAPI N REJECT DLCI=0x%02x\n", dlci);
|
||||
resp = gsm0808_create_sapi_reject(dlci);
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT]);
|
||||
rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
if (rc != 0)
|
||||
msgb_free(resp);
|
||||
|
@ -149,6 +150,7 @@ void bsc_cipher_mode_compl(struct gsm_subscriber_connection *conn, struct msgb *
|
|||
|
||||
LOGP(DMSC, LOGL_DEBUG, "CIPHER MODE COMPLETE from MS, forwarding to MSC\n");
|
||||
resp = gsm0808_create_cipher_complete(msg, chosen_encr);
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE]);
|
||||
rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
if (rc != 0)
|
||||
msgb_free(resp);
|
||||
|
@ -712,6 +714,7 @@ static int bsc_clear_request(struct gsm_subscriber_connection *conn, uint32_t ca
|
|||
return 1;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST]);
|
||||
rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
if (rc != 0)
|
||||
msgb_free(resp);
|
||||
|
@ -742,6 +745,7 @@ void bsc_cm_update(struct gsm_subscriber_connection *conn,
|
|||
if (!msc_connected(conn))
|
||||
return;
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE]);
|
||||
resp = gsm0808_create_classmark_update(cm2, cm2_len, cm3, cm3_len);
|
||||
rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
if (rc != 0)
|
||||
|
|
|
@ -773,6 +773,7 @@ static void send_handover_performed(struct gsm_subscriber_connection *conn)
|
|||
return;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED]);
|
||||
rc = gscon_sigtran_send(conn, msg);
|
||||
if (rc < 0) {
|
||||
LOG_HO(conn, LOGL_ERROR, "message sending failed, can't send HANDOVER PERFORMED!\n");
|
||||
|
|
|
@ -560,6 +560,7 @@ reject:
|
|||
return -1;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT]);
|
||||
osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
return -1;
|
||||
}
|
||||
|
@ -640,6 +641,7 @@ static int bssmap_handle_lcls_connect_ctrl(struct gsm_subscriber_connection *con
|
|||
LOGPFSM(conn->fi, "Tx LCLS CONNECT CTRL ACK (%s)\n",
|
||||
gsm0808_lcls_status_name(lcls_get_status(conn)));
|
||||
resp = gsm0808_create_lcls_conn_ctrl_ack(lcls_get_status(conn));
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_LCLS_CONNECT_CTRL_ACK]);
|
||||
osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
|
||||
return 0;
|
||||
|
@ -954,6 +956,7 @@ reject:
|
|||
resp = gsm0808_create_assignment_failure(cause, NULL);
|
||||
OSMO_ASSERT(resp);
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE]);
|
||||
osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
|
||||
return -1;
|
||||
}
|
||||
|
@ -1273,6 +1276,7 @@ int bsc_tx_bssmap_ho_required(struct gsm_lchan *lchan, const struct gsm0808_cell
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&lchan->conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED]);
|
||||
rc = gscon_sigtran_send(lchan->conn, msg);
|
||||
if (rc) {
|
||||
LOG_HO(lchan->conn, LOGL_ERROR, "Cannot send BSSMAP Handover Required message\n");
|
||||
|
@ -1318,6 +1322,7 @@ int bsc_tx_bssmap_ho_request_ack(struct gsm_subscriber_connection *conn, struct
|
|||
params.aoip_transport_layer = &ss;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE]);
|
||||
LOG_HO(conn, LOGL_DEBUG, "Sending BSSMAP Handover Request Acknowledge\n");
|
||||
msg = gsm0808_create_handover_request_ack2(¶ms);
|
||||
msgb_free(rr_ho_command);
|
||||
|
@ -1333,6 +1338,7 @@ int bsc_tx_bssmap_ho_detect(struct gsm_subscriber_connection *conn)
|
|||
if (!msg)
|
||||
return -ENOMEM;
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT]);
|
||||
return osmo_bsc_sigtran_send(conn, msg);
|
||||
}
|
||||
|
||||
|
@ -1372,6 +1378,7 @@ enum handover_result bsc_tx_bssmap_ho_complete(struct gsm_subscriber_connection
|
|||
return HO_RESULT_ERROR;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE]);
|
||||
rc = osmo_bsc_sigtran_send(conn, msg);
|
||||
if (rc) {
|
||||
LOG_HO(conn, LOGL_ERROR, "Cannot send BSSMAP Handover Complete message\n");
|
||||
|
@ -1393,6 +1400,7 @@ void bsc_tx_bssmap_ho_failure(struct gsm_subscriber_connection *conn)
|
|||
return;
|
||||
}
|
||||
|
||||
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE]);
|
||||
rc = osmo_bsc_sigtran_send(conn, msg);
|
||||
if (rc)
|
||||
LOG_HO(conn, LOGL_ERROR, "Cannot send BSSMAP Handover Failure message (rc=%d %s)\n",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include <unistd.h>
|
||||
|
||||
static const struct rate_ctr_desc msc_ctr_description[] = {
|
||||
/* Rx message counters */
|
||||
[MSC_CTR_BSSMAP_RX_UDT_RESET_ACKNOWLEDGE] = {"bssmap:rx_udt_reset_acknowledge", "Number of received BSSMAP UDT RESET ACKNOWLEDGE messages"},
|
||||
[MSC_CTR_BSSMAP_RX_UDT_RESET] = {"bssmap:rx_udt_reset", "Number of received BSSMAP UDT RESET messages"},
|
||||
[MSC_CTR_BSSMAP_RX_UDT_PAGING] = {"bssmap:rx_udt_paging", "Number of received BSSMAP UDT PAGING messages"},
|
||||
|
@ -57,6 +58,46 @@ static const struct rate_ctr_desc msc_ctr_description[] = {
|
|||
[MSC_CTR_BSSMAP_RX_DT1_UNKNOWN] = {"bssmap:rx_dt1_unknown", "Number of received BSSMAP unknown DT1 messages"},
|
||||
[MSC_CTR_BSSMAP_RX_DTAP_MSG] = {"bssmap:rx_dtap_msg", "Number of received BSSMAP DTAP messages"},
|
||||
[MSC_CTR_BSSMAP_RX_DTAP_ERROR] = {"bssmap:rx_dtap_error", "Number of received BSSMAP DTAP messages with errors"},
|
||||
|
||||
/* Tx message counters (per message type)
|
||||
*
|
||||
* The counters here follow the logic of the osmo_bsc_sigtran_send() function
|
||||
* which receives DT1 messages from the upper layers and actually sends them to the MSC.
|
||||
* These counters cover all messages passed to the function by the upper layers: */
|
||||
[MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT] = {"bssmap:tx:type:bss_management", "Number of transmitted BSS MANAGEMENT messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DTAP] = {"bssmap:tx:type:dtap", "Number of transmitted DTAP messages"},
|
||||
[MSC_CTR_BSSMAP_TX_UNKNOWN] = {"bssmap:tx:type:err_unknown", "Number of transmitted messages with unknown type (an error in our code?)"},
|
||||
[MSC_CTR_BSSMAP_TX_SHORT] = {"bssmap:tx:type:err_short", "Number of transmitted messages which are too short (an error in our code?)"},
|
||||
/* The next counters are also counted in the osmo_bsc_sigtran_send() function and
|
||||
* sum up to the exactly same number as the counters above but instead of message
|
||||
* classes they split by the result of the sending attempt: */
|
||||
[MSC_CTR_BSSMAP_TX_ERR_CONN_NOT_READY] = {"bssmap:tx:result:err_conn_not_ready", "Number of BSSMAP messages we tried to send when the connection was not ready yet"},
|
||||
[MSC_CTR_BSSMAP_TX_ERR_SEND] = {"bssmap:tx:result:err_send", "Number of socket errors while sending BSSMAP messages"},
|
||||
[MSC_CTR_BSSMAP_TX_SUCCESS] = {"bssmap:tx:result:success", "Number of successfully sent BSSMAP messages"},
|
||||
|
||||
/* Tx message counters (per specific message)
|
||||
*
|
||||
* Theoretically, the DT1 counters should sum up to the same number as the Tx counters
|
||||
* above but since these counters are coming from the upper layers, there might be
|
||||
* some difference if we forget some code path. */
|
||||
[MSC_CTR_BSSMAP_TX_UDT_RESET] = {"bssmap:tx:udt:reset:request", "Number of transmitted BSSMAP UDT RESET messages"},
|
||||
[MSC_CTR_BSSMAP_TX_UDT_RESET_ACK] = {"bssmap:tx:udt:reset:ack", "Number of transmitted BSSMAP UDT RESET ACK messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST] = {"bssmap:tx:dt1:clear:rqst", "Number of transmitted BSSMAP DT1 CLEAR RQSTtx messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE] = {"bssmap:tx:dt1:clear:complete", "Number of transmitted BSSMAP DT1 CLEAR COMPLETE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE] = {"bssmap:tx:dt1:assigment:failure", "Number of transmitted BSSMAP DT1 ASSIGMENT FAILURE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE] = {"bssmap:tx:dt1:assigment:complete", "Number of transmitted BSSMAP DT1 ASSIGMENT COMPLETE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT] = {"bssmap:tx:dt1:sapi_n:reject", "Number of transmitted BSSMAP DT1 SAPI N REJECT messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE] = {"bssmap:tx:dt1:cipher_mode:complete", "Number of transmitted BSSMAP DT1 CIPHER COMPLETE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT] = {"bssmap:tx:dt1:cipher_mode:reject", "Number of transmitted BSSMAP DT1 CIPHER REJECT messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE] = {"bssmap:tx:dt1:classmark:update", "Number of transmitted BSSMAP DT1 CLASSMARK UPDATE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_LCLS_CONNECT_CTRL_ACK] = {"bssmap:tx:dt1:lcls_connect_ctrl:ack", "Number of transmitted BSSMAP DT1 LCLS CONNECT CTRL ACK messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED] = {"bssmap:tx:dt1:handover:required", "Number of transmitted BSSMAP DT1 HANDOVER REQUIRED messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED] = {"bssmap:tx:dt1:handover:performed", "Number of transmitted BSSMAP DT1 HANDOVER PERFORMED messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE] = {"bssmap:tx:dt1:handover:rqst_acknowledge", "Number of transmitted BSSMAP DT1 HANDOVER RQST ACKNOWLEDGE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT] = {"bssmap:tx:dt1:handover:detect", "Number of transmitted BSSMAP DT1 HANDOVER DETECT messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE] = {"bssmap:tx:dt1:handover:complete", "Number of transmitted BSSMAP DT1 HANDOVER COMPLETE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE] = {"bssmap:tx:dt1:handover:failure", "Number of transmitted BSSMAP DT1 HANDOVER FAILURE messages"},
|
||||
[MSC_CTR_BSSMAP_TX_DT1_DTAP] = {"bssmap:tx:dt1:dtap", "Number of transmitted BSSMAP DT1 DTAP messages"},
|
||||
};
|
||||
|
||||
static const struct rate_ctr_group_desc msc_ctrg_desc = {
|
||||
|
|
|
@ -105,6 +105,7 @@ static void osmo_bsc_sigtran_tx_reset(const struct bsc_msc_data *msc)
|
|||
if (msc_is_aoip(msc) && msc->use_osmux != OSMUX_USAGE_OFF)
|
||||
_gsm0808_extend_announce_osmux(msg);
|
||||
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_UDT_RESET]);
|
||||
osmo_sccp_tx_unitdata_msg(msc->a.sccp_user, &msc->a.bsc_addr,
|
||||
&msc->a.msc_addr, msg);
|
||||
}
|
||||
|
@ -124,6 +125,7 @@ void osmo_bsc_sigtran_tx_reset_ack(const struct bsc_msc_data *msc)
|
|||
if (msc_is_aoip(msc) && msc->use_osmux != OSMUX_USAGE_OFF)
|
||||
_gsm0808_extend_announce_osmux(msg);
|
||||
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_UDT_RESET_ACK]);
|
||||
osmo_sccp_tx_unitdata_msg(msc->a.sccp_user, &msc->a.bsc_addr,
|
||||
&msc->a.msc_addr, msg);
|
||||
}
|
||||
|
@ -383,20 +385,26 @@ int osmo_bsc_sigtran_send(struct gsm_subscriber_connection *conn, struct msgb *m
|
|||
if (msg->len >= 3) {
|
||||
switch (msg->data[0]) {
|
||||
case BSSAP_MSG_BSS_MANAGEMENT:
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT]);
|
||||
LOGP(DMSC, LOGL_INFO, "Tx MSC: BSSMAP: %s\n",
|
||||
gsm0808_bssmap_name(msg->data[2]));
|
||||
break;
|
||||
case BSSAP_MSG_DTAP:
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DTAP]);
|
||||
LOGP(DMSC, LOGL_INFO, "Tx MSC: DTAP\n");
|
||||
break;
|
||||
default:
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_UNKNOWN]);
|
||||
LOGP(DMSC, LOGL_ERROR, "Tx MSC: unknown message type: 0x%x\n",
|
||||
msg->data[0]);
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_SHORT]);
|
||||
LOGP(DMSC, LOGL_ERROR, "Tx MSC: message too short: %u\n", msg->len);
|
||||
}
|
||||
|
||||
if (a_reset_conn_ready(msc) == false) {
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_ERR_CONN_NOT_READY]);
|
||||
LOGP(DMSC, LOGL_ERROR, "MSC is not connected. Dropping.\n");
|
||||
msgb_free(msg);
|
||||
return -EINVAL;
|
||||
|
@ -410,6 +418,10 @@ int osmo_bsc_sigtran_send(struct gsm_subscriber_connection *conn, struct msgb *m
|
|||
conn_id, osmo_sccp_addr_name(ss7, &msc->a.msc_addr), osmo_hexdump(msg->data, msg->len));
|
||||
|
||||
rc = osmo_sccp_tx_data_msg(msc->a.sccp_user, conn_id, msg);
|
||||
if (rc >= 0)
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_SUCCESS]);
|
||||
else
|
||||
rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_ERR_SEND]);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue