laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-bsc/+/18190 )

Change subject: stats: Add counters for Tx BSSMAP messages.
......................................................................

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
---
M include/osmocom/bsc/bsc_msc_data.h
M src/osmo-bsc/assignment_fsm.c
M src/osmo-bsc/bsc_subscr_conn_fsm.c
M src/osmo-bsc/gsm_08_08.c
M src/osmo-bsc/handover_fsm.c
M src/osmo-bsc/osmo_bsc_bssap.c
M src/osmo-bsc/osmo_bsc_msc.c
M src/osmo-bsc/osmo_bsc_sigtran.c
8 files changed, 105 insertions(+), 3 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved



diff --git a/include/osmocom/bsc/bsc_msc_data.h 
b/include/osmocom/bsc/bsc_msc_data.h
index dc9628b..7db0625 100644
--- a/include/osmocom/bsc/bsc_msc_data.h
+++ b/include/osmocom/bsc/bsc_msc_data.h
@@ -58,6 +58,7 @@

 /* 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 @@
        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 */
diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c
index 16e04cd..674dcbc 100644
--- a/src/osmo-bsc/assignment_fsm.c
+++ b/src/osmo-bsc/assignment_fsm.c
@@ -116,10 +116,12 @@
 {
        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 @@
            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,
diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c 
b/src/osmo-bsc/bsc_subscr_conn_fsm.c
index 77d5d1a..0b475ff 100644
--- a/src/osmo-bsc/bsc_subscr_conn_fsm.c
+++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c
@@ -143,6 +143,7 @@
                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 @@
        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 @@
                /* 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:
diff --git a/src/osmo-bsc/gsm_08_08.c b/src/osmo-bsc/gsm_08_08.c
index 3efc665..4f9c69e 100644
--- a/src/osmo-bsc/gsm_08_08.c
+++ b/src/osmo-bsc/gsm_08_08.c
@@ -133,6 +133,7 @@

        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 @@

        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 @@
                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 @@
        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)
diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c
index e36aaae..0b88b27 100644
--- a/src/osmo-bsc/handover_fsm.c
+++ b/src/osmo-bsc/handover_fsm.c
@@ -773,6 +773,7 @@
                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");
diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c
index b92e39a..276657f 100644
--- a/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/src/osmo-bsc/osmo_bsc_bssap.c
@@ -560,6 +560,7 @@
                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 @@
        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 @@
        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 @@
                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 @@
                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(&params);
        msgb_free(rr_ho_command);
@@ -1333,6 +1338,7 @@
        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 @@
                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 @@
                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",
diff --git a/src/osmo-bsc/osmo_bsc_msc.c b/src/osmo-bsc/osmo_bsc_msc.c
index 544341b..0dbe9d4 100644
--- a/src/osmo-bsc/osmo_bsc_msc.c
+++ b/src/osmo-bsc/osmo_bsc_msc.c
@@ -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 @@
        [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 = {
diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c
index e4530bf..3871682 100644
--- a/src/osmo-bsc/osmo_bsc_sigtran.c
+++ b/src/osmo-bsc/osmo_bsc_sigtran.c
@@ -105,6 +105,7 @@
        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 @@
        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 @@
        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 @@
             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;
 }

--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/18190
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I89a173f6bdd9a3c21233fe01d07ab2ff0442bb10
Gerrit-Change-Number: 18190
Gerrit-PatchSet: 3
Gerrit-Owner: ipse <alexander.cheme...@gmail.com>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: ipse <alexander.cheme...@gmail.com>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to