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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bssap: Handle BSSMAP CONFUSION message.<br><br>We decode the mesage and print it to the log files at ERROR log level.<br>We also count it in the BSSMAP message counters. There is not much<br>else we could do about it.<br><br>Depends: If8afd2d096fb66c6c2f255a08fc1129de3d09cec (libosmocore)<br>Change-Id: Ib4cd94f185f751b2384842222678ff671ac413c4<br>---<br>M TODO-RELEASE<br>M include/osmocom/bsc/bsc_msc_data.h<br>M src/osmo-bsc/osmo_bsc_bssap.c<br>M src/osmo-bsc/osmo_bsc_msc.c<br>4 files changed, 59 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index dde4b72..e2fa427 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -8,3 +8,6 @@</span><br><span> # If any interfaces have been removed or changed since the last public release: c:r:0.</span><br><span> #library what            description / commit summary line</span><br><span> manual                             needs common chapter cs7-config.adoc from osmo-gsm-manuals > 0.3.0</span><br><span style="color: hsl(120, 100%, 40%);">+libosmocore      struct gsm0808_diagnostics      Depends on libosmocore > 1.3.0</span><br><span style="color: hsl(120, 100%, 40%);">+libosmocore  gsm0808_diagnostics_octet_location_str()        Depends on libosmocore > 1.3.0</span><br><span style="color: hsl(120, 100%, 40%);">+libosmocore  gsm0808_diagnostics_bit_location_str()  Depends on libosmocore > 1.3.0</span><br><span>diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h</span><br><span>index 74a6f3c..fc816b4 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>@@ -69,6 +69,7 @@</span><br><span>   MSC_CTR_BSSMAP_RX_DT1_LCLS_CONNECT_CTRL,</span><br><span>     MSC_CTR_BSSMAP_RX_DT1_HANDOVER_CMD,</span><br><span>  MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST,</span><br><span style="color: hsl(120, 100%, 40%);">+ MSC_CTR_BSSMAP_RX_DT1_CONFUSION,</span><br><span>     MSC_CTR_BSSMAP_RX_DT1_UNKNOWN,</span><br><span>       MSC_CTR_BSSMAP_RX_DT1_DTAP,</span><br><span>  MSC_CTR_BSSMAP_RX_DT1_DTAP_ERROR,</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 ddebb6a..388ad14 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>@@ -1006,6 +1006,56 @@</span><br><span>  return -EINVAL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Handle Confusion message, MSC indicating an error to us:</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * See 3GPP TS 48.008 ยง3.2.1.45</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static int bssmap_handle_confusion(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                struct msgb *msg, unsigned int length)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       struct tlv_parsed tp;</span><br><span style="color: hsl(120, 100%, 40%);">+ int diag_len;</span><br><span style="color: hsl(120, 100%, 40%);">+ enum gsm0808_cause cause;</span><br><span style="color: hsl(120, 100%, 40%);">+     enum gsm0808_cause_class cause_class;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm0808_diagnostics *diag;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_bssap_tlv_parse(&tp, msg->l4h + 1, length - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Check for the Cause and Diagnostic mandatory elements */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!TLVP_PRESENT(&tp, GSM0808_IE_CAUSE) || !TLVP_PRESENT(&tp, GSM0808_IE_DIAGNOSTIC)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPFSML(conn->fi, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                      "Received BSSMAP Confusion message,"</span><br><span style="color: hsl(120, 100%, 40%);">+                        " but either Cause or Diagnostic mandatory IE is not present: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                        osmo_hexdump(msg->l4h, length));</span><br><span style="color: hsl(120, 100%, 40%);">+          return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   diag_len = TLVP_LEN(&tp, GSM0808_IE_DIAGNOSTIC);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (diag_len < 5) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPFSML(conn->fi, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                      "Received BSSMAP Confusion message with short Diagnostic length: %d (expected > 5)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   diag_len);</span><br><span style="color: hsl(120, 100%, 40%);">+           return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   cause = gsm0808_get_cause(&tp);</span><br><span style="color: hsl(120, 100%, 40%);">+   cause_class = gsm0808_cause_class(cause);</span><br><span style="color: hsl(120, 100%, 40%);">+     diag = (struct gsm0808_diagnostics *)TLVP_VAL(&tp, GSM0808_IE_DIAGNOSTIC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGPFSML(conn->fi, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+              "Received BSSMAP Confusion: class 0x%x (%s), cause 0x%x (%s), "</span><br><span style="color: hsl(120, 100%, 40%);">+             "error octet %d (%s), error bit %d (%s), original message: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           cause_class, gsm0808_cause_class_name(cause_class),</span><br><span style="color: hsl(120, 100%, 40%);">+           cause, gsm0808_cause_name(cause),</span><br><span style="color: hsl(120, 100%, 40%);">+             diag->error_pointer_octet,</span><br><span style="color: hsl(120, 100%, 40%);">+                 gsm0808_diagnostics_octet_location_str(diag->error_pointer_octet),</span><br><span style="color: hsl(120, 100%, 40%);">+                 diag->error_pointer_bit,</span><br><span style="color: hsl(120, 100%, 40%);">+           gsm0808_diagnostics_bit_location_str(diag->error_pointer_bit),</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_hexdump(diag->msg, diag_len-2));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int bssmap_rcvmsg_udt(struct bsc_msc_data *msc,</span><br><span>                          struct msgb *msg, unsigned int length)</span><br><span> {</span><br><span>@@ -1082,6 +1132,10 @@</span><br><span>            rate_ctr_inc(&ctrs[MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST]);</span><br><span>               ret = gsm48_send_rr_classmark_enquiry(conn->lchan);</span><br><span>               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case BSS_MAP_MSG_CONFUSION:</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(&ctrs[MSC_CTR_BSSMAP_RX_DT1_CONFUSION]);</span><br><span style="color: hsl(120, 100%, 40%);">+             ret = bssmap_handle_confusion(conn, msg, length);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span>       default:</span><br><span>             rate_ctr_inc(&ctrs[MSC_CTR_BSSMAP_RX_DT1_UNKNOWN]);</span><br><span>              LOGP(DMSC, LOGL_NOTICE, "Unimplemented msg type: %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 db3ffe4..e58ff7f 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>@@ -55,6 +55,7 @@</span><br><span>       [MSC_CTR_BSSMAP_RX_DT1_LCLS_CONNECT_CTRL] = {"bssmap:rx:dt1:lcls_connect_ctrl:cmd", "Number of received BSSMAP DT1 LCLS CONNECT CTRL messages"},</span><br><span>         [MSC_CTR_BSSMAP_RX_DT1_HANDOVER_CMD] =      {"bssmap:rx:dt1:handover:cmd", "Number of received BSSMAP DT1 HANDOVER CMD messages"},</span><br><span>       [MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST] =    {"bssmap:rx:dt1:classmark:rqst", "Number of received BSSMAP DT1 CLASSMARK RQST messages"},</span><br><span style="color: hsl(120, 100%, 40%);">+    [MSC_CTR_BSSMAP_RX_DT1_CONFUSION] =         {"bssmap:rx:dt1:confusion", "Number of received BSSMAP DT1 CONFUSION messages"},</span><br><span>     [MSC_CTR_BSSMAP_RX_DT1_UNKNOWN] =           {"bssmap:rx:dt1:err_unknown", "Number of received BSSMAP unknown DT1 messages"},</span><br><span>     [MSC_CTR_BSSMAP_RX_DT1_DTAP] =              {"bssmap:rx:dt1:dtap:good", "Number of received BSSMAP DTAP messages"},</span><br><span>      [MSC_CTR_BSSMAP_RX_DT1_DTAP_ERROR] =        {"bssmap:rx:dt1:dtap:error", "Number of received BSSMAP DTAP messages with errors"},</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18232">change 18232</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/+/18232"/><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: Ib4cd94f185f751b2384842222678ff671ac413c4 </div>
<div style="display:none"> Gerrit-Change-Number: 18232 </div>
<div style="display:none"> Gerrit-PatchSet: 12 </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: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>