<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11068">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">GSUP/SM: (WIP) introduce new SRI_FOR_SM message<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 (see GSUP_SESSION_*_IE).<br><br>Change-Id: I4303dc817a5f8ee97b78d840672c443a6eddb332<br>---<br>M include/osmocom/gsm/gsup.h<br>M src/gsm/gsup.c<br>2 files changed, 51 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/68/11068/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h</span><br><span>index 0ef5a75..bed61ae 100644</span><br><span>--- a/include/osmocom/gsm/gsup.h</span><br><span>+++ b/include/osmocom/gsm/gsup.h</span><br><span>@@ -88,6 +88,11 @@</span><br><span> </span><br><span>   /*! Supplementary Services payload */</span><br><span>        OSMO_GSUP_SS_INFO_IE                    = 0x35,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* SM related IEs (see 3GPP TS 29.002, section 7.6.8) */</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_GSUP_SMSC_ADDR_IE                  = 0x40,</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_NODE_ADDR_IE                  = 0x41,</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_GSUP_SM_RP_RPI_IE                  = 0x42,</span><br><span> };</span><br><span> </span><br><span> /*! GSUP message type */</span><br><span>@@ -121,6 +126,11 @@</span><br><span>         OSMO_GSUP_MSGT_PROC_SS_REQUEST          = 0b00100000,</span><br><span>        OSMO_GSUP_MSGT_PROC_SS_ERROR            = 0b00100001,</span><br><span>        OSMO_GSUP_MSGT_PROC_SS_RESULT           = 0b00100010,</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       = 0b00100100,</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR         = 0b00100101,</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT        = 0b00100110,</span><br><span> };</span><br><span> </span><br><span> #define OSMO_GSUP_IS_MSGT_REQUEST(msgt) (((msgt) & 0b00000011) == 0b00)</span><br><span>@@ -213,6 +223,14 @@</span><br><span>        /*! ASN.1 encoded MAP payload for Supplementary Services */</span><br><span>  uint8_t                         *ss_info;</span><br><span>    size_t                          ss_info_len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /*! SMS (Short Message Service) parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+ const uint8_t                   *smsc_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   size_t                          smsc_addr_len;</span><br><span style="color: hsl(120, 100%, 40%);">+        const uint8_t                   *node_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   size_t                          node_addr_len;</span><br><span style="color: hsl(120, 100%, 40%);">+        /*! HACK: SM-RP-RPI is (<0 / 0 / >0) => (false / omited / true) */</span><br><span style="color: hsl(120, 100%, 40%);">+   int                             sm_rp_rpi;</span><br><span> };</span><br><span> </span><br><span> int osmo_gsup_decode(const uint8_t *data, size_t data_len,</span><br><span>diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c</span><br><span>index 9c2f817..22e26f1 100644</span><br><span>--- a/src/gsm/gsup.c</span><br><span>+++ b/src/gsm/gsup.c</span><br><span>@@ -67,6 +67,10 @@</span><br><span>         OSMO_VALUE_STRING(OSMO_GSUP_MSGT_PROC_SS_ERROR),</span><br><span>     OSMO_VALUE_STRING(OSMO_GSUP_MSGT_PROC_SS_RESULT),</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_VALUE_STRING(OSMO_GSUP_MSGT_SRI_FOR_SM_REQUEST),</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_VALUE_STRING(OSMO_GSUP_MSGT_SRI_FOR_SM_ERROR),</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_VALUE_STRING(OSMO_GSUP_MSGT_SRI_FOR_SM_RESULT),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>@@ -434,6 +438,20 @@</span><br><span>                         gsup_msg->ss_info_len = value_len;</span><br><span>                        break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+            case OSMO_GSUP_SMSC_ADDR_IE:</span><br><span style="color: hsl(120, 100%, 40%);">+                  gsup_msg->smsc_addr = value;</span><br><span style="color: hsl(120, 100%, 40%);">+                       gsup_msg->smsc_addr_len = value_len;</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              case OSMO_GSUP_NODE_ADDR_IE:</span><br><span style="color: hsl(120, 100%, 40%);">+                  gsup_msg->node_addr = value;</span><br><span style="color: hsl(120, 100%, 40%);">+                       gsup_msg->node_addr_len = value_len;</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              case OSMO_GSUP_SM_RP_RPI_IE:</span><br><span style="color: hsl(120, 100%, 40%);">+                  gsup_msg->sm_rp_rpi = (*value) ? 1 : -1;</span><br><span style="color: hsl(120, 100%, 40%);">+                   break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>             default:</span><br><span>                     LOGP(DLGSUP, LOGL_NOTICE,</span><br><span>                         "GSUP IE type %d unknown\n", iei);</span><br><span>@@ -626,6 +644,21 @@</span><br><span>                             gsup_msg->ss_info_len, gsup_msg->ss_info);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (gsup_msg->smsc_addr) {</span><br><span style="color: hsl(120, 100%, 40%);">+         msgb_tlv_put(msg, OSMO_GSUP_SMSC_ADDR_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+                             gsup_msg->smsc_addr_len, gsup_msg->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%);">+   if (gsup_msg->node_addr) {</span><br><span style="color: hsl(120, 100%, 40%);">+         msgb_tlv_put(msg, OSMO_GSUP_NODE_ADDR_IE,</span><br><span style="color: hsl(120, 100%, 40%);">+                             gsup_msg->node_addr_len, gsup_msg->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%);">+   if (gsup_msg->sm_rp_rpi != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            u8 = gsup_msg->sm_rp_rpi > 0 ? 1 : 0;</span><br><span style="color: hsl(120, 100%, 40%);">+           msgb_tlv_put(msg, OSMO_GSUP_SM_RP_RPI_IE, sizeof(u8), &u8);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11068">change 11068</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/11068"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I4303dc817a5f8ee97b78d840672c443a6eddb332 </div>
<div style="display:none"> Gerrit-Change-Number: 11068 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>