<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12526">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Neels Hofmeyr: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Optionally store IMEI in subscriber table<br><br>Add VTY config option "store-imei". When it is set, store the IMEI<br>sent from the VLR with CHECK-IMEI in the database.<br><br>Related: OS#2541<br>Change-Id: I09274ecbed64224f7ae305e09ede773931da2a57<br>---<br>M src/hlr.c<br>M src/hlr.h<br>M src/hlr_vty.c<br>M tests/test_nodes.vty<br>4 files changed, 43 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/hlr.c b/src/hlr.c</span><br><span>index 614e99f..0098a32 100644</span><br><span>--- a/src/hlr.c</span><br><span>+++ b/src/hlr.c</span><br><span>@@ -419,8 +419,22 @@</span><br><span>          return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* Only print the IMEI for now, it's planned to store it here (OS#2541) */</span><br><span style="color: hsl(0, 100%, 40%);">-  LOGP(DMAIN, LOGL_INFO, "%s: has IMEI: %s\n", gsup->imsi, imei);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Save in DB if desired */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (g_hlr->store_imei) {</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGP(DAUC, LOGL_DEBUG, "IMSI='%s': storing IMEI = %s\n", gsup->imsi, imei);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (db_subscr_update_imei_by_imsi(g_hlr->dbc, gsup->imsi, imei) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       gsup_send_err_reply(conn, gsup->imsi, gsup->message_type, GMM_CAUSE_INV_MAND_INFO);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Check if subscriber exists and print IMEI */</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DMAIN, LOGL_INFO, "IMSI='%s': has IMEI = %s (consider setting 'store-imei')\n", gsup->imsi, imei);</span><br><span style="color: hsl(120, 100%, 40%);">+          struct hlr_subscriber subscr;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (db_subscr_get_by_imsi(g_hlr->dbc, gsup->imsi, &subscr) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        gsup_send_err_reply(conn, gsup->imsi, gsup->message_type, GMM_CAUSE_INV_MAND_INFO);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        /* Accept all IMEIs */</span><br><span>       gsup_reply.imei_result = OSMO_GSUP_IMEI_RESULT_ACK;</span><br><span>diff --git a/src/hlr.h b/src/hlr.h</span><br><span>index e9cc747..00fa43c 100644</span><br><span>--- a/src/hlr.h</span><br><span>+++ b/src/hlr.h</span><br><span>@@ -51,6 +51,8 @@</span><br><span>     struct llist_head ussd_routes;</span><br><span> </span><br><span>   struct llist_head ss_sessions;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      bool store_imei;</span><br><span> };</span><br><span> </span><br><span> extern struct hlr *g_hlr;</span><br><span>diff --git a/src/hlr_vty.c b/src/hlr_vty.c</span><br><span>index 6706aa4..04e0191 100644</span><br><span>--- a/src/hlr_vty.c</span><br><span>+++ b/src/hlr_vty.c</span><br><span>@@ -71,6 +71,8 @@</span><br><span> static int config_write_hlr(struct vty *vty)</span><br><span> {</span><br><span>    vty_out(vty, "hlr%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (g_hlr->store_imei)</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, " store-imei%s", VTY_NEWLINE);</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -305,6 +307,23 @@</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_store_imei, cfg_store_imei_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "store-imei",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Save the IMEI in the database when receiving Check IMEI requests. Note that an MSC does not necessarily send"</span><br><span style="color: hsl(120, 100%, 40%);">+      " Check IMEI requests (for OsmoMSC, you may want to set 'check-imei-rqd 1').")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   g_hlr->store_imei = true;</span><br><span style="color: hsl(120, 100%, 40%);">+  return CMD_SUCCESS;</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%);">+DEFUN(cfg_no_store_imei, cfg_no_store_imei_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "no store-imei",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Do not save the IMEI in the database, when receiving Check IMEI requests.")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     g_hlr->store_imei = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /***********************************************************************</span><br><span>  * Common Code</span><br><span>  ***********************************************************************/</span><br><span>@@ -368,6 +387,8 @@</span><br><span>    install_element(HLR_NODE, &cfg_ussd_defaultroute_cmd);</span><br><span>   install_element(HLR_NODE, &cfg_ussd_no_defaultroute_cmd);</span><br><span>        install_element(HLR_NODE, &cfg_ncss_guard_timeout_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(HLR_NODE, &cfg_store_imei_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(HLR_NODE, &cfg_no_store_imei_cmd);</span><br><span> </span><br><span>   hlr_vty_subscriber_init();</span><br><span> }</span><br><span>diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty</span><br><span>index 63d3da0..6e72ed0 100644</span><br><span>--- a/tests/test_nodes.vty</span><br><span>+++ b/tests/test_nodes.vty</span><br><span>@@ -79,6 +79,8 @@</span><br><span>   ussd default-route external EUSE</span><br><span>   no ussd default-route</span><br><span>   ncss-guard-timeout <0-255></span><br><span style="color: hsl(120, 100%, 40%);">+  store-imei</span><br><span style="color: hsl(120, 100%, 40%);">+  no store-imei</span><br><span> </span><br><span> OsmoHLR(config-hlr)# gsup</span><br><span> OsmoHLR(config-hlr-gsup)# list</span><br><span>@@ -98,6 +100,7 @@</span><br><span> OsmoHLR(config)# exit</span><br><span> OsmoHLR# configure terminal</span><br><span> OsmoHLR(config)# hlr</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR(config-hlr)# store-imei</span><br><span> OsmoHLR(config-hlr)# gsup</span><br><span> OsmoHLR(config-hlr-gsup)# end</span><br><span> OsmoHLR# disable</span><br><span>@@ -116,6 +119,7 @@</span><br><span>  logging level ss info</span><br><span> ...</span><br><span> hlr</span><br><span style="color: hsl(120, 100%, 40%);">+ store-imei</span><br><span>  gsup</span><br><span>   bind ip 127.0.0.1</span><br><span>  ussd route prefix *#100# internal own-msisdn</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12526">change 12526</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/12526"/><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: I09274ecbed64224f7ae305e09ede773931da2a57 </div>
<div style="display:none"> Gerrit-Change-Number: 12526 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Max <msuraev@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>