[PATCH] osmo-hlr[master]: notify GSUP clients when HLR subscriber information changes

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Stefan Sperling gerrit-no-reply at lists.osmocom.org
Mon Apr 9 09:58:52 UTC 2018


Review at  https://gerrit.osmocom.org/7685

notify GSUP clients when HLR subscriber information changes

Add a function which triggers subscriber update notifications to
all connected GSUP clients, and invoke it when the MSISDN of a
subscriber is changed via VTY.

This makes the TTCN3 HLR test TC_vty_msisdn_isd pass.

Note that the new function currently relies on implementation
details of the Location Update Operation (luop) code.
Because of this we currently log a slightly misleading message
when the updated Insert Subscriber Data message is sent:
  "luop.c:161 LU OP state change: LU RECEIVED -> ISD SENT"
This message is misleading because, in fact, no location update
message was received from a GSUP client at that moment.

So while this change fixes the externally visible behaviour, we may
want to follow this up with some refactoring to avoid relying on
luop internals. It seems acceptable to do that in a separate step
since such a change will be more involved and harder to review.

We may want to trigger such notifications in other situations as well.
This is left for future work, too. There are no TTCN3 test cases for
other situations yet, as far as I can see.

Related: OS#2785
Change-Id: Iffe1d7afb9fc7dbae542f70bbf5391ddc08a14b4
---
M src/hlr.c
M src/hlr.h
M src/hlr_vty_subscr.c
3 files changed, 37 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/85/7685/1

diff --git a/src/hlr.c b/src/hlr.c
index 838b1bc..2ae4285 100644
--- a/src/hlr.c
+++ b/src/hlr.c
@@ -46,6 +46,35 @@
 
 static struct hlr *g_hlr;
 
+/* Trigger 'Insert Subscriber Data' messages to all connected GSUP clients.
+ *
+ * \param[in] subscr  A subscriber we have new data to send for.
+ */
+void
+osmo_hlr_subscriber_update_notify(struct hlr_subscriber *subscr)
+{
+        struct osmo_gsup_conn *co;
+
+	if (g_hlr->gs == NULL)
+		return;
+
+	llist_for_each_entry(co, &g_hlr->gs->clients, list) {
+		struct lu_operation *luop = lu_op_alloc_conn(co);
+		if (!luop) {
+			LOGP(DMAIN, LOGL_ERROR,
+			       "IMSI='%s': Cannot notify GSUP client, cannot allocate lu_operation,"
+			       " for %s:%u\n", subscr->imsi,
+			       co && co->conn && co->conn->server? co->conn->server->addr : "unset",
+			       co && co->conn && co->conn->server? co->conn->server->port : 0);
+			continue;
+		}
+		luop->subscr = *subscr;
+		luop->state = LU_S_LU_RECEIVED; /* Pretend we received a location update. */
+		lu_op_tx_insert_subscr_data(luop);
+		lu_op_free(luop);
+	}
+}
+
 /***********************************************************************
  * Send Auth Info handling
  ***********************************************************************/
diff --git a/src/hlr.h b/src/hlr.h
index f63bc2b..368a052 100644
--- a/src/hlr.h
+++ b/src/hlr.h
@@ -38,3 +38,7 @@
 	/* Local bind addr */
 	char *gsup_bind_addr;
 };
+
+struct hlr_subscriber;
+
+void osmo_hlr_subscriber_update_notify(struct hlr_subscriber *subscr);
diff --git a/src/hlr_vty_subscr.c b/src/hlr_vty_subscr.c
index 7191a1c..4092a8f 100644
--- a/src/hlr_vty_subscr.c
+++ b/src/hlr_vty_subscr.c
@@ -257,6 +257,10 @@
 
 	vty_out(vty, "%% Updated subscriber IMSI='%s' to MSISDN='%s'%s",
 		subscr.imsi, msisdn, VTY_NEWLINE);
+
+	if (db_subscr_get_by_msisdn(g_hlr->dbc, msisdn, &subscr) == 0)
+		osmo_hlr_subscriber_update_notify(&subscr);
+
 	return CMD_SUCCESS;
 }
 

-- 
To view, visit https://gerrit.osmocom.org/7685
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iffe1d7afb9fc7dbae542f70bbf5391ddc08a14b4
Gerrit-PatchSet: 1
Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de>



More information about the gerrit-log mailing list