Change in libosmocore[master]: GSUP: add Kind IE

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Wed Apr 10 17:50:45 UTC 2019


Neels Hofmeyr has uploaded this change for review. ( https://gerrit.osmocom.org/13576


Change subject: GSUP: add Kind IE
......................................................................

GSUP: add Kind IE

osmo-msc and osmo-hlr have distinct subsystems handling incoming GSUP messages.
So far we decide entirely by message type which code path should handle a GSUP
message. Thus no GSUP message type may be re-used across subsystems.

If we add a GSUP message to indicate a routing error, it would have to be a
distinct message type for subscriber management, another one for SMS, another
one for USSD...

To allow introducing common message types, introduce a GSUP Kind IE.

In the presence of this IE, GSUP handlers can trivially direct a received
message to the right code path. If it is missing, handlers can fall back to the
previous switch(message_type) method.

Change-Id: Ic397a9f2c4a7224e47cab944c72e75ca5592efef
---
M include/osmocom/gsm/gsup.h
M src/gsm/gsup.c
M src/gsm/libosmogsm.map
M tests/gsup/gsup_test.c
M tests/gsup/gsup_test.err
5 files changed, 47 insertions(+), 5 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/76/13576/1

diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h
index 29ea11a..d123da5 100644
--- a/include/osmocom/gsm/gsup.h
+++ b/include/osmocom/gsm/gsup.h
@@ -68,6 +68,7 @@
 	OSMO_GSUP_FREEZE_PTMSI_IE		= 0x07,
 	OSMO_GSUP_MSISDN_IE			= 0x08,
 	OSMO_GSUP_HLR_NUMBER_IE			= 0x09,
+	OSMO_GSUP_KIND_IE			= 0x0a,
 	OSMO_GSUP_PDP_CONTEXT_ID_IE		= 0x10,
 	OSMO_GSUP_PDP_TYPE_IE			= 0x11,
 	OSMO_GSUP_ACCESS_POINT_NAME_IE		= 0x12,
@@ -229,6 +230,21 @@
 	size_t				pdp_charg_enc_len;
 };
 
+enum osmo_gsup_kind {
+	OSMO_GSUP_KIND_UNSET = 0,
+	OSMO_GSUP_KIND_SUBSCRIBER_MANAGEMENT = 1,
+	OSMO_GSUP_KIND_SMS = 2,
+	OSMO_GSUP_KIND_USSD = 3,
+	OSMO_GSUP_KIND_INTER_MSC = 4,
+	/* Keep this as last entry with a value of max(enum osmo_gsup_kind) + 1.
+	 * This value shall serve as the size for an array to aid de-muxing all known GSUP kinds. */
+	OSMO_GSUP_KIND_ARRAYSIZE
+};
+
+extern const struct value_string osmo_gsup_kind_names[];
+static inline const char *osmo_gsup_kind_name(enum osmo_gsup_kind val)
+{ return get_value_string(osmo_gsup_kind_names, val); }
+
 /*! parsed/decoded GSUP protocol message */
 struct osmo_gsup_message {
 	enum osmo_gsup_message_type	message_type;
@@ -286,6 +302,11 @@
 	const uint8_t			*imei_enc;
 	size_t				imei_enc_len;
 	enum osmo_gsup_imei_result	imei_result;
+
+	/*! Indicate the subsystem kind to trivially dispatch incoming GSUP messages to the right code paths.
+	 * Inter-MSC messages are *required* to set a kind = OSMO_GSUP_KIND_INTER_MSC. For older message kinds, this may
+	 * be omitted (for backwards compatibility only -- if in doubt, include it). */
+	enum osmo_gsup_kind		kind;
 };
 
 int osmo_gsup_decode(const uint8_t *data, size_t data_len,
diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c
index a089322..ea79e91 100644
--- a/src/gsm/gsup.c
+++ b/src/gsm/gsup.c
@@ -477,6 +477,10 @@
 			gsup_msg->imei_result = osmo_decode_big_endian(value, value_len) + 1;
 			break;
 
+		case OSMO_GSUP_KIND_IE:
+			gsup_msg->kind = osmo_decode_big_endian(value, value_len);
+			break;
+
 		default:
 			LOGP(DLGSUP, LOGL_NOTICE,
 			     "GSUP IE type %d unknown\n", iei);
@@ -718,7 +722,21 @@
 		msgb_tlv_put(msg, OSMO_GSUP_IMEI_RESULT_IE, sizeof(u8), &u8);
 	}
 
+	if (gsup_msg->kind != OSMO_GSUP_KIND_UNSET) {
+		u8 = gsup_msg->kind;
+		msgb_tlv_put(msg, OSMO_GSUP_KIND_IE, sizeof(u8), &u8);
+	}
+
 	return 0;
 }
 
+const struct value_string osmo_gsup_kind_names[] = {
+	{ OSMO_GSUP_KIND_UNSET, "unset" },
+	{ OSMO_GSUP_KIND_SUBSCRIBER_MANAGEMENT, "Subscriber-Management" },
+	{ OSMO_GSUP_KIND_SMS, "SMS" },
+	{ OSMO_GSUP_KIND_USSD, "USSD" },
+	{ OSMO_GSUP_KIND_INTER_MSC, "Inter-MSC" },
+	{}
+};
+
 /*! @} */
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index a69fb60..659cfe6 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -567,6 +567,7 @@
 osmo_gsup_decode;
 osmo_gsup_message_type_names;
 osmo_gsup_session_state_names;
+osmo_gsup_kind_names;
 osmo_gsup_get_err_msg_type;
 
 osmo_gsup_sms_encode_sm_rp_da;
diff --git a/tests/gsup/gsup_test.c b/tests/gsup/gsup_test.c
index 4ad7431..3e27e99 100644
--- a/tests/gsup/gsup_test.c
+++ b/tests/gsup/gsup_test.c
@@ -11,6 +11,7 @@
 
 #define TEST_IMSI_IE 0x01, 0x08, 0x21, 0x43, 0x65, 0x87, 0x09, 0x21, 0x43, 0xf5
 #define TEST_IMSI_STR "123456789012345"
+#define TEST_KIND_SUBSCR_IE 0xa, 0x1, 0x1
 
 static void test_gsup_messages_dec_enc(void)
 {
@@ -20,7 +21,8 @@
 
 	static const uint8_t send_auth_info_req[] = {
 		0x08,
-		TEST_IMSI_IE
+		TEST_IMSI_IE,
+		TEST_KIND_SUBSCR_IE
 	};
 
 	static const uint8_t send_auth_info_err[] = {
diff --git a/tests/gsup/gsup_test.err b/tests/gsup/gsup_test.err
index 225735e..9283823 100644
--- a/tests/gsup/gsup_test.err
+++ b/tests/gsup/gsup_test.err
@@ -1,5 +1,5 @@
-  generated message: 08 01 08 21 43 65 87 09 21 43 f5 
-  original message:  08 01 08 21 43 65 87 09 21 43 f5 
+  generated message: 08 01 08 21 43 65 87 09 21 43 f5 0a 01 01 
+  original message:  08 01 08 21 43 65 87 09 21 43 f5 0a 01 01 
   IMSI:              123456789012345
   generated message: 09 01 08 21 43 65 87 09 21 43 f5 02 01 07 
   original message:  09 01 08 21 43 65 87 09 21 43 f5 02 01 07 
@@ -73,7 +73,7 @@
   generated message: 32 01 08 21 43 65 87 09 21 43 f5 51 01 00 
   original message:  32 01 08 21 43 65 87 09 21 43 f5 51 01 00 
   IMSI:              123456789012345
-  message 0: tested 11 truncations, 11 parse failures
+  message 0: tested 14 truncations, 13 parse failures
   message 1: tested 14 truncations, 13 parse failures
   message 2: tested 83 truncations, 81 parse failures
   message 3: tested 11 truncations, 11 parse failures
@@ -99,7 +99,7 @@
   message 23: tested 14 truncations, 13 parse failures
   message 24: tested 14 truncations, 13 parse failures
 DLGSUP Stopping DLGSUP logging
-  message 0: tested 2816 modifications, 510 parse failures
+  message 0: tested 3584 modifications, 771 parse failures
   message 1: tested 3584 modifications, 770 parse failures
   message 2: tested 21248 modifications, 2575 parse failures
   message 3: tested 2816 modifications, 510 parse failures

-- 
To view, visit https://gerrit.osmocom.org/13576
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic397a9f2c4a7224e47cab944c72e75ca5592efef
Gerrit-Change-Number: 13576
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190410/a6048ae7/attachment-0001.html>


More information about the gerrit-log mailing list