<p>Stefan Sperling <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/7992">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Neels Hofmeyr: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">move creation of insert subscriber data messages to a common function<br><br>Move code to create an Insert Subscriber Data message into a common<br>function which can be shared by hlr.c and luop.c.<br><br>As a consequence, we always encode gsup.cn_domain in the corresponding<br>msgb and must adjust expected output of the 'gsup' test accordingly.<br><br>Change-Id: I6a92ca34cdaadca9eacc774bb1ca386c325ba865<br>Requested-by: neels<br>Related: OS#2785<br>---<br>M src/gsup_server.c<br>M src/gsup_server.h<br>M src/hlr.c<br>M src/luop.c<br>M tests/gsup/gsup_test.err<br>5 files changed, 103 insertions(+), 67 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gsup_server.c b/src/gsup_server.c</span><br><span>index 07d4feb..4b8a0fa 100644</span><br><span>--- a/src/gsup_server.c</span><br><span>+++ b/src/gsup_server.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <osmocom/core/linuxlist.h></span><br><span> #include <osmocom/abis/ipa.h></span><br><span> #include <osmocom/abis/ipaccess.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48_ie.h></span><br><span> #include <osmocom/gsm/apn.h></span><br><span> </span><br><span> #include "gsup_server.h"</span><br><span>@@ -357,3 +358,56 @@</span><br><span> </span><br><span>  return 0;</span><br><span> }</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%);">+ * Populate a gsup message structure with an Insert Subscriber Data Message.</span><br><span style="color: hsl(120, 100%, 40%);">+ * All required memory buffers for data pointed to by pointers in struct omso_gsup_message</span><br><span style="color: hsl(120, 100%, 40%);">+ * must be allocated by the caller and should have the same lifetime as the gsup parameter.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] gsup  The gsup message to populate.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] imsi  The subscriber's IMSI.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] msisdn The subscriber's MSISDN.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] msisdn_enc A buffer large enough to store the MSISDN in encoded form.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] msisdn_enc_size Size of the buffer (must be >= OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN).</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] apn_buf A buffer large enough to store an APN (required if cn_domain is OSMO_GSUP_CN_DOMAIN_PS).</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] apn_buf_size Size of APN buffer (must be >= APN_MAXLEN).</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] cn_domain The CN Domain of the subscriber connection.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \returns 0 on success, and negative on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gsup_create_insert_subscriber_data_msg(struct osmo_gsup_message *gsup, const char *imsi, const char *msisdn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            uint8_t *msisdn_enc, size_t msisdn_enc_size,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          uint8_t *apn_buf, size_t apn_buf_size,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                enum osmo_gsup_cn_domain cn_domain)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        int len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(gsup);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  gsup->message_type = OSMO_GSUP_MSGT_INSERT_DATA_REQUEST;</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_strlcpy(gsup->imsi, imsi, sizeof(gsup->imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (msisdn_enc_size < OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN)</span><br><span style="color: hsl(120, 100%, 40%);">+          return -ENOSPC;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(msisdn_enc);</span><br><span style="color: hsl(120, 100%, 40%);">+      len = gsm48_encode_bcd_number(msisdn_enc, msisdn_enc_size, 0, msisdn);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (len < 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGP(DLGSUP, LOGL_ERROR, "%s: Error: cannot encode MSISDN '%s'\n", imsi, msisdn);</span><br><span style="color: hsl(120, 100%, 40%);">+           return -ENOSPC;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup->msisdn_enc = msisdn_enc;</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup->msisdn_enc_len = len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      #pragma message "FIXME: deal with encoding the following data: gsup.hlr_enc"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      gsup->cn_domain = cn_domain;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (gsup->cn_domain == OSMO_GSUP_CN_DOMAIN_PS) {</span><br><span style="color: hsl(120, 100%, 40%);">+           OSMO_ASSERT(apn_buf_size >= APN_MAXLEN);</span><br><span style="color: hsl(120, 100%, 40%);">+           OSMO_ASSERT(apn_buf);</span><br><span style="color: hsl(120, 100%, 40%);">+         /* FIXME: PDP infos - use more fine-grained access control</span><br><span style="color: hsl(120, 100%, 40%);">+               instead of wildcard APN */</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_gsup_configure_wildcard_apn(gsup, apn_buf, apn_buf_size);</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%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/gsup_server.h b/src/gsup_server.h</span><br><span>index 66c1a9c..e49d283 100644</span><br><span>--- a/src/gsup_server.h</span><br><span>+++ b/src/gsup_server.h</span><br><span>@@ -6,6 +6,10 @@</span><br><span> #include <osmocom/abis/ipaccess.h></span><br><span> #include <osmocom/gsm/gsup.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN 43 /* TS 24.008 10.5.4.7 */</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct osmo_gsup_conn;</span><br><span> </span><br><span> /* Expects message in msg->l2h */</span><br><span>@@ -55,3 +59,7 @@</span><br><span> </span><br><span> int osmo_gsup_configure_wildcard_apn(struct osmo_gsup_message *gsup,</span><br><span>                               uint8_t *apn_buf, size_t apn_buf_size);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_gsup_create_insert_subscriber_data_msg(struct osmo_gsup_message *gsup, const char *imsi, const char *msisdn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       uint8_t *msisdn_enc, size_t msisdn_enc_size,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          uint8_t *apn_buf, size_t apn_buf_size,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        enum osmo_gsup_cn_domain cn_domain);</span><br><span>diff --git a/src/hlr.c b/src/hlr.c</span><br><span>index 1c72f45..4da7b9b 100644</span><br><span>--- a/src/hlr.c</span><br><span>+++ b/src/hlr.c</span><br><span>@@ -26,7 +26,6 @@</span><br><span> #include <osmocom/core/logging.h></span><br><span> #include <osmocom/core/application.h></span><br><span> #include <osmocom/gsm/gsup.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gsm/gsm48_ie.h></span><br><span> #include <osmocom/vty/vty.h></span><br><span> #include <osmocom/vty/command.h></span><br><span> #include <osmocom/vty/telnet_interface.h></span><br><span>@@ -62,54 +61,33 @@</span><br><span>               return;</span><br><span> </span><br><span>  llist_for_each_entry(co, &g_hlr->gs->clients, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-         struct osmo_gsup_message gsup = {</span><br><span style="color: hsl(0, 100%, 40%);">-                       .message_type = OSMO_GSUP_MSGT_INSERT_DATA_REQUEST</span><br><span style="color: hsl(0, 100%, 40%);">-              };</span><br><span style="color: hsl(120, 100%, 40%);">+            struct osmo_gsup_message gsup = { };</span><br><span style="color: hsl(120, 100%, 40%);">+          uint8_t msisdn_enc[OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN];</span><br><span style="color: hsl(120, 100%, 40%);">+               uint8_t apn[APN_MAXLEN];</span><br><span style="color: hsl(120, 100%, 40%);">+              struct msgb *msg_out;</span><br><span>                uint8_t *peer;</span><br><span>               int peer_len;</span><br><span style="color: hsl(0, 100%, 40%);">-           uint8_t msisdn_enc[43]; /* TODO use constant; TS 24.008 10.5.4.7 */</span><br><span style="color: hsl(0, 100%, 40%);">-             uint8_t apn[APN_MAXLEN];</span><br><span style="color: hsl(0, 100%, 40%);">-                int len;</span><br><span style="color: hsl(0, 100%, 40%);">-                struct msgb *msg_out;</span><br><span style="color: hsl(120, 100%, 40%);">+         enum osmo_gsup_cn_domain cn_domain;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-         peer_len = osmo_gsup_conn_ccm_get(co, &peer, IPAC_IDTAG_SERNR);</span><br><span style="color: hsl(0, 100%, 40%);">-             if (peer_len < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (co->supports_ps)</span><br><span style="color: hsl(120, 100%, 40%);">+                       cn_domain = OSMO_GSUP_CN_DOMAIN_PS;</span><br><span style="color: hsl(120, 100%, 40%);">+           else if (co->supports_cs)</span><br><span style="color: hsl(120, 100%, 40%);">+                  cn_domain = OSMO_GSUP_CN_DOMAIN_CS;</span><br><span style="color: hsl(120, 100%, 40%);">+           else {</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* We have not yet received a location update from this subscriber .*/</span><br><span style="color: hsl(120, 100%, 40%);">+                        continue;</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 (osmo_gsup_create_insert_subscriber_data_msg(&gsup, subscr->imsi, subscr->msisdn, msisdn_enc,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                            sizeof(msisdn_enc), apn, sizeof(apn), cn_domain) != 0) {</span><br><span>                     LOGP(DMAIN, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                        "IMSI='%s': Cannot notify GSUP client, cannot get peer name "</span><br><span style="color: hsl(120, 100%, 40%);">+                               "IMSI='%s': Cannot notify GSUP client; could not create gsup message "</span><br><span>                             "for %s:%u\n", subscr->imsi,</span><br><span>                            co && co->conn && co->conn->server? co->conn->server->addr : "unset",</span><br><span>                            co && co->conn && co->conn->server? co->conn->server->port : 0);</span><br><span>                    continue;</span><br><span>            }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           osmo_strlcpy(gsup.imsi, subscr->imsi, GSM23003_IMSI_MAX_DIGITS + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         len = gsm48_encode_bcd_number(msisdn_enc, sizeof(msisdn_enc), 0, subscr->msisdn);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (len < 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       LOGP(DMAIN, LOGL_ERROR, "%s: Error: cannot encode MSISDN '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                          subscr->imsi, subscr->msisdn);</span><br><span style="color: hsl(0, 100%, 40%);">-                       continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               gsup.msisdn_enc = msisdn_enc;</span><br><span style="color: hsl(0, 100%, 40%);">-           gsup.msisdn_enc_len = len;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              if (co->supports_ps) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       gsup.cn_domain = OSMO_GSUP_CN_DOMAIN_PS;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* FIXME: PDP infos - use more fine-grained access control</span><br><span style="color: hsl(0, 100%, 40%);">-                         instead of wildcard APN */</span><br><span style="color: hsl(0, 100%, 40%);">-                   if (osmo_gsup_configure_wildcard_apn(&gsup, apn, sizeof(apn))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            LOGP(DMAIN, LOGL_ERROR, "%s: Error: cannot encode wildcard APN\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                 subscr->imsi);</span><br><span style="color: hsl(0, 100%, 40%);">-                          continue;</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-               } else if (co->supports_cs) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        gsup.cn_domain = OSMO_GSUP_CN_DOMAIN_CS;</span><br><span style="color: hsl(0, 100%, 40%);">-                } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* We have not yet received a location update from this subscriber .*/</span><br><span style="color: hsl(0, 100%, 40%);">-                  continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>            /* Send ISD to MSC/SGSN */</span><br><span>           msg_out = msgb_alloc_headroom(1024+16, 16, "GSUP ISD UPDATE");</span><br><span>             if (msg_out == NULL) {</span><br><span>@@ -120,8 +98,17 @@</span><br><span>                                co && co->conn && co->conn->server? co->conn->server->port : 0);</span><br><span>                    continue;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>            osmo_gsup_encode(msg_out, &gsup);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               peer_len = osmo_gsup_conn_ccm_get(co, &peer, IPAC_IDTAG_SERNR);</span><br><span style="color: hsl(120, 100%, 40%);">+           if (peer_len < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        LOGP(DMAIN, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                              "IMSI='%s': cannot get peer name for connection %s:%u\n", subscr->imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+                          co && co->conn && co->conn->server? co->conn->server->addr : "unset",</span><br><span style="color: hsl(120, 100%, 40%);">+                             co && co->conn && co->conn->server? co->conn->server->port : 0);</span><br><span style="color: hsl(120, 100%, 40%);">+                     continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          if (osmo_gsup_addr_send(g_hlr->gs, peer, peer_len, msg_out) < 0) {</span><br><span>                     LOGP(DMAIN, LOGL_ERROR,</span><br><span>                             "IMSI='%s': Cannot notify GSUP client; send operation failed "</span><br><span>diff --git a/src/luop.c b/src/luop.c</span><br><span>index db7b3c9..aff4d81 100644</span><br><span>--- a/src/luop.c</span><br><span>+++ b/src/luop.c</span><br><span>@@ -25,7 +25,6 @@</span><br><span> #include <errno.h></span><br><span> </span><br><span> #include <osmocom/core/logging.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gsm/gsm48_ie.h></span><br><span> #include <osmocom/gsm/gsup.h></span><br><span> #include <osmocom/gsm/apn.h></span><br><span> </span><br><span>@@ -52,6 +51,7 @@</span><br><span>      struct msgb *msg_out;</span><br><span> </span><br><span>    msg_out = msgb_alloc_headroom(1024+16, 16, "GSUP LUOP");</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(msg_out);</span><br><span>        osmo_gsup_encode(msg_out, gsup);</span><br><span> </span><br><span>         osmo_gsup_addr_send(luop->gsup_server, luop->peer,</span><br><span>@@ -215,40 +215,27 @@</span><br><span> /*! Transmit Insert Subscriber Data to new VLR/SGSN */</span><br><span> void lu_op_tx_insert_subscr_data(struct lu_operation *luop)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  struct osmo_gsup_message gsup;</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t msisdn_enc[43]; /* TODO use constant; TS 24.008 10.5.4.7 */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct hlr_subscriber *subscr = &luop->subscr;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_gsup_message gsup = { };</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t msisdn_enc[OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN];</span><br><span>      uint8_t apn[APN_MAXLEN];</span><br><span style="color: hsl(0, 100%, 40%);">-        int l;</span><br><span style="color: hsl(120, 100%, 40%);">+        enum osmo_gsup_cn_domain cn_domain;</span><br><span> </span><br><span>      OSMO_ASSERT(luop->state == LU_S_LU_RECEIVED ||</span><br><span>                luop->state == LU_S_CANCEL_ACK_RECEIVED);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    fill_gsup_msg(&gsup, luop, OSMO_GSUP_MSGT_INSERT_DATA_REQUEST);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (luop->is_ps)</span><br><span style="color: hsl(120, 100%, 40%);">+           cn_domain = OSMO_GSUP_CN_DOMAIN_PS;</span><br><span style="color: hsl(120, 100%, 40%);">+   else</span><br><span style="color: hsl(120, 100%, 40%);">+          cn_domain = OSMO_GSUP_CN_DOMAIN_CS;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- l = gsm48_encode_bcd_number(msisdn_enc, sizeof(msisdn_enc), 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                              luop->subscr.msisdn);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (l < 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (osmo_gsup_create_insert_subscriber_data_msg(&gsup, subscr->imsi, subscr->msisdn, msisdn_enc,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    sizeof(msisdn_enc), apn, sizeof(apn), cn_domain) != 0) {</span><br><span>             LOGP(DMAIN, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-              "%s: Error: cannot encode MSISDN '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     luop->subscr.imsi, luop->subscr.msisdn);</span><br><span style="color: hsl(0, 100%, 40%);">-             lu_op_tx_error(luop, GMM_CAUSE_PROTO_ERR_UNSPEC);</span><br><span style="color: hsl(120, 100%, 40%);">+                    "IMSI='%s': Cannot notify GSUP client; could not create gsup message "</span><br><span style="color: hsl(120, 100%, 40%);">+                      "for %s\n", subscr->imsi, luop->peer);</span><br><span>                return;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       gsup.msisdn_enc = msisdn_enc;</span><br><span style="color: hsl(0, 100%, 40%);">-   gsup.msisdn_enc_len = l;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #pragma message "FIXME: deal with encoding the following data: gsup.hlr_enc"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (luop->is_ps) {</span><br><span style="color: hsl(0, 100%, 40%);">-           /* FIXME: PDP infos - use more fine-grained access control</span><br><span style="color: hsl(0, 100%, 40%);">-                 instead of wildcard APN */</span><br><span style="color: hsl(0, 100%, 40%);">-           if (osmo_gsup_configure_wildcard_apn(&gsup, apn, sizeof(apn))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    LOGP(DMAIN, LOGL_ERROR, "%s: Error: cannot encode wildcard APN\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                         luop->subscr.imsi);</span><br><span style="color: hsl(0, 100%, 40%);">-                     lu_op_tx_error(luop, GMM_CAUSE_PROTO_ERR_UNSPEC);</span><br><span style="color: hsl(0, 100%, 40%);">-                       return;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span> </span><br><span>        /* Send ISD to new VLR/SGSN */</span><br><span>       _luop_tx_gsup(luop, &gsup);</span><br><span>diff --git a/tests/gsup/gsup_test.err b/tests/gsup/gsup_test.err</span><br><span>index d9d272a..0aeae30 100644</span><br><span>--- a/tests/gsup/gsup_test.err</span><br><span>+++ b/tests/gsup/gsup_test.err</span><br><span>@@ -1,2 +1,2 @@</span><br><span style="color: hsl(0, 100%, 40%);">-DMAIN 10 01 08 21 43 65 87 09 21 43 f5 08 09 08 89 67 45 23 01 89 67 f5 05 07 10 01 01 12 02 01 2a </span><br><span style="color: hsl(120, 100%, 40%);">+DMAIN 10 01 08 21 43 65 87 09 21 43 f5 08 09 08 89 67 45 23 01 89 67 f5 05 07 10 01 01 12 02 01 2a 28 01 01 </span><br><span> DMAIN LU OP state change: LU RECEIVED -> ISD SENT</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/7992">change 7992</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/7992"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-hlr </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I6a92ca34cdaadca9eacc774bb1ca386c325ba865 </div>
<div style="display:none"> Gerrit-Change-Number: 7992 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: Stefan Sperling <ssperling@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Stefan Sperling <ssperling@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>