Change in libosmocore[master]: GSUP/SM: (WIP) introduce new SRI_FOR_SM 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/.

Vadim Yanitskiy gerrit-no-reply at lists.osmocom.org
Sun Sep 23 19:26:36 UTC 2018


Vadim Yanitskiy has uploaded this change for review. ( https://gerrit.osmocom.org/11068


Change subject: GSUP/SM: (WIP) introduce new SRI_FOR_SM message
......................................................................

GSUP/SM: (WIP) introduce new SRI_FOR_SM message

According to 3GPP TS 29.002, section 12.1 the SRI_FOR_SM message
(a.k.a MAP-SEND-ROUTING-INFO-FOR-SM) is used to retrieve the
routing information needed for routing a short message to
the servicing node of subscriber.

Please note that only the 'must-have' fields of SRI_FOR_SM
are introduced by this change, in particular:

  - GSUP_MSGT_SRI_FOR_SM_REQUEST (MAP Request)
    - GSUP_MSISDN_IE
    - GSUP_SM_RP_RPI_IE
    - GSUP_SMSC_ADDR_IE

  - GSUP_MSGT_SRI_FOR_SM_RESULT (MAP Response)
    - GSUP_IMSI_IE
    - GSUP_NODE_ADDR_IE

  - GSUP_MSGT_SRI_FOR_SM_ERROR (MAP Response)
    - GSUP_CAUSE_IE (MAP User Error, see 7.6.1)

Since there is no TCAP layer in GSUP, the context is emulated
using the session management IEs (see GSUP_SESSION_*_IE).

Change-Id: I4303dc817a5f8ee97b78d840672c443a6eddb332
---
M include/osmocom/gsm/gsup.h
M src/gsm/gsup.c
2 files changed, 51 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/68/11068/1

diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h
index 0ef5a75..bed61ae 100644
--- a/include/osmocom/gsm/gsup.h
+++ b/include/osmocom/gsm/gsup.h
@@ -88,6 +88,11 @@
 
 	/*! Supplementary Services payload */
 	OSMO_GSUP_SS_INFO_IE			= 0x35,
+
+	/* SM related IEs (see 3GPP TS 29.002, section 7.6.8) */
+	OSMO_GSUP_SMSC_ADDR_IE			= 0x40,
+	OSMO_GSUP_NODE_ADDR_IE			= 0x41,
+	OSMO_GSUP_SM_RP_RPI_IE			= 0x42,
 };
 
 /*! GSUP message type */
@@ -121,6 +126,11 @@
 	OSMO_GSUP_MSGT_PROC_SS_REQUEST		= 0b00100000,
 	OSMO_GSUP_MSGT_PROC_SS_ERROR		= 0b00100001,
 	OSMO_GSUP_MSGT_PROC_SS_RESULT		= 0b00100010,
+
+	/* FIXME: 0b001001? any ideas? */
+	OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST	= 0b00100100,
+	OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR		= 0b00100101,
+	OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT	= 0b00100110,
 };
 
 #define OSMO_GSUP_IS_MSGT_REQUEST(msgt) (((msgt) & 0b00000011) == 0b00)
@@ -213,6 +223,14 @@
 	/*! ASN.1 encoded MAP payload for Supplementary Services */
 	uint8_t				*ss_info;
 	size_t				ss_info_len;
+
+	/*! SMS (Short Message Service) parameters */
+	const uint8_t			*smsc_addr;
+	size_t				smsc_addr_len;
+	const uint8_t			*node_addr;
+	size_t				node_addr_len;
+	/*! HACK: SM-RP-RPI is (<0 / 0 / >0) => (false / omited / true) */
+	int				sm_rp_rpi;
 };
 
 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 9c2f817..22e26f1 100644
--- a/src/gsm/gsup.c
+++ b/src/gsm/gsup.c
@@ -67,6 +67,10 @@
 	OSMO_VALUE_STRING(OSMO_GSUP_MSGT_PROC_SS_ERROR),
 	OSMO_VALUE_STRING(OSMO_GSUP_MSGT_PROC_SS_RESULT),
 
+	OSMO_VALUE_STRING(OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST),
+	OSMO_VALUE_STRING(OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR),
+	OSMO_VALUE_STRING(OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT),
+
 	{ 0, NULL }
 };
 
@@ -434,6 +438,20 @@
 			gsup_msg->ss_info_len = value_len;
 			break;
 
+		case OSMO_GSUP_SMSC_ADDR_IE:
+			gsup_msg->smsc_addr = value;
+			gsup_msg->smsc_addr_len = value_len;
+			break;
+
+		case OSMO_GSUP_NODE_ADDR_IE:
+			gsup_msg->node_addr = value;
+			gsup_msg->node_addr_len = value_len;
+			break;
+
+		case OSMO_GSUP_SM_RP_RPI_IE:
+			gsup_msg->sm_rp_rpi = (*value) ? 1 : -1;
+			break;
+
 		default:
 			LOGP(DLGSUP, LOGL_NOTICE,
 			     "GSUP IE type %d unknown\n", iei);
@@ -626,6 +644,21 @@
 				gsup_msg->ss_info_len, gsup_msg->ss_info);
 	}
 
+	if (gsup_msg->smsc_addr) {
+		msgb_tlv_put(msg, OSMO_GSUP_SMSC_ADDR_IE,
+				gsup_msg->smsc_addr_len, gsup_msg->smsc_addr);
+	}
+
+	if (gsup_msg->node_addr) {
+		msgb_tlv_put(msg, OSMO_GSUP_NODE_ADDR_IE,
+				gsup_msg->node_addr_len, gsup_msg->node_addr);
+	}
+
+	if (gsup_msg->sm_rp_rpi != 0) {
+		u8 = gsup_msg->sm_rp_rpi > 0 ? 1 : 0;
+		msgb_tlv_put(msg, OSMO_GSUP_SM_RP_RPI_IE, sizeof(u8), &u8);
+	}
+
 	return 0;
 }
 

-- 
To view, visit https://gerrit.osmocom.org/11068
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: I4303dc817a5f8ee97b78d840672c443a6eddb332
Gerrit-Change-Number: 11068
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180923/02ffda31/attachment.htm>


More information about the gerrit-log mailing list