<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11061">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library/GSUP: implement SRI_FOR_SM message support<br><br>According to 3GPP TS 29.002, section 12.1 the SRI_FOR_SM message<br>(a.k.a MAP-SEND-ROUTING-INFO-FOR-SM) is used to retrieve the<br>routing information needed for routing a short message to<br>the servicing node of subscriber.<br><br>Please note that only the 'must-have' fields of SRI_FOR_SM<br>are introduced by this change, in particular:<br><br>  - GSUP_MSGT_SRI_FOR_SM_REQUEST (MAP Request)<br>    - GSUP_MSISDN_IE<br>    - GSUP_SM_RP_RPI_IE<br>    - GSUP_SMSC_ADDR_IE<br><br>  - GSUP_MSGT_SRI_FOR_SM_RESULT (MAP Response)<br>    - GSUP_IMSI_IE<br>    - GSUP_NODE_ADDR_IE<br><br>  - GSUP_MSGT_SRI_FOR_SM_ERROR (MAP Response)<br>    - GSUP_CAUSE_IE (MAP User Error, see 7.6.1)<br><br>Since there is no TCAP layer in GSUP, the context is emulated<br>using the session management IEs, in particular using the<br>GSUP_SESSION_ID_IE. The session state IE isn't used due to<br>the 'REQ-RSP' nature of this message.<br><br>Change-Id: I7c1a882748d82ed5ef0b22cf1ae5764da5e874a0<br>---<br>M library/GSUP_Types.ttcn<br>1 file changed, 141 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/61/11061/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn</span><br><span>index 7680815..80b8e2e 100644</span><br><span>--- a/library/GSUP_Types.ttcn</span><br><span>+++ b/library/GSUP_Types.ttcn</span><br><span>@@ -31,6 +31,11 @@</span><br><span>         OSMO_GSUP_PDP_QOS_IE            ('13'O),</span><br><span>     OSMO_GSUP_CHARG_CHAR_IE         ('14'O),</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /* FIXME: should we reserve a separate range (e.g. 0x40) for SM? */</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_GSUP_SMSC_ADDR             ('15'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_NODE_ADDR             ('16'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_SM_RP_RPI             ('17'O),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   OSMO_GSUP_RAND_IE               ('20'O),</span><br><span>     OSMO_GSUP_SRES_IE               ('21'O),</span><br><span>     OSMO_GSUP_KC_IE                 ('22'O),</span><br><span>@@ -75,7 +80,12 @@</span><br><span> </span><br><span>    OSMO_GSUP_MSGT_PROC_SS_REQUEST          ('00100000'B),</span><br><span>       OSMO_GSUP_MSGT_PROC_SS_ERROR            ('00100001'B),</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_GSUP_MSGT_PROC_SS_RESULT           ('00100010'B)</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_GSUP_MSGT_PROC_SS_RESULT           ('00100010'B),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* FIXME: 0b001001? any ideas? */</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST       ('00100100'B),</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR         ('00100101'B),</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT        ('00100110'B)</span><br><span> } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span> type enumerated GSUP_CancelType {</span><br><span>@@ -128,6 +138,9 @@</span><br><span>                                session_state, tag = OSMO_GSUP_SESSION_STATE_IE;</span><br><span>                             session_id, tag = OSMO_GSUP_SESSION_ID_IE;</span><br><span>                           ss_info, tag = OSMO_GSUP_SS_INFO_IE;</span><br><span style="color: hsl(120, 100%, 40%);">+                          smsc_addr, tag = OSMO_GSUP_SMSC_ADDR;</span><br><span style="color: hsl(120, 100%, 40%);">+                                 node_addr, tag = OSMO_GSUP_NODE_ADDR;</span><br><span style="color: hsl(120, 100%, 40%);">+                                 sm_rp_rpi, tag = OSMO_GSUP_SM_RP_RPI;</span><br><span>                       )"</span><br><span> };</span><br><span> </span><br><span>@@ -161,7 +174,11 @@</span><br><span>     GSUP_SessionState       session_state,</span><br><span>       OCT4                    session_id,</span><br><span>  /* Supplementary Services */</span><br><span style="color: hsl(0, 100%, 40%);">-    octetstring             ss_info</span><br><span style="color: hsl(120, 100%, 40%);">+       octetstring             ss_info,</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Short Message Service */</span><br><span style="color: hsl(120, 100%, 40%);">+   octetstring             smsc_addr, /* FIXME: octetstring? */</span><br><span style="color: hsl(120, 100%, 40%);">+  octetstring             node_addr, /* FIXME: octetstring? */</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean                 sm_rp_rpi /* FIXME: boolean? */</span><br><span> };</span><br><span> </span><br><span> type record GSUP_PDU {</span><br><span>@@ -593,6 +610,51 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_IE ts_GSUP_IE_SMSC_ADDR(octetstring addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      tag := OSMO_GSUP_SMSC_ADDR,</span><br><span style="color: hsl(120, 100%, 40%);">+   len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              smsc_addr := addr</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%);">+template GSUP_IE tr_GSUP_IE_SMSC_ADDR(template octetstring addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   tag := OSMO_GSUP_SMSC_ADDR,</span><br><span style="color: hsl(120, 100%, 40%);">+   len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              smsc_addr := addr</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_IE ts_GSUP_IE_NODE_ADDR(octetstring addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  tag := OSMO_GSUP_NODE_ADDR,</span><br><span style="color: hsl(120, 100%, 40%);">+   len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              node_addr := addr</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%);">+template GSUP_IE tr_GSUP_IE_NODE_ADDR(template octetstring addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   tag := OSMO_GSUP_NODE_ADDR,</span><br><span style="color: hsl(120, 100%, 40%);">+   len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              node_addr := addr</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_IE ts_GSUP_IE_SM_RP_RPI(boolean val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       tag := OSMO_GSUP_SM_RP_RPI,</span><br><span style="color: hsl(120, 100%, 40%);">+   len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_rpi := val</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%);">+template GSUP_IE tr_GSUP_IE_SM_RP_RPI(template boolean val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        tag := OSMO_GSUP_SM_RP_RPI,</span><br><span style="color: hsl(120, 100%, 40%);">+   len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     val := {</span><br><span style="color: hsl(120, 100%, 40%);">+              sm_rp_rpi := val</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%);">+</span><br><span> template (value) GSUP_IE ts_GSUP_IE_SSInfo(octetstring ss) := {</span><br><span>    tag := OSMO_GSUP_SS_INFO_IE,</span><br><span>         len := 0, /* overwritten */</span><br><span>@@ -714,6 +776,83 @@</span><br><span>   }</span><br><span> );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_PDU ts_GSUP_SRI_FOR_SM_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+        OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* TODO: having IMSI instead of MSISDN is also legal */</span><br><span style="color: hsl(120, 100%, 40%);">+       hexstring msisdn, /* MSISDN of subscriber */</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean sm_rp_rpi, /* See 3GPP TS 29.002, 7.6.8.5 */</span><br><span style="color: hsl(120, 100%, 40%);">+  octetstring smsc_addr /* Address of SMSC */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST,</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_MSISDN(msisdn)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_SM_RP_RPI(sm_rp_rpi)),</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SMSC_ADDR(smsc_addr))</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%);">+template GSUP_PDU tr_GSUP_SRI_FOR_SM_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+      template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* TODO: having IMSI instead of MSISDN is also legal */</span><br><span style="color: hsl(120, 100%, 40%);">+       template hexstring msisdn, /* MSISDN of subscriber */</span><br><span style="color: hsl(120, 100%, 40%);">+ template boolean sm_rp_rpi, /* See 3GPP TS 29.002, 7.6.8.5 */</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring smsc_addr /* Address of SMSC */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST,</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_MSISDN(msisdn),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_SM_RP_RPI(sm_rp_rpi),</span><br><span style="color: hsl(120, 100%, 40%);">+              tr_GSUP_IE_SMSC_ADDR(smsc_addr)</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_PDU ts_GSUP_SRI_FOR_SM_RES(</span><br><span style="color: hsl(120, 100%, 40%);">+    OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    hexstring imsi, /* IMSI of subscriber */</span><br><span style="color: hsl(120, 100%, 40%);">+      octetstring node_addr /* Address of serving node (e.g. HLR) */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT,</span><br><span style="color: hsl(120, 100%, 40%);">+     {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_IMSI(imsi)),</span><br><span style="color: hsl(120, 100%, 40%);">+               valueof(ts_GSUP_IE_NODE_ADDR(node_addr))</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%);">+template GSUP_PDU tr_GSUP_SRI_FOR_SM_RES(</span><br><span style="color: hsl(120, 100%, 40%);">+      template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template hexstring imsi, /* IMSI of subscriber */</span><br><span style="color: hsl(120, 100%, 40%);">+     template octetstring node_addr /* Address of serving node (e.g. HLR) */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT,</span><br><span style="color: hsl(120, 100%, 40%);">+     {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_IMSI(imsi),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_NODE_ADDR(node_addr)</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_PDU ts_GSUP_SRI_FOR_SM_ERR(</span><br><span style="color: hsl(120, 100%, 40%);">+    OCT4 sid, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+    integer cause /* User error, see 12.1.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := ts_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+      {</span><br><span style="color: hsl(120, 100%, 40%);">+             valueof(ts_GSUP_IE_SessionId(sid)),</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_Cause(cause))</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%);">+template GSUP_PDU tr_GSUP_SRI_FOR_SM_ERR(</span><br><span style="color: hsl(120, 100%, 40%);">+      template OCT4 sid := ?, /* TCAP TransactionID */</span><br><span style="color: hsl(120, 100%, 40%);">+      template integer cause := ? /* User error, see 12.1.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+      {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_SessionId(sid),</span><br><span style="color: hsl(120, 100%, 40%);">+            tr_GSUP_IE_Cause(cause)</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%);">+</span><br><span> function f_gsup_find_ie(GSUP_PDU msg, GSUP_IEI iei, out GSUP_IeValue ret) return boolean {</span><br><span>        for (var integer i := 0; i < sizeof(msg.ies); i := i+1) {</span><br><span>                 if (msg.ies[i].tag == iei) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11061">change 11061</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/11061"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I7c1a882748d82ed5ef0b22cf1ae5764da5e874a0 </div>
<div style="display:none"> Gerrit-Change-Number: 11061 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>