<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18190">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">stats: Add counters for Tx BSSMAP messages.<br><br>We already have counters for Rx side, now we also count Tx side.<br>See comments in the msc_ctr_description array implementation for<br>the details.<br><br>Change-Id: I89a173f6bdd9a3c21233fe01d07ab2ff0442bb10<br>---<br>M include/osmocom/bsc/bsc_msc_data.h<br>M src/osmo-bsc/assignment_fsm.c<br>M src/osmo-bsc/bsc_subscr_conn_fsm.c<br>M src/osmo-bsc/gsm_08_08.c<br>M src/osmo-bsc/handover_fsm.c<br>M src/osmo-bsc/osmo_bsc_bssap.c<br>M src/osmo-bsc/osmo_bsc_msc.c<br>M src/osmo-bsc/osmo_bsc_sigtran.c<br>8 files changed, 105 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h</span><br><span>index dc9628b..7db0625 100644</span><br><span>--- a/include/osmocom/bsc/bsc_msc_data.h</span><br><span>+++ b/include/osmocom/bsc/bsc_msc_data.h</span><br><span>@@ -58,6 +58,7 @@</span><br><span> </span><br><span> /* Constants for the MSC rate counters */</span><br><span> enum {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Rx message counters */</span><br><span>    MSC_CTR_BSSMAP_RX_UDT_RESET_ACKNOWLEDGE,</span><br><span>     MSC_CTR_BSSMAP_RX_UDT_RESET,</span><br><span>         MSC_CTR_BSSMAP_RX_UDT_PAGING,</span><br><span>@@ -71,6 +72,35 @@</span><br><span>   MSC_CTR_BSSMAP_RX_DT1_UNKNOWN,</span><br><span>       MSC_CTR_BSSMAP_RX_DTAP_MSG,</span><br><span>  MSC_CTR_BSSMAP_RX_DTAP_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Tx message counters (per connection type) */</span><br><span style="color: hsl(120, 100%, 40%);">+       MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+     MSC_CTR_BSSMAP_TX_DTAP,</span><br><span style="color: hsl(120, 100%, 40%);">+       MSC_CTR_BSSMAP_TX_UNKNOWN,</span><br><span style="color: hsl(120, 100%, 40%);">+    MSC_CTR_BSSMAP_TX_SHORT,</span><br><span style="color: hsl(120, 100%, 40%);">+      MSC_CTR_BSSMAP_TX_ERR_CONN_NOT_READY,</span><br><span style="color: hsl(120, 100%, 40%);">+ MSC_CTR_BSSMAP_TX_ERR_SEND,</span><br><span style="color: hsl(120, 100%, 40%);">+   MSC_CTR_BSSMAP_TX_SUCCESS,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Tx message counters (per message type) */</span><br><span style="color: hsl(120, 100%, 40%);">+  MSC_CTR_BSSMAP_TX_UDT_RESET,</span><br><span style="color: hsl(120, 100%, 40%);">+  MSC_CTR_BSSMAP_TX_UDT_RESET_ACK,</span><br><span style="color: hsl(120, 100%, 40%);">+      MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST,</span><br><span style="color: hsl(120, 100%, 40%);">+     MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE,</span><br><span style="color: hsl(120, 100%, 40%);">+ MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE,</span><br><span style="color: hsl(120, 100%, 40%);">+      MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE,</span><br><span style="color: hsl(120, 100%, 40%);">+     MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT,</span><br><span style="color: hsl(120, 100%, 40%);">+  MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE,</span><br><span style="color: hsl(120, 100%, 40%);">+        MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT,</span><br><span style="color: hsl(120, 100%, 40%);">+  MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE,</span><br><span style="color: hsl(120, 100%, 40%);">+       MSC_CTR_BSSMAP_TX_DT1_LCLS_CONNECT_CTRL_ACK,</span><br><span style="color: hsl(120, 100%, 40%);">+  MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED,</span><br><span style="color: hsl(120, 100%, 40%);">+      MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED,</span><br><span style="color: hsl(120, 100%, 40%);">+     MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE,</span><br><span style="color: hsl(120, 100%, 40%);">+      MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT,</span><br><span style="color: hsl(120, 100%, 40%);">+        MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE,</span><br><span style="color: hsl(120, 100%, 40%);">+      MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE,</span><br><span style="color: hsl(120, 100%, 40%);">+       MSC_CTR_BSSMAP_TX_DT1_DTAP,</span><br><span> };</span><br><span> </span><br><span> /* Constants for the MSC stats */</span><br><span>diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c</span><br><span>index 16e04cd..674dcbc 100644</span><br><span>--- a/src/osmo-bsc/assignment_fsm.c</span><br><span>+++ b/src/osmo-bsc/assignment_fsm.c</span><br><span>@@ -116,10 +116,12 @@</span><br><span> {</span><br><span>     struct msgb *resp = gsm0808_create_assignment_failure(conn->assignment.failure_cause, NULL);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (!resp)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!resp) {</span><br><span>                 LOG_ASSIGNMENT(conn, LOGL_ERROR, "Unable to compose BSSMAP Assignment Failure message\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    else</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE]);</span><br><span>          gscon_sigtran_send(conn, resp);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> </span><br><span>        /* If assignment failed as early as in assignment_fsm_start(), there may not be an fi yet. */</span><br><span>        if (conn->assignment.fi) {</span><br><span>@@ -206,6 +208,7 @@</span><br><span>      conn->assignment.req.use_osmux)</span><br><span>               _gsm0808_ass_compl_extend_osmux(resp, osmux_cid);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE]);</span><br><span>         rc = gscon_sigtran_send(conn, resp);</span><br><span>         if (rc) {</span><br><span>            assignment_fail(GSM0808_CAUSE_EQUIPMENT_FAILURE,</span><br><span>diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c</span><br><span>index 77d5d1a..0b475ff 100644</span><br><span>--- a/src/osmo-bsc/bsc_subscr_conn_fsm.c</span><br><span>+++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c</span><br><span>@@ -143,6 +143,7 @@</span><br><span>          LOGPFSML(conn->fi, LOGL_ERROR, "Unable to compose BSSMAP Clear Request message\n");</span><br><span>             return;</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST]);</span><br><span>         rc = osmo_bsc_sigtran_send(conn, resp);</span><br><span>      if (rc < 0)</span><br><span>               LOGPFSML(conn->fi, LOGL_ERROR, "Unable to deliver BSSMAP Clear Request message\n");</span><br><span>@@ -157,6 +158,7 @@</span><br><span>       OSMO_ASSERT(conn);</span><br><span> </span><br><span>       resp = gsm0808_create_dtap(msg, OBSC_LINKID_CB(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_DTAP]);</span><br><span>       gscon_sigtran_send(conn, resp);</span><br><span> }</span><br><span> </span><br><span>@@ -761,6 +763,7 @@</span><br><span>               /* Close MGCP connections */</span><br><span>                 osmo_mgcpc_ep_clear(conn->user_plane.mgw_endpoint);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+            rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE]);</span><br><span>             gscon_sigtran_send(conn, gsm0808_create_clear_complete());</span><br><span>           break;</span><br><span>       case GSCON_EV_A_DISC_IND:</span><br><span>diff --git a/src/osmo-bsc/gsm_08_08.c b/src/osmo-bsc/gsm_08_08.c</span><br><span>index 3efc665..4f9c69e 100644</span><br><span>--- a/src/osmo-bsc/gsm_08_08.c</span><br><span>+++ b/src/osmo-bsc/gsm_08_08.c</span><br><span>@@ -133,6 +133,7 @@</span><br><span> </span><br><span>     LOGP(DMSC, LOGL_NOTICE, "Tx MSC SAPI N REJECT DLCI=0x%02x\n", dlci);</span><br><span>       resp = gsm0808_create_sapi_reject(dlci);</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT]);</span><br><span>      rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span>    if (rc != 0)</span><br><span>                 msgb_free(resp);</span><br><span>@@ -149,6 +150,7 @@</span><br><span> </span><br><span>   LOGP(DMSC, LOGL_DEBUG, "CIPHER MODE COMPLETE from MS, forwarding to MSC\n");</span><br><span>       resp = gsm0808_create_cipher_complete(msg, chosen_encr);</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE]);</span><br><span>    rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span>    if (rc != 0)</span><br><span>                 msgb_free(resp);</span><br><span>@@ -712,6 +714,7 @@</span><br><span>               return 1;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST]);</span><br><span>         rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span>    if (rc != 0)</span><br><span>                 msgb_free(resp);</span><br><span>@@ -742,6 +745,7 @@</span><br><span>       if (!msc_connected(conn))</span><br><span>            return;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE]);</span><br><span>   resp = gsm0808_create_classmark_update(cm2, cm2_len, cm3, cm3_len);</span><br><span>  rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span>    if (rc != 0)</span><br><span>diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c</span><br><span>index e36aaae..0b88b27 100644</span><br><span>--- a/src/osmo-bsc/handover_fsm.c</span><br><span>+++ b/src/osmo-bsc/handover_fsm.c</span><br><span>@@ -773,6 +773,7 @@</span><br><span>          return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED]);</span><br><span>         rc = gscon_sigtran_send(conn, msg);</span><br><span>  if (rc < 0) {</span><br><span>             LOG_HO(conn, LOGL_ERROR, "message sending failed, can't send HANDOVER PERFORMED!\n");</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>index b92e39a..276657f 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>@@ -560,6 +560,7 @@</span><br><span>           return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT]);</span><br><span>      osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span>         return -1;</span><br><span> }</span><br><span>@@ -640,6 +641,7 @@</span><br><span>        LOGPFSM(conn->fi, "Tx LCLS CONNECT CTRL ACK (%s)\n",</span><br><span>            gsm0808_lcls_status_name(lcls_get_status(conn)));</span><br><span>    resp = gsm0808_create_lcls_conn_ctrl_ack(lcls_get_status(conn));</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_LCLS_CONNECT_CTRL_ACK]);</span><br><span>      osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span> </span><br><span>     return 0;</span><br><span>@@ -954,6 +956,7 @@</span><br><span>      resp = gsm0808_create_assignment_failure(cause, NULL);</span><br><span>       OSMO_ASSERT(resp);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE]);</span><br><span>  osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);</span><br><span>         return -1;</span><br><span> }</span><br><span>@@ -1273,6 +1276,7 @@</span><br><span>              return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&lchan->conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED]);</span><br><span>        rc = gscon_sigtran_send(lchan->conn, msg);</span><br><span>        if (rc) {</span><br><span>            LOG_HO(lchan->conn, LOGL_ERROR, "Cannot send BSSMAP Handover Required message\n");</span><br><span>@@ -1318,6 +1322,7 @@</span><br><span>              params.aoip_transport_layer = &ss;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE]);</span><br><span>  LOG_HO(conn, LOGL_DEBUG, "Sending BSSMAP Handover Request Acknowledge\n");</span><br><span>         msg = gsm0808_create_handover_request_ack2(&params);</span><br><span>     msgb_free(rr_ho_command);</span><br><span>@@ -1333,6 +1338,7 @@</span><br><span>    if (!msg)</span><br><span>            return -ENOMEM;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT]);</span><br><span>    return osmo_bsc_sigtran_send(conn, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -1372,6 +1378,7 @@</span><br><span>            return HO_RESULT_ERROR;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE]);</span><br><span>  rc = osmo_bsc_sigtran_send(conn, msg);</span><br><span>       if (rc) {</span><br><span>            LOG_HO(conn, LOGL_ERROR, "Cannot send BSSMAP Handover Complete message\n");</span><br><span>@@ -1393,6 +1400,7 @@</span><br><span>                return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE]);</span><br><span>   rc = osmo_bsc_sigtran_send(conn, msg);</span><br><span>       if (rc)</span><br><span>              LOG_HO(conn, LOGL_ERROR, "Cannot send BSSMAP Handover Failure message (rc=%d %s)\n",</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_msc.c b/src/osmo-bsc/osmo_bsc_msc.c</span><br><span>index 544341b..0dbe9d4 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_msc.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_msc.c</span><br><span>@@ -44,6 +44,7 @@</span><br><span> #include <unistd.h></span><br><span> </span><br><span> static const struct rate_ctr_desc msc_ctr_description[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Rx message counters */</span><br><span>    [MSC_CTR_BSSMAP_RX_UDT_RESET_ACKNOWLEDGE] = {"bssmap:rx_udt_reset_acknowledge", "Number of received BSSMAP UDT RESET ACKNOWLEDGE messages"},</span><br><span>     [MSC_CTR_BSSMAP_RX_UDT_RESET] = {"bssmap:rx_udt_reset", "Number of received BSSMAP UDT RESET messages"},</span><br><span>         [MSC_CTR_BSSMAP_RX_UDT_PAGING] = {"bssmap:rx_udt_paging", "Number of received BSSMAP UDT PAGING messages"},</span><br><span>@@ -57,6 +58,46 @@</span><br><span>         [MSC_CTR_BSSMAP_RX_DT1_UNKNOWN] = {"bssmap:rx_dt1_unknown", "Number of received BSSMAP unknown DT1 messages"},</span><br><span>   [MSC_CTR_BSSMAP_RX_DTAP_MSG] = {"bssmap:rx_dtap_msg", "Number of received BSSMAP DTAP messages"},</span><br><span>        [MSC_CTR_BSSMAP_RX_DTAP_ERROR] = {"bssmap:rx_dtap_error", "Number of received BSSMAP DTAP messages with errors"},</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Tx message counters (per message type)</span><br><span style="color: hsl(120, 100%, 40%);">+      *</span><br><span style="color: hsl(120, 100%, 40%);">+     * The counters here follow the logic of the osmo_bsc_sigtran_send() function</span><br><span style="color: hsl(120, 100%, 40%);">+  * which receives DT1 messages from the upper layers and actually sends them to the MSC.</span><br><span style="color: hsl(120, 100%, 40%);">+       * These counters cover all messages passed to the function by the upper layers: */</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT] =     {"bssmap:tx:type:bss_management", "Number of transmitted BSS MANAGEMENT messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+      [MSC_CTR_BSSMAP_TX_DTAP] =               {"bssmap:tx:type:dtap", "Number of transmitted DTAP messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+  [MSC_CTR_BSSMAP_TX_UNKNOWN] =            {"bssmap:tx:type:err_unknown", "Number of transmitted messages with unknown type (an error in our code?)"},</span><br><span style="color: hsl(120, 100%, 40%);">+      [MSC_CTR_BSSMAP_TX_SHORT] =              {"bssmap:tx:type:err_short", "Number of transmitted messages which are too short (an error in our code?)"},</span><br><span style="color: hsl(120, 100%, 40%);">+      /* The next counters are also counted in the osmo_bsc_sigtran_send() function and</span><br><span style="color: hsl(120, 100%, 40%);">+      * sum up to the exactly same number as the counters above but instead of message</span><br><span style="color: hsl(120, 100%, 40%);">+      * classes they split by the result of the sending attempt: */</span><br><span style="color: hsl(120, 100%, 40%);">+        [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"},</span><br><span style="color: hsl(120, 100%, 40%);">+     [MSC_CTR_BSSMAP_TX_ERR_SEND] =           {"bssmap:tx:result:err_send", "Number of socket errors while sending BSSMAP messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+  [MSC_CTR_BSSMAP_TX_SUCCESS] =            {"bssmap:tx:result:success", "Number of successfully sent BSSMAP messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Tx message counters (per specific message)</span><br><span style="color: hsl(120, 100%, 40%);">+  *</span><br><span style="color: hsl(120, 100%, 40%);">+     * Theoretically, the DT1 counters should sum up to the same number as the Tx counters</span><br><span style="color: hsl(120, 100%, 40%);">+         * above but since these counters are coming from the upper layers, there might be</span><br><span style="color: hsl(120, 100%, 40%);">+     * some difference if we forget some code path. */</span><br><span style="color: hsl(120, 100%, 40%);">+    [MSC_CTR_BSSMAP_TX_UDT_RESET] =                     {"bssmap:tx:udt:reset:request", "Number of transmitted BSSMAP UDT RESET messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_UDT_RESET_ACK] =                 {"bssmap:tx:udt:reset:ack", "Number of transmitted BSSMAP UDT RESET ACK messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST] =                {"bssmap:tx:dt1:clear:rqst", "Number of transmitted BSSMAP DT1 CLEAR RQSTtx  messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+      [MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE] =            {"bssmap:tx:dt1:clear:complete", "Number of transmitted BSSMAP DT1 CLEAR COMPLETE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+ [MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE] =         {"bssmap:tx:dt1:assigment:failure", "Number of transmitted BSSMAP DT1 ASSIGMENT FAILURE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE] =        {"bssmap:tx:dt1:assigment:complete", "Number of transmitted BSSMAP DT1 ASSIGMENT COMPLETE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+ [MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT] =             {"bssmap:tx:dt1:sapi_n:reject", "Number of transmitted BSSMAP DT1 SAPI N REJECT messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE] =           {"bssmap:tx:dt1:cipher_mode:complete", "Number of transmitted BSSMAP DT1 CIPHER COMPLETE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+  [MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT] =             {"bssmap:tx:dt1:cipher_mode:reject", "Number of transmitted BSSMAP DT1 CIPHER REJECT messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+      [MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE] =          {"bssmap:tx:dt1:classmark:update", "Number of transmitted BSSMAP DT1 CLASSMARK UPDATE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+     [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"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED] =         {"bssmap:tx:dt1:handover:required", "Number of transmitted BSSMAP DT1 HANDOVER REQUIRED messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED] =        {"bssmap:tx:dt1:handover:performed", "Number of transmitted BSSMAP DT1 HANDOVER PERFORMED messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+ [MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE] = {"bssmap:tx:dt1:handover:rqst_acknowledge", "Number of transmitted BSSMAP DT1 HANDOVER RQST ACKNOWLEDGE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT] =           {"bssmap:tx:dt1:handover:detect", "Number of transmitted BSSMAP DT1 HANDOVER DETECT messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+       [MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE] =         {"bssmap:tx:dt1:handover:complete", "Number of transmitted BSSMAP DT1 HANDOVER COMPLETE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+   [MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE] =          {"bssmap:tx:dt1:handover:failure", "Number of transmitted BSSMAP DT1 HANDOVER FAILURE messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+     [MSC_CTR_BSSMAP_TX_DT1_DTAP] =                      {"bssmap:tx:dt1:dtap", "Number of transmitted BSSMAP DT1 DTAP messages"},</span><br><span> };</span><br><span> </span><br><span> static const struct rate_ctr_group_desc msc_ctrg_desc = {</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c</span><br><span>index e4530bf..3871682 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_sigtran.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_sigtran.c</span><br><span>@@ -105,6 +105,7 @@</span><br><span>      if (msc_is_aoip(msc) && msc->use_osmux != OSMUX_USAGE_OFF)</span><br><span>                _gsm0808_extend_announce_osmux(msg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_UDT_RESET]);</span><br><span>    osmo_sccp_tx_unitdata_msg(msc->a.sccp_user, &msc->a.bsc_addr,</span><br><span>                                &msc->a.msc_addr, msg);</span><br><span> }</span><br><span>@@ -124,6 +125,7 @@</span><br><span>  if (msc_is_aoip(msc) && msc->use_osmux != OSMUX_USAGE_OFF)</span><br><span>                _gsm0808_extend_announce_osmux(msg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_UDT_RESET_ACK]);</span><br><span>        osmo_sccp_tx_unitdata_msg(msc->a.sccp_user, &msc->a.bsc_addr,</span><br><span>                                &msc->a.msc_addr, msg);</span><br><span> }</span><br><span>@@ -383,20 +385,26 @@</span><br><span>        if (msg->len >= 3) {</span><br><span>           switch (msg->data[0]) {</span><br><span>           case BSSAP_MSG_BSS_MANAGEMENT:</span><br><span style="color: hsl(120, 100%, 40%);">+                        rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT]);</span><br><span>                       LOGP(DMSC, LOGL_INFO, "Tx MSC: BSSMAP: %s\n",</span><br><span>                           gsm0808_bssmap_name(msg->data[2]));</span><br><span>                  break;</span><br><span>               case BSSAP_MSG_DTAP:</span><br><span style="color: hsl(120, 100%, 40%);">+                  rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DTAP]);</span><br><span>                         LOGP(DMSC, LOGL_INFO, "Tx MSC: DTAP\n");</span><br><span>                   break;</span><br><span>               default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_UNKNOWN]);</span><br><span>                      LOGP(DMSC, LOGL_ERROR, "Tx MSC: unknown message type: 0x%x\n",</span><br><span>                          msg->data[0]);</span><br><span>               }</span><br><span style="color: hsl(0, 100%, 40%);">-       } else</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_SHORT]);</span><br><span>                LOGP(DMSC, LOGL_ERROR, "Tx MSC: message too short: %u\n", msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        if (a_reset_conn_ready(msc) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_ERR_CONN_NOT_READY]);</span><br><span>           LOGP(DMSC, LOGL_ERROR, "MSC is not connected. Dropping.\n");</span><br><span>               msgb_free(msg);</span><br><span>              return -EINVAL;</span><br><span>@@ -410,6 +418,10 @@</span><br><span>            conn_id, osmo_sccp_addr_name(ss7, &msc->a.msc_addr), osmo_hexdump(msg->data, msg->len));</span><br><span> </span><br><span>       rc = osmo_sccp_tx_data_msg(msc->a.sccp_user, conn_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (rc >= 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_SUCCESS]);</span><br><span style="color: hsl(120, 100%, 40%);">+       else</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(&msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_ERR_SEND]);</span><br><span> </span><br><span>         return rc;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18190">change 18190</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/18190"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I89a173f6bdd9a3c21233fe01d07ab2ff0442bb10 </div>
<div style="display:none"> Gerrit-Change-Number: 18190 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: ipse <Alexander.Chemeris@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: ipse <Alexander.Chemeris@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>