<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>