Change in osmo-hlr[master]: SS/USSD: fix: properly (re)schedule SS session timeout

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

Vadim Yanitskiy gerrit-no-reply at lists.osmocom.org
Fri Nov 30 00:29:27 UTC 2018


Vadim Yanitskiy has uploaded this change for review. ( https://gerrit.osmocom.org/12022


Change subject: SS/USSD: fix: properly (re)schedule SS session timeout
......................................................................

SS/USSD: fix: properly (re)schedule SS session timeout

It may happen that either the MS or an ESME would become
unresponsive, e.g. due to a bug, or a dropped message. This
is why we have SS session timeout, that prevents keeping
'stalled' sessions forever.

For some reason, it wasn't properly resceduled in case of any
SS/USSD activity, so the lifetime of a session was limited to
hard-coded 30 seconds.

Let's introduce a VTY option, which can be used to configure
the timer (by default it is 120 seconds now):

hlr
  ...
  ! Use 0 to disable this timer
  ss-guard-timeout 120

and properly (re)schedule it.

Change-Id: I00561c7aa692b19f85692e11f83ffc1826023120
Related: OS#3717
---
M src/hlr.c
M src/hlr.h
M src/hlr_ussd.c
M src/hlr_vty.c
M tests/test_nodes.vty
5 files changed, 36 insertions(+), 4 deletions(-)



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

diff --git a/src/hlr.c b/src/hlr.c
index 78d6c91..9f1b907 100644
--- a/src/hlr.c
+++ b/src/hlr.c
@@ -604,6 +604,9 @@
 	INIT_LLIST_HEAD(&g_hlr->ss_sessions);
 	INIT_LLIST_HEAD(&g_hlr->ussd_routes);
 
+	/* Default SS guard timeout is 120 (i.e. 2 mins) */
+	g_hlr->ss_guard_timeout = 120;
+
 	rc = osmo_init_logging2(hlr_ctx, &hlr_log_info);
 	if (rc < 0) {
 		fprintf(stderr, "Error initializing logging\n");
diff --git a/src/hlr.h b/src/hlr.h
index 315c3dd..5236356 100644
--- a/src/hlr.h
+++ b/src/hlr.h
@@ -45,6 +45,9 @@
 	struct hlr_euse *euse_default;
 	struct llist_head iuse_list;
 
+	/* SS session guard timer value */
+	int ss_guard_timeout;
+
 	struct llist_head ussd_routes;
 
 	struct llist_head ss_sessions;
diff --git a/src/hlr_ussd.c b/src/hlr_ussd.c
index ba373f3..6ba1dcc 100644
--- a/src/hlr_ussd.c
+++ b/src/hlr_ussd.c
@@ -1,6 +1,7 @@
 /* OsmoHLR SS/USSD implementation */
 
 /* (C) 2018 Harald Welte <laforge at gnumonks.org>
+ * (C) 2018 by Vadim Yanitskiy <axilirator at gmail.com>
  *
  * All Rights Reserved
  *
@@ -208,11 +209,13 @@
 
 	OSMO_STRLCPY_ARRAY(ss->imsi, imsi);
 	ss->session_id = session_id;
+
+	/* Schedule self-destruction timer */
 	osmo_timer_setup(&ss->timeout, ss_session_timeout, ss);
-	/* NOTE: The timeout is currently global and not refreshed with subsequent messages
-	 * within the SS/USSD session.  So 30s after the initial SS message, the session will
-	 * timeout! */
-	osmo_timer_schedule(&ss->timeout, 30, 0);
+	if (g_hlr->ss_guard_timeout > 0) {
+		osmo_timer_schedule(&ss->timeout,
+			g_hlr->ss_guard_timeout, 0);
+	}
 
 	llist_add_tail(&ss->list, &hlr->ss_sessions);
 	return ss;
@@ -535,6 +538,13 @@
 				gsup->imsi, gsup->session_id);
 			goto out_err;
 		}
+
+		/* Reschedule self-destruction timer */
+		if (g_hlr->ss_guard_timeout > 0) {
+			osmo_timer_schedule(&ss->timeout,
+				g_hlr->ss_guard_timeout, 0);
+		}
+
 		if (ss_op_is_ussd(req.opcode)) {
 			/* dispatch unstructured SS to routing */
 			handle_ussd(conn, ss, gsup, &req);
diff --git a/src/hlr_vty.c b/src/hlr_vty.c
index 2d9b929..be49113 100644
--- a/src/hlr_vty.c
+++ b/src/hlr_vty.c
@@ -288,9 +288,22 @@
 	if (g_hlr->euse_default)
 		vty_out(vty, " ussd default-route external %s%s", g_hlr->euse_default->name, VTY_NEWLINE);
 
+	if (g_hlr->ss_guard_timeout > 0)
+		vty_out(vty, " ss-guard-timeout %i%s",
+			g_hlr->ss_guard_timeout, VTY_NEWLINE);
+
 	return 0;
 }
 
+DEFUN(cfg_ss_guard_timeout, cfg_ss_guard_timeout_cmd,
+	"ss-guard-timeout <0-255>",
+	"Set guard timer for SS/USSD session activity\n"
+	"Guard timer value (sec.), or 0 to disable")
+{
+	g_hlr->ss_guard_timeout = atoi(argv[0]);
+	return CMD_SUCCESS;
+}
+
 /***********************************************************************
  * Common Code
  ***********************************************************************/
@@ -353,6 +366,7 @@
 	install_element(HLR_NODE, &cfg_ussd_no_route_pfx_cmd);
 	install_element(HLR_NODE, &cfg_ussd_defaultroute_cmd);
 	install_element(HLR_NODE, &cfg_ussd_no_defaultroute_cmd);
+	install_element(HLR_NODE, &cfg_ss_guard_timeout_cmd);
 
 	hlr_vty_subscriber_init();
 }
diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty
index a9d4ac4..88ee5fb 100644
--- a/tests/test_nodes.vty
+++ b/tests/test_nodes.vty
@@ -77,6 +77,7 @@
   no ussd route prefix PREFIX
   ussd default-route external EUSE
   no ussd default-route
+  ss-guard-timeout <0-255>
 
 OsmoHLR(config-hlr)# gsup
 OsmoHLR(config-hlr-gsup)# list
@@ -118,4 +119,5 @@
   bind ip 127.0.0.1
  ussd route prefix *#100# internal own-msisdn
  ussd route prefix *#101# internal own-imsi
+ ss-guard-timeout 120
 end

-- 
To view, visit https://gerrit.osmocom.org/12022
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I00561c7aa692b19f85692e11f83ffc1826023120
Gerrit-Change-Number: 12022
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181130/96026914/attachment.htm>


More information about the gerrit-log mailing list