Change in osmo-bsc[master]: bssap: Handle BSSMAP CONFUSION message.

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Tue May 19 20:00:34 UTC 2020


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

Change subject: bssap: Handle BSSMAP CONFUSION message.
......................................................................

bssap: Handle BSSMAP CONFUSION message.

We decode the mesage and print it to the log files at ERROR log level.
We also count it in the BSSMAP message counters. There is not much
else we could do about it.

Depends: If8afd2d096fb66c6c2f255a08fc1129de3d09cec (libosmocore)
Change-Id: Ib4cd94f185f751b2384842222678ff671ac413c4
---
M TODO-RELEASE
M include/osmocom/bsc/bsc_msc_data.h
M src/osmo-bsc/osmo_bsc_bssap.c
M src/osmo-bsc/osmo_bsc_msc.c
4 files changed, 59 insertions(+), 0 deletions(-)

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



diff --git a/TODO-RELEASE b/TODO-RELEASE
index dde4b72..e2fa427 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -8,3 +8,6 @@
 # If any interfaces have been removed or changed since the last public release: c:r:0.
 #library	what		description / commit summary line
 manual				needs common chapter cs7-config.adoc from osmo-gsm-manuals > 0.3.0
+libosmocore	struct gsm0808_diagnostics	Depends on libosmocore > 1.3.0
+libosmocore	gsm0808_diagnostics_octet_location_str()	Depends on libosmocore > 1.3.0
+libosmocore	gsm0808_diagnostics_bit_location_str()	Depends on libosmocore > 1.3.0
diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h
index 74a6f3c..fc816b4 100644
--- a/include/osmocom/bsc/bsc_msc_data.h
+++ b/include/osmocom/bsc/bsc_msc_data.h
@@ -69,6 +69,7 @@
 	MSC_CTR_BSSMAP_RX_DT1_LCLS_CONNECT_CTRL,
 	MSC_CTR_BSSMAP_RX_DT1_HANDOVER_CMD,
 	MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST,
+	MSC_CTR_BSSMAP_RX_DT1_CONFUSION,
 	MSC_CTR_BSSMAP_RX_DT1_UNKNOWN,
 	MSC_CTR_BSSMAP_RX_DT1_DTAP,
 	MSC_CTR_BSSMAP_RX_DT1_DTAP_ERROR,
diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c
index ddebb6a..388ad14 100644
--- a/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/src/osmo-bsc/osmo_bsc_bssap.c
@@ -1006,6 +1006,56 @@
 	return -EINVAL;
 }
 
+/* Handle Confusion message, MSC indicating an error to us:
+ *
+ * See 3GPP TS 48.008 §3.2.1.45
+ */
+static int bssmap_handle_confusion(struct gsm_subscriber_connection *conn,
+				      struct msgb *msg, unsigned int length)
+{
+	struct tlv_parsed tp;
+	int diag_len;
+	enum gsm0808_cause cause;
+	enum gsm0808_cause_class cause_class;
+	struct gsm0808_diagnostics *diag;
+
+	osmo_bssap_tlv_parse(&tp, msg->l4h + 1, length - 1);
+
+	/* Check for the Cause and Diagnostic mandatory elements */
+	if (!TLVP_PRESENT(&tp, GSM0808_IE_CAUSE) || !TLVP_PRESENT(&tp, GSM0808_IE_DIAGNOSTIC)) {
+		LOGPFSML(conn->fi, LOGL_ERROR,
+		         "Received BSSMAP Confusion message,"
+		         " but either Cause or Diagnostic mandatory IE is not present: %s\n",
+		         osmo_hexdump(msg->l4h, length));
+		return -EINVAL;
+	}
+
+	diag_len = TLVP_LEN(&tp, GSM0808_IE_DIAGNOSTIC);
+	if (diag_len < 5) {
+		LOGPFSML(conn->fi, LOGL_ERROR,
+		         "Received BSSMAP Confusion message with short Diagnostic length: %d (expected > 5)\n",
+		         diag_len);
+		return -EINVAL;
+	}
+
+	cause = gsm0808_get_cause(&tp);
+	cause_class = gsm0808_cause_class(cause);
+	diag = (struct gsm0808_diagnostics *)TLVP_VAL(&tp, GSM0808_IE_DIAGNOSTIC);
+
+	LOGPFSML(conn->fi, LOGL_ERROR,
+	         "Received BSSMAP Confusion: class 0x%x (%s), cause 0x%x (%s), "
+	         "error octet %d (%s), error bit %d (%s), original message: %s\n",
+	         cause_class, gsm0808_cause_class_name(cause_class),
+	         cause, gsm0808_cause_name(cause),
+	         diag->error_pointer_octet,
+	         gsm0808_diagnostics_octet_location_str(diag->error_pointer_octet),
+	         diag->error_pointer_bit,
+	         gsm0808_diagnostics_bit_location_str(diag->error_pointer_bit),
+	         osmo_hexdump(diag->msg, diag_len-2));
+
+	return 0;
+}
+
 static int bssmap_rcvmsg_udt(struct bsc_msc_data *msc,
 			     struct msgb *msg, unsigned int length)
 {
@@ -1082,6 +1132,10 @@
 		rate_ctr_inc(&ctrs[MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST]);
 		ret = gsm48_send_rr_classmark_enquiry(conn->lchan);
 		break;
+	case BSS_MAP_MSG_CONFUSION:
+		rate_ctr_inc(&ctrs[MSC_CTR_BSSMAP_RX_DT1_CONFUSION]);
+		ret = bssmap_handle_confusion(conn, msg, length);
+		break;
 	default:
 		rate_ctr_inc(&ctrs[MSC_CTR_BSSMAP_RX_DT1_UNKNOWN]);
 		LOGP(DMSC, LOGL_NOTICE, "Unimplemented msg type: %s\n",
diff --git a/src/osmo-bsc/osmo_bsc_msc.c b/src/osmo-bsc/osmo_bsc_msc.c
index db3ffe4..e58ff7f 100644
--- a/src/osmo-bsc/osmo_bsc_msc.c
+++ b/src/osmo-bsc/osmo_bsc_msc.c
@@ -55,6 +55,7 @@
 	[MSC_CTR_BSSMAP_RX_DT1_LCLS_CONNECT_CTRL] = {"bssmap:rx:dt1:lcls_connect_ctrl:cmd", "Number of received BSSMAP DT1 LCLS CONNECT CTRL messages"},
 	[MSC_CTR_BSSMAP_RX_DT1_HANDOVER_CMD] =      {"bssmap:rx:dt1:handover:cmd", "Number of received BSSMAP DT1 HANDOVER CMD messages"},
 	[MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST] =    {"bssmap:rx:dt1:classmark:rqst", "Number of received BSSMAP DT1 CLASSMARK RQST messages"},
+	[MSC_CTR_BSSMAP_RX_DT1_CONFUSION] =         {"bssmap:rx:dt1:confusion", "Number of received BSSMAP DT1 CONFUSION messages"},
 	[MSC_CTR_BSSMAP_RX_DT1_UNKNOWN] =           {"bssmap:rx:dt1:err_unknown", "Number of received BSSMAP unknown DT1 messages"},
 	[MSC_CTR_BSSMAP_RX_DT1_DTAP] =              {"bssmap:rx:dt1:dtap:good", "Number of received BSSMAP DTAP messages"},
 	[MSC_CTR_BSSMAP_RX_DT1_DTAP_ERROR] =        {"bssmap:rx:dt1:dtap:error", "Number of received BSSMAP DTAP messages with errors"},

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

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ib4cd94f185f751b2384842222678ff671ac413c4
Gerrit-Change-Number: 18232
Gerrit-PatchSet: 12
Gerrit-Owner: ipse <Alexander.Chemeris at gmail.com>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: ipse <Alexander.Chemeris at gmail.com>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200519/ad19c15a/attachment.htm>


More information about the gerrit-log mailing list