Change in osmo-ttcn3-hacks[master]: library/GSUP_Types.ttcn: add MO/MT FORWARD_SM messages

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 13:38:27 UTC 2018


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


Change subject: library/GSUP_Types.ttcn: add MO/MT FORWARD_SM messages
......................................................................

library/GSUP_Types.ttcn: add MO/MT FORWARD_SM messages

According to 3GPP TS 29.002, sections 12.2 and 12.9 the FORWARD_SM
messages (a.k.a MAP-*-FORWARD-SHORT-MESSAGE) are used to forward
MO/MT SMS messages.

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

  - OSMO_GSUP_MSGT_{MO|MT}_FORWARD_SM_REQUEST (MAP Request)
    - OSMO_GSUP_SM_RP_DA_IE
    - OSMO_GSUP_SM_RP_OA_IE
    - OSMO_GSUP_SM_RP_UI_IE

  - OSMO_GSUP_MSGT_{MO|MT}_FORWARD_SM_RESULT (MAP ACK)
    - OSMO_GSUP_SM_RP_UI_IE

  - OSMO_GSUP_MSGT_{MO|MT}_FORWARD_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, in particular using the
GSUP_SESSION_ID_IE. The session state IE isn't used due to
the 'REQ-RSP' nature of this message.

Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
---
M library/GSUP_Types.ttcn
1 file changed, 310 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/62/11062/1

diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn
index fed13bf..a7c4732 100644
--- a/library/GSUP_Types.ttcn
+++ b/library/GSUP_Types.ttcn
@@ -48,7 +48,10 @@
 	/* SM related IEs (see 3GPP TS 29.002, section 7.6.8) */
 	OSMO_GSUP_SMSC_ADDR_IE		('40'O),
 	OSMO_GSUP_NODE_ADDR_IE		('41'O),
-	OSMO_GSUP_SM_RP_RPI_IE		('42'O)
+	OSMO_GSUP_SM_RP_RPI_IE		('42'O),
+	OSMO_GSUP_SM_RP_DA_IE		('43'O),
+	OSMO_GSUP_SM_RP_OA_IE		('44'O),
+	OSMO_GSUP_SM_RP_UI_IE		('45'O)
 } with { variant "FIELDLENGTH(8)" };
 
 type enumerated GSUP_MessageType {
@@ -85,7 +88,15 @@
 	/* FIXME: 0b001001? any ideas? */
 	OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST	('00100100'B),
 	OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR		('00100101'B),
-	OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT	('00100110'B)
+	OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT	('00100110'B),
+
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST	('00101000'B),
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR	('00101001'B),
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT	('00101010'B),
+
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST	('00110000'B),
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR	('00110001'B),
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT	('00110010'B)
 } with { variant "FIELDLENGTH(8)" };
 
 type enumerated GSUP_CancelType {
@@ -141,6 +152,9 @@
 				 smsc_addr, tag = OSMO_GSUP_SMSC_ADDR_IE;
 				 node_addr, tag = OSMO_GSUP_NODE_ADDR_IE;
 				 sm_rp_rpi, tag = OSMO_GSUP_SM_RP_RPI_IE;
+				 sm_rp_da, tag = OSMO_GSUP_SM_RP_DA_IE;
+				 sm_rp_oa, tag = OSMO_GSUP_SM_RP_OA_IE;
+				 sm_rp_ui, tag = OSMO_GSUP_SM_RP_UI_IE;
 			)"
 };
 
@@ -178,7 +192,10 @@
 	/* Short Message Service */
 	octetstring		smsc_addr, /* FIXME: octetstring? */
 	octetstring		node_addr, /* FIXME: octetstring? */
-	boolean			sm_rp_rpi /* FIXME: boolean? */
+	boolean			sm_rp_rpi, /* FIXME: boolean? */
+	GSUP_SM_RP_DA		sm_rp_da,
+	GSUP_SM_RP_OA		sm_rp_oa,
+	octetstring		sm_rp_ui
 };
 
 type record GSUP_PDU {
@@ -655,6 +672,140 @@
 	}
 }
 
+/**
+ * SM-RP-DA represents the SM Destination Address, see 7.6.8.1.
+ * It can be either of the following:
+ *  - IMSI
+ *  - LMSI (not implemented)
+ *  - MSISDN
+ *  - roaming number (not implemented)
+ *  - service centre address
+ */
+type union GSUP_SM_RP_DA_IeValue {
+	hexstring	imsi,
+	hexstring	msisdn,
+	octetstring	smsc_addr
+};
+
+type record GSUP_SM_RP_DA {
+	GSUP_IEI		tag,
+	GSUP_SM_RP_DA_IeValue	val
+} with { variant (val) "CROSSTAG(imsi, tag = OSMO_GSUP_IMSI_IE;
+				 msisdn, tag = OSMO_GSUP_MSISDN_IE;
+				 smsc_addr, tag = OSMO_GSUP_SMSC_ADDR_IE;
+			)"
+};
+
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_IMSI(hexstring imsi) := {
+	tag := OSMO_GSUP_IMSI_IE,
+	val := { imsi := imsi }
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_IMSI(template hexstring imsi) := {
+	tag := OSMO_GSUP_IMSI_IE,
+	val := { imsi := imsi }
+}
+
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_MSISDN(hexstring msisdn) := {
+	tag := OSMO_GSUP_MSISDN_IE,
+	val := { msisdn := msisdn }
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_MSISDN(template hexstring msisdn) := {
+	tag := OSMO_GSUP_MSISDN_IE,
+	val := { msisdn := msisdn }
+}
+
+template (value) GSUP_SM_RP_DA ts_GSUP_SM_RP_DA_SMSC_ADDR(octetstring smsc_addr) := {
+	tag := OSMO_GSUP_SMSC_ADDR_IE,
+	val := { smsc_addr := smsc_addr }
+}
+template GSUP_SM_RP_DA tr_GSUP_SM_RP_DA_SMSC_ADDR(template octetstring smsc_addr) := {
+	tag := OSMO_GSUP_SMSC_ADDR_IE,
+	val := { smsc_addr := smsc_addr }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_DA(GSUP_SM_RP_DA val) := {
+	tag := OSMO_GSUP_SM_RP_DA_IE,
+	len := 0, /* overwritten */
+	val := {
+		sm_rp_da := val
+	}
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_DA(template GSUP_SM_RP_DA val) := {
+	tag := OSMO_GSUP_SM_RP_DA_IE,
+	len := ?,
+	val := {
+		sm_rp_da := val
+	}
+}
+
+/**
+ * SM-RP-OA represents the SM Originating Address, see 7.6.8.2.
+ * It can be either of the following:
+ *  - MSISDN
+ *  - service centre address
+ */
+type union GSUP_SM_RP_OA_IeValue {
+	hexstring	msisdn,
+	octetstring	smsc_addr
+};
+
+type record GSUP_SM_RP_OA {
+	GSUP_IEI		tag,
+	GSUP_SM_RP_OA_IeValue	val
+} with { variant (val) "CROSSTAG(msisdn, tag = OSMO_GSUP_MSISDN_IE;
+				 smsc_addr, tag = OSMO_GSUP_SMSC_ADDR_IE;
+			)"
+};
+
+template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_MSISDN(hexstring msisdn) := {
+	tag := OSMO_GSUP_MSISDN_IE,
+	val := { msisdn := msisdn }
+}
+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_MSISDN(template hexstring msisdn) := {
+	tag := OSMO_GSUP_MSISDN_IE,
+	val := { msisdn := msisdn }
+}
+
+template (value) GSUP_SM_RP_OA ts_GSUP_SM_RP_OA_SMSC_ADDR(octetstring smsc_addr) := {
+	tag := OSMO_GSUP_SMSC_ADDR_IE,
+	val := { smsc_addr := smsc_addr }
+}
+template GSUP_SM_RP_OA tr_GSUP_SM_RP_OA_SMSC_ADDR(template octetstring smsc_addr) := {
+	tag := OSMO_GSUP_SMSC_ADDR_IE,
+	val := { smsc_addr := smsc_addr }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_OA(GSUP_SM_RP_OA val) := {
+	tag := OSMO_GSUP_SM_RP_OA_IE,
+	len := 0, /* overwritten */
+	val := {
+		sm_rp_oa := val
+	}
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_OA(template GSUP_SM_RP_OA val) := {
+	tag := OSMO_GSUP_SM_RP_OA_IE,
+	len := ?,
+	val := {
+		sm_rp_oa := val
+	}
+}
+
+/* SM-RP-UI represents the SM TPDU, see 7.6.8.4 */
+template (value) GSUP_IE ts_GSUP_IE_SM_RP_UI(octetstring val) := {
+	tag := OSMO_GSUP_SM_RP_UI_IE,
+	len := 0, /* overwritten */
+	val := {
+		sm_rp_ui := val
+	}
+}
+template GSUP_IE tr_GSUP_IE_SM_RP_UI(template octetstring val) := {
+	tag := OSMO_GSUP_SM_RP_UI_IE,
+	len := ?,
+	val := {
+		sm_rp_ui := val
+	}
+}
+
 template (value) GSUP_IE ts_GSUP_IE_SSInfo(octetstring ss) := {
 	tag := OSMO_GSUP_SS_INFO_IE,
 	len := 0, /* overwritten */
@@ -853,6 +1004,162 @@
 	}
 );
 
+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_REQ(
+	OCT4 sid, /* TCAP TransactionID */
+	GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+	GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+	octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := ts_GSUP(
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
+	{
+		/* TODO: optional IMSI */
+		valueof(ts_GSUP_IE_SessionId(sid)),
+		valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
+		valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
+		valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))
+	}
+);
+template GSUP_PDU tr_GSUP_MO_FORWARD_SM_REQ(
+	template OCT4 sid := ?, /* TCAP TransactionID */
+	template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+	template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+	template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := tr_GSUP(
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_REQUEST,
+	{
+		/* TODO: optional IMSI */
+		tr_GSUP_IE_SessionId(sid),
+		tr_GSUP_IE_SM_RP_DA(sm_rp_da),
+		tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
+		tr_GSUP_IE_SM_RP_UI(sm_rp_ui)
+	}
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_RES(
+	OCT4 sid, /* TCAP TransactionID */
+	octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := ts_GSUP(
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
+	{
+		valueof(ts_GSUP_IE_SessionId(sid)),
+		valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))
+	}
+);
+template GSUP_PDU tr_GSUP_MO_FORWARD_SM_RES(
+	template OCT4 sid := ?, /* TCAP TransactionID */
+	template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := tr_GSUP(
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT,
+	{
+		tr_GSUP_IE_SessionId(sid),
+		tr_GSUP_IE_SM_RP_UI(sm_rp_ui)
+	}
+);
+
+template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_ERR(
+	OCT4 sid, /* TCAP TransactionID */
+	integer cause /* User error, see 12.2.3 */
+) := ts_GSUP(
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
+	{
+		valueof(ts_GSUP_IE_SessionId(sid)),
+		valueof(ts_GSUP_IE_Cause(cause))
+	}
+);
+template GSUP_PDU tr_GSUP_MO_FORWARD_SM_ERR(
+	template OCT4 sid := ?, /* TCAP TransactionID */
+	template integer cause := ? /* User error, see 12.2.3 */
+) := tr_GSUP(
+	OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR,
+	{
+		tr_GSUP_IE_SessionId(sid),
+		tr_GSUP_IE_Cause(cause)
+	}
+);
+
+template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_REQ(
+	OCT4 sid, /* TCAP TransactionID */
+	GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+	GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+	octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := ts_GSUP(
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
+	{
+		/**
+		 * TODO: add MT-specific fields (and IEs):
+		 *  - moreMessagesToSend
+		 *  - smDeliveryTimer
+		 *  - smDeliveryStartTime
+		 */
+		valueof(ts_GSUP_IE_SessionId(sid)),
+		valueof(ts_GSUP_IE_SM_RP_DA(sm_rp_da)),
+		valueof(ts_GSUP_IE_SM_RP_OA(sm_rp_oa)),
+		valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))
+	}
+);
+template GSUP_PDU tr_GSUP_MT_FORWARD_SM_REQ(
+	template OCT4 sid := ?, /* TCAP TransactionID */
+	template GSUP_SM_RP_DA sm_rp_da, /* Destination Address, see 7.6.8.1 */
+	template GSUP_SM_RP_OA sm_rp_oa, /* Originating Address, see 7.6.8.2 */
+	template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := tr_GSUP(
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST,
+	{
+		/**
+		 * TODO: add MT-specific fields (and IEs):
+		 *  - moreMessagesToSend
+		 *  - smDeliveryTimer
+		 *  - smDeliveryStartTime
+		 */
+		tr_GSUP_IE_SessionId(sid),
+		tr_GSUP_IE_SM_RP_DA(sm_rp_da),
+		tr_GSUP_IE_SM_RP_OA(sm_rp_oa),
+		tr_GSUP_IE_SM_RP_UI(sm_rp_ui)
+	}
+);
+
+template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_RES(
+	OCT4 sid, /* TCAP TransactionID */
+	octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := ts_GSUP(
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
+	{
+		valueof(ts_GSUP_IE_SessionId(sid)),
+		valueof(ts_GSUP_IE_SM_RP_UI(sm_rp_ui))
+	}
+);
+template GSUP_PDU tr_GSUP_MT_FORWARD_SM_RES(
+	template OCT4 sid := ?, /* TCAP TransactionID */
+	template octetstring sm_rp_ui /* SM TPDU, see 7.6.8.4 */
+) := tr_GSUP(
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_RESULT,
+	{
+		tr_GSUP_IE_SessionId(sid),
+		tr_GSUP_IE_SM_RP_UI(sm_rp_ui)
+	}
+);
+
+template (value) GSUP_PDU ts_GSUP_MT_FORWARD_SM_ERR(
+	OCT4 sid, /* TCAP TransactionID */
+	integer cause /* User error, see 12.9.3 */
+) := ts_GSUP(
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
+	{
+		valueof(ts_GSUP_IE_SessionId(sid)),
+		valueof(ts_GSUP_IE_Cause(cause))
+	}
+);
+template GSUP_PDU tr_GSUP_MT_FORWARD_SM_ERR(
+	template OCT4 sid := ?, /* TCAP TransactionID */
+	template integer cause := ? /* User error, see 12.9.3 */
+) := tr_GSUP(
+	OSMO_GSUP_MSGT_MT_FORWARD_SM_ERROR,
+	{
+		tr_GSUP_IE_SessionId(sid),
+		tr_GSUP_IE_Cause(cause)
+	}
+);
+
 function f_gsup_find_ie(GSUP_PDU msg, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {
 	for (var integer i := 0; i < sizeof(msg.ies); i := i+1) {
 		if (msg.ies[i].tag == iei) {

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

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibf49474a81235096c032ea21f217170f523bd94e
Gerrit-Change-Number: 11062
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/d0cad413/attachment.htm>


More information about the gerrit-log mailing list