Change in libosmo-sccp[master]: make SCCP timers configurable

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

Harald Welte gerrit-no-reply at lists.osmocom.org
Thu Sep 27 16:18:36 UTC 2018


Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/11119 )

Change subject: make SCCP timers configurable
......................................................................

make SCCP timers configurable

The previous hardcoded SCCP timers may cause SCCP connection releases, if the
peer is configured with far lower timers than libosmo-sccp. Testing with a
specific SCCPlite MSC, I experienced an iar of just over three minutes, meaning
that calls would be cut off by the MSC, since the osmo-bsc failed to send an
Inactivity Timer message until seven minutes have passed.

With this patch, SCCP timers are configurable by the user.

Define constant global default timers, and variable user-configurable timers
with each osmo_sccp_instance.

Add VTY UI to configure the timers. Users must call osmo_sccp_vty_init() to get
the sccp-timer config nodes under the 'cs7' node. Show the new UI in
ss7_asp_test.vty.

Note that even though this function is not new at all, until recently, all of
our SCCP users (osmo-bsc, osmo-msc, osmo-sgsn, osmo-hnbgw) failed to call
osmo_sccp_vty_init(), and thus also missed out on the various 'show' commands
defined in sccp_vty.c. In other words, to benefit from the timer
configurability, the patches to call osmo_sccp_vty_init() must first be merged
to the corresponding master branches.

If a 'sccp-timer' config command occurs, the cs7 instance must allocate an SCCP
instance in order to store the timer config. Do that by calling the recently
added osmo_ss7_ensure_sccp() function.

Hence remove the limitation that the SCCP instance must not be populated from
the "simple" setup function. If we want to configure SCCP timers beforehand,
there must be an SCCP instance for that, and there is no hard reason to require
a NULL SCCP instance, besides the desire to prevent this function from being
invoked twice.

Change-Id: I28a7362aa838e648ecc9b26ee53dbcade81a9d65
---
M src/osmo_ss7_vty.c
M src/sccp_internal.h
M src/sccp_scoc.c
M src/sccp_user.c
M src/sccp_vty.c
M tests/vty/ss7_asp_test.vty
6 files changed, 327 insertions(+), 27 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c
index 14539b6..7ef58cf 100644
--- a/src/osmo_ss7_vty.c
+++ b/src/osmo_ss7_vty.c
@@ -41,6 +41,8 @@
 #include <osmocom/sigtran/sccp_sap.h>
 #include "sccp_internal.h"
 
+#include "sccp_internal.h"
+
 #define XUA_VAR_STR	"(sua|m3ua|ipa)"
 
 #define XUA_VAR_HELP_STR		\
@@ -1658,6 +1660,9 @@
 
 	/* Append SCCP Addressbook */
 	write_sccp_addressbook(vty, inst);
+
+	if (inst->sccp)
+		osmo_sccp_vty_write_cs7_node(vty, " ", inst->sccp);
 }
 
 
diff --git a/src/sccp_internal.h b/src/sccp_internal.h
index 651862f..000f0f7 100644
--- a/src/sccp_internal.h
+++ b/src/sccp_internal.h
@@ -7,6 +7,36 @@
 
 #define SCCP_STR "Signalling Connection Control Part\n"
 
+/* Appendix C.4 of Q.714 */
+enum osmo_sccp_timer {
+	OSMO_SCCP_TIMER_CONN_EST,
+	OSMO_SCCP_TIMER_IAS,
+	OSMO_SCCP_TIMER_IAR,
+	OSMO_SCCP_TIMER_REL,
+	OSMO_SCCP_TIMER_REPEAT_REL,
+	OSMO_SCCP_TIMER_INT,
+	OSMO_SCCP_TIMER_GUARD,
+	OSMO_SCCP_TIMER_RESET,
+	OSMO_SCCP_TIMER_REASSEMBLY,
+	/* This must remain the last item: */
+	OSMO_SCCP_TIMERS_COUNT
+};
+
+struct osmo_sccp_timer_val {
+	uint32_t s;
+	uint32_t us;
+};
+
+extern const struct osmo_sccp_timer_val osmo_sccp_timer_defaults[];
+
+extern const struct value_string osmo_sccp_timer_names[];
+static inline const char *osmo_sccp_timer_name(enum osmo_sccp_timer val)
+{ return get_value_string(osmo_sccp_timer_names, val); }
+
+extern const struct value_string osmo_sccp_timer_descriptions[];
+static inline const char *osmo_sccp_timer_description(enum osmo_sccp_timer val)
+{ return get_value_string(osmo_sccp_timer_descriptions, val); }
+
 /* an instance of the SCCP stack */
 struct osmo_sccp_instance {
 	/* entry in global list of ss7 instances */
@@ -23,6 +53,8 @@
 	void *priv;
 
 	struct osmo_ss7_user ss7_user;
+
+	struct osmo_sccp_timer_val timers[OSMO_SCCP_TIMERS_COUNT];
 };
 
 struct osmo_sccp_user {
@@ -90,3 +122,9 @@
 struct osmo_fsm sccp_scoc_fsm;
 
 void sccp_scoc_show_connections(struct vty *vty, struct osmo_sccp_instance *inst);
+
+const struct osmo_sccp_timer_val *osmo_sccp_timer_get(const struct osmo_sccp_instance *inst,
+						      enum osmo_sccp_timer timer,
+						      bool default_if_unset);
+
+void osmo_sccp_vty_write_cs7_node(struct vty *vty, const char *indent, struct osmo_sccp_instance *inst);
diff --git a/src/sccp_scoc.c b/src/sccp_scoc.c
index 1057be0..8138e43 100644
--- a/src/sccp_scoc.c
+++ b/src/sccp_scoc.c
@@ -64,20 +64,6 @@
 #define S(x)	(1 << (x))
 #define SCU_MSGB_SIZE	1024
 
-/* Appendix C.4 of Q.714 (all in milliseconds) */
-#define CONNECTION_TIMER	( 1 * 60 * 1000)
-#define TX_INACT_TIMER		( 7 * 60 * 1000) /* RFC 3868 Ch. 8. */
-#define RX_INACT_TIMER		(15 * 60 * 1000) /* RFC 3868 Ch. 8. */
-#define RELEASE_TIMER		(     10 * 1000)
-#define RELEASE_REP_TIMER	(     10 * 1000)
-#define INT_TIMER		( 1 * 60 * 1000)
-#define GUARD_TIMER		(23 * 60 * 1000)
-#define RESET_TIMER		(     10 * 1000)
-
-/* convert from single value in milliseconds to comma-separated
- * "seconds, microseconds" format we use in osmocom/core/timers.h */
-#define MSEC_TO_S_US(x)		(x/1000), ((x%1000)*1000)
-
 /***********************************************************************
  * SCCP connection table
  ***********************************************************************/
@@ -235,6 +221,109 @@
  * Timer Handling
  ***********************************************************************/
 
+/* Appendix C.4 of ITU-T Q.714 */
+const struct value_string osmo_sccp_timer_names[] = {
+	{ OSMO_SCCP_TIMER_CONN_EST, "conn_est" },
+	{ OSMO_SCCP_TIMER_IAS, "ias" },
+	{ OSMO_SCCP_TIMER_IAR, "iar" },
+	{ OSMO_SCCP_TIMER_REL, "rel" },
+	{ OSMO_SCCP_TIMER_REPEAT_REL, "repeat_rel" },
+	{ OSMO_SCCP_TIMER_INT, "int" },
+	{ OSMO_SCCP_TIMER_GUARD, "guard" },
+	{ OSMO_SCCP_TIMER_RESET, "reset" },
+	{ OSMO_SCCP_TIMER_REASSEMBLY, "reassembly" },
+	{}
+};
+
+/* Mostly pasted from Appendix C.4 of ITU-T Q.714 (05/2001) -- some of their descriptions are quite
+ * unintelligible out of context, for which we have our own description here. */
+const struct value_string osmo_sccp_timer_descriptions[] = {
+	{ OSMO_SCCP_TIMER_CONN_EST,
+	  "Waiting for connection confirm message, 1 to 2 minutes" },
+	{ OSMO_SCCP_TIMER_IAS,
+	  "Send keep-alive: on an idle connection, delay before sending an Idle Timer message,"
+	  " 5 to 10 minutes" },
+	{ OSMO_SCCP_TIMER_IAR,
+	  "Receive keep-alive: on an idle connection, delay until considering a connection as stale,"
+	  " 11 to 21 minutes" },
+	{ OSMO_SCCP_TIMER_REL,
+	  "Waiting for release complete message, 10 to 20 seconds" },
+	{ OSMO_SCCP_TIMER_REPEAT_REL,
+	  "Waiting for release complete message; or to repeat sending released message after the initial"
+	  " expiry, 10 to 20 seconds" },
+	{ OSMO_SCCP_TIMER_INT,
+	  "Waiting for release complete message; or to release connection resources, freeze the LRN and"
+	  " alert a maintenance function after the initial expiry, extending to 1 minute" },
+	{ OSMO_SCCP_TIMER_GUARD,
+	  "Waiting to resume normal procedure for temporary connection sections during the restart"
+	  " procedure, 23 to 25 minutes" },
+	{ OSMO_SCCP_TIMER_RESET,
+	  "Waiting to release temporary connection section or alert maintenance function after reset"
+	  " request message is sent, 10 to 20 seconds" },
+	{ OSMO_SCCP_TIMER_REASSEMBLY,
+	  "Waiting to receive all the segments of the remaining segments, single segmented message after"
+	  " receiving the first segment, 10 to 20 seconds" },
+	{}
+};
+
+/* Appendix C.4 of ITU-T Q.714 */
+const struct osmo_sccp_timer_val osmo_sccp_timer_defaults[] = {
+	[OSMO_SCCP_TIMER_CONN_EST]	= { .s =  1 * 60, },
+	[OSMO_SCCP_TIMER_IAS]		= { .s =  7 * 60, }, /* RFC 3868 Ch. 8. */
+	[OSMO_SCCP_TIMER_IAR]		= { .s = 15 * 60, }, /* RFC 3868 Ch. 8. */
+	[OSMO_SCCP_TIMER_REL]		= { .s =      10, },
+	[OSMO_SCCP_TIMER_REPEAT_REL]	= { .s =      10, },
+	[OSMO_SCCP_TIMER_INT]		= { .s =  1 * 60, },
+	[OSMO_SCCP_TIMER_GUARD]		= { .s = 23 * 60, },
+	[OSMO_SCCP_TIMER_RESET]		= { .s =      10, },
+	[OSMO_SCCP_TIMER_REASSEMBLY]	= { .s =      10, },
+};
+
+osmo_static_assert(ARRAY_SIZE(osmo_sccp_timer_defaults) == OSMO_SCCP_TIMERS_COUNT,
+		   assert_osmo_sccp_timers_count);
+
+/* Look up an SCCP timer value as configured in the osmo_ss7_instance.
+ * If no user defined value is set, return the global default from osmo_sccp_timer_defaults instead.
+ * However, if default_if_unset is passed false, return NULL in case there is no user defined setting, or
+ * in case it is identical to the global default. */
+const struct osmo_sccp_timer_val *osmo_sccp_timer_get(const struct osmo_sccp_instance *inst,
+						      enum osmo_sccp_timer timer,
+						      bool default_if_unset)
+{
+	const struct osmo_sccp_timer_val *val;
+	const struct osmo_sccp_timer_val *def;
+
+	OSMO_ASSERT(timer >= 0
+		    && timer < ARRAY_SIZE(inst->timers)
+		    && timer < ARRAY_SIZE(osmo_sccp_timer_defaults));
+
+	val = &inst->timers[timer];
+	def = &osmo_sccp_timer_defaults[timer];
+
+	/* Assert that all timer definitions have a sane global default */
+	OSMO_ASSERT(def->s || def->us);
+
+	if (val->s || val->us) {
+		if (!default_if_unset && val->s == def->s && val->us == def->us)
+			return NULL;
+		return val;
+	}
+
+	if (!default_if_unset)
+		return NULL;
+
+	/* If unset, use the global default. */
+	return def;
+}
+
+static void sccp_timer_schedule(const struct sccp_connection *conn,
+				struct osmo_timer_list *timer,
+				enum osmo_sccp_timer timer_name)
+{
+	const struct osmo_sccp_timer_val *val = osmo_sccp_timer_get(conn->inst, timer_name, true);
+	osmo_timer_schedule(timer, val->s, val->us);
+}
+
 /* T(ias) has expired, send a COIT message to the peer */
 static void tx_inact_tmr_cb(void *data)
 {
@@ -280,13 +369,13 @@
 /* Re-start the Tx inactivity timer */
 static void conn_restart_tx_inact_timer(struct sccp_connection *conn)
 {
-	osmo_timer_schedule(&conn->t_ias, MSEC_TO_S_US(TX_INACT_TIMER));
+	sccp_timer_schedule(conn, &conn->t_ias, OSMO_SCCP_TIMER_IAS);
 }
 
 /* Re-start the Rx inactivity timer */
 static void conn_restart_rx_inact_timer(struct sccp_connection *conn)
 {
-	osmo_timer_schedule(&conn->t_iar, MSEC_TO_S_US(RX_INACT_TIMER));
+	sccp_timer_schedule(conn, &conn->t_iar, OSMO_SCCP_TIMER_IAR);
 }
 
 /* Re-start both Rx and Tx inactivity timers */
@@ -306,19 +395,19 @@
 /* Start release timer T(rel) */
 static void conn_start_rel_timer(struct sccp_connection *conn)
 {
-	osmo_timer_schedule(&conn->t_rel, MSEC_TO_S_US(RELEASE_TIMER));
+	sccp_timer_schedule(conn, &conn->t_rel, OSMO_SCCP_TIMER_REL);
 }
 
 /* Start repeat release timer T(rep_rel) */
 static void conn_start_rep_rel_timer(struct sccp_connection *conn)
 {
-	osmo_timer_schedule(&conn->t_rep_rel, MSEC_TO_S_US(RELEASE_REP_TIMER));
+	sccp_timer_schedule(conn, &conn->t_rep_rel, OSMO_SCCP_TIMER_REPEAT_REL);
 }
 
 /* Start interval timer T(int) */
 static void conn_start_int_timer(struct sccp_connection *conn)
 {
-	osmo_timer_schedule(&conn->t_int, MSEC_TO_S_US(INT_TIMER));
+	sccp_timer_schedule(conn, &conn->t_int, OSMO_SCCP_TIMER_INT);
 }
 
 /* Stop all release related timers: T(rel), T(int) and T(rep_rel) */
@@ -332,7 +421,7 @@
 /* Start connect timer T(conn) */
 static void conn_start_connect_timer(struct sccp_connection *conn)
 {
-	osmo_timer_schedule(&conn->t_conn, MSEC_TO_S_US(CONNECTION_TIMER));
+	sccp_timer_schedule(conn, &conn->t_conn, OSMO_SCCP_TIMER_CONN_EST);
 }
 
 /* Stop connect timer T(conn) */
diff --git a/src/sccp_user.c b/src/sccp_user.c
index 020166d..793e08c 100644
--- a/src/sccp_user.c
+++ b/src/sccp_user.c
@@ -396,13 +396,6 @@
 	LOGP(DLSCCP, LOGL_NOTICE, "%s: Using SS7 instance %u, pc:%s\n", name,
 	     ss7->cfg.id, osmo_ss7_pointcode_print(ss7, ss7->cfg.primary_pc));
 
-	/* There must not be an existing SCCP istance, regarless if the simple
-	 * client has created the SS7 instance or if it was already present.
-	 * An already existing SCCP instance would be an indication that this
-	 * function has been called twice with the same SS7 instance, which
-	 * must not be the case! */
-	OSMO_ASSERT(ss7->sccp == NULL);
-
 	/* Check if there is already an application server that matches
 	 * the protocol we intend to use. If not, we will create one. */
 	as = osmo_ss7_as_find_by_proto(ss7, prot);
diff --git a/src/sccp_vty.c b/src/sccp_vty.c
index b11fec5..46afb49 100644
--- a/src/sccp_vty.c
+++ b/src/sccp_vty.c
@@ -141,9 +141,125 @@
 	return CMD_SUCCESS;
 }
 
+/* sccp-timer <name> <1-999999>
+ * (cmdstr and doc are dynamically generated from osmo_sccp_timer_names.) */
+DEFUN(sccp_timer, sccp_timer_cmd,
+      NULL, NULL)
+{
+	struct osmo_ss7_instance *ss7 = vty->index;
+	enum osmo_sccp_timer timer = get_string_value(osmo_sccp_timer_names, argv[0]);
+	struct osmo_sccp_timer_val set_val = { .s = atoi(argv[1]) };
+
+	if (timer < 0 || timer >= OSMO_SCCP_TIMERS_COUNT) {
+		vty_out(vty, "%% Invalid timer: %s%s", argv[0], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	osmo_ss7_ensure_sccp(ss7);
+	if (!ss7->sccp) {
+		vty_out(vty, "%% Error: cannot instantiate SCCP instance%s", VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	ss7->sccp->timers[timer] = set_val;
+	return CMD_SUCCESS;
+}
+
+static const char *osmo_sccp_timer_val_name(const struct osmo_sccp_timer_val *val)
+{
+	static char buf[16];
+
+	snprintf(buf, sizeof(buf), "%u", val->s);
+	return buf;
+}
+
+static void gen_sccp_timer_cmd_strs(struct cmd_element *cmd)
+{
+	int i;
+	char *cmd_str = NULL;
+	char *doc_str = NULL;
+
+	OSMO_ASSERT(cmd->string == NULL);
+	OSMO_ASSERT(cmd->doc == NULL);
+
+	osmo_talloc_asprintf(tall_vty_ctx, cmd_str, "sccp-timer (");
+	osmo_talloc_asprintf(tall_vty_ctx, doc_str,
+			     "Configure SCCP timer values, see ITU-T Q.714\n");
+
+	for (i = 0; osmo_sccp_timer_names[i].str; i++) {
+		const struct osmo_sccp_timer_val *def;
+		enum osmo_sccp_timer timer;
+
+		timer = osmo_sccp_timer_names[i].value;
+		def = &osmo_sccp_timer_defaults[timer];
+		OSMO_ASSERT(timer >= 0 && timer < OSMO_SCCP_TIMERS_COUNT);
+
+		osmo_talloc_asprintf(tall_vty_ctx, cmd_str, "%s%s",
+				     i ? "|" : "",
+				     osmo_sccp_timer_name(timer));
+		osmo_talloc_asprintf(tall_vty_ctx, doc_str, "%s (default: %s)\n",
+				     osmo_sccp_timer_description(timer),
+				     osmo_sccp_timer_val_name(def));
+	}
+
+	osmo_talloc_asprintf(tall_vty_ctx, cmd_str, ") <1-999999>");
+	osmo_talloc_asprintf(tall_vty_ctx, doc_str,
+			     "Timer value, in seconds\n");
+
+	cmd->string = cmd_str;
+	cmd->doc = doc_str;
+}
+
+static void write_sccp_timers(struct vty *vty, const char *indent,
+			      struct osmo_sccp_instance *inst, bool default_if_unset)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(inst->timers); i++) {
+		const struct osmo_sccp_timer_val *val = osmo_sccp_timer_get(inst, i, default_if_unset);
+		if (!val)
+			continue;
+		vty_out(vty, "%ssccp-timer %s %s%s", indent, osmo_sccp_timer_name(i),
+			osmo_sccp_timer_val_name(val), VTY_NEWLINE);
+	}
+}
+
+void osmo_sccp_vty_write_cs7_node(struct vty *vty, const char *indent, struct osmo_sccp_instance *inst)
+{
+	write_sccp_timers(vty, indent, inst, false);
+}
+
+DEFUN(show_sccp_timers, show_sccp_timers_cmd,
+	"show cs7 instance <0-15> sccp timers",
+	SHOW_STR CS7_STR INST_STR INST_STR
+	"Signaling Connection Control Part\n"
+	"Show List of SCCP timers\n")
+{
+	int id = atoi(argv[0]);
+	struct osmo_ss7_instance *ss7;
+
+	ss7 = osmo_ss7_instance_find(id);
+	if (!ss7) {
+		vty_out(vty, "No SS7 instance %d found%s", id, VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	if (!ss7->sccp) {
+		vty_out(vty, "SS7 instance %d has no SCCP initialized%s", id, VTY_NEWLINE);
+		return CMD_SUCCESS;
+	}
+
+	write_sccp_timers(vty, "", ss7->sccp, true);
+	return CMD_SUCCESS;
+}
+
 void osmo_sccp_vty_init(void)
 {
 	install_element_ve(&show_sccp_users_cmd);
 	install_element_ve(&show_sccp_user_ssn_cmd);
 	install_element_ve(&show_sccp_connections_cmd);
+
+	install_element_ve(&show_sccp_timers_cmd);
+	gen_sccp_timer_cmd_strs(&sccp_timer_cmd);
+	install_element(L_CS7_NODE, &sccp_timer_cmd);
 }
diff --git a/tests/vty/ss7_asp_test.vty b/tests/vty/ss7_asp_test.vty
index 05c7527..cb8dc85 100644
--- a/tests/vty/ss7_asp_test.vty
+++ b/tests/vty/ss7_asp_test.vty
@@ -8,6 +8,7 @@
   show cs7 instance <0-15> sccp users
   show cs7 instance <0-15> sccp ssn <0-65535>
   show cs7 instance <0-15> sccp connections
+  show cs7 instance <0-15> sccp timers
 ... !show cs7
 
 ss7_asp_vty_test> enable
@@ -21,6 +22,7 @@
   show cs7 instance <0-15> sccp users
   show cs7 instance <0-15> sccp ssn <0-65535>
   show cs7 instance <0-15> sccp connections
+  show cs7 instance <0-15> sccp timers
 ... !show cs7
 
 ss7_asp_vty_test# show ?
@@ -57,6 +59,7 @@
   users        Show List of SCCP Users registered
   ssn          Find an SCCP User registered for the given SSN
   connections  Show List of active SCCP connections
+  timers       Show List of SCCP timers
 
 ss7_asp_vty_test# show cs7 instance 0 sccp ssn ?
   <0-65535>  Subsystem Number (SSN)
@@ -79,6 +82,7 @@
   no as NAME
   sccp-address NAME
   no sccp-address NAME
+  sccp-timer (conn_est|ias|iar|rel|repeat_rel|int|guard|reset|reassembly) <1-999999>
 
 ss7_asp_vty_test(config-cs7)# ?
 ...
@@ -90,6 +94,7 @@
   no                 Negate a command or set its defaults
   as                 Configure an Application Server
   sccp-address       Create/Modify an SCCP addressbook entry
+  sccp-timer         Configure SCCP timer values, see ITU-T Q.714
 
 ss7_asp_vty_test(config-cs7)# description ?
   TEXT  Text until the end of the line
@@ -354,3 +359,57 @@
 AS Name      State        Context    Dpc           Si   Opc           Ssn Min   Max
 ------------ ------------ ---------- ------------- ---- ------------- --- ----- -----
 my-ass       AS_DOWN      0          3.2.1                                          
+
+
+ss7_asp_vty_test(config-cs7)# do show cs7 instance 0 sccp timers
+SS7 instance 0 has no SCCP initialized
+
+ss7_asp_vty_test(config-cs7)# show running-config
+... !sccp-timer
+
+ss7_asp_vty_test(config-cs7)# sccp-timer ias 5
+ss7_asp_vty_test(config-cs7)# do show cs7 instance 0 sccp timers
+sccp-timer conn_est 60
+sccp-timer ias 5
+sccp-timer iar 900
+sccp-timer rel 10
+sccp-timer repeat_rel 10
+sccp-timer int 60
+sccp-timer guard 1380
+sccp-timer reset 10
+sccp-timer reassembly 10
+ss7_asp_vty_test(config-cs7)# show running-config
+... !sccp-timer
+ sccp-timer ias 5
+... !sccp-timer
+
+ss7_asp_vty_test(config-cs7)# sccp-timer ias 420
+ss7_asp_vty_test(config-cs7)# do show cs7 instance 0 sccp timers
+sccp-timer conn_est 60
+sccp-timer ias 420
+sccp-timer iar 900
+sccp-timer rel 10
+sccp-timer repeat_rel 10
+sccp-timer int 60
+sccp-timer guard 1380
+sccp-timer reset 10
+sccp-timer reassembly 10
+ss7_asp_vty_test(config-cs7)# show running-config
+... !sccp-timer
+
+ss7_asp_vty_test(config-cs7)# sccp-timer?
+  sccp-timer  Configure SCCP timer values, see ITU-T Q.714
+
+ss7_asp_vty_test(config-cs7)# sccp-timer ?
+  conn_est    Waiting for connection confirm message, 1 to 2 minutes (default: 60)
+  ias         Send keep-alive: on an idle connection, delay before sending an Idle Timer message, 5 to 10 minutes (default: 420)
+  iar         Receive keep-alive: on an idle connection, delay until considering a connection as stale, 11 to 21 minutes (default: 900)
+  rel         Waiting for release complete message, 10 to 20 seconds (default: 10)
+  repeat_rel  Waiting for release complete message; or to repeat sending released message after the initial expiry, 10 to 20 seconds (default: 10)
+  int         Waiting for release complete message; or to release connection resources, freeze the LRN and alert a maintenance function after the initial expiry, extending to 1 minute (default: 60)
+  guard       Waiting to resume normal procedure for temporary connection sections during the restart procedure, 23 to 25 minutes (default: 1380)
+  reset       Waiting to release temporary connection section or alert maintenance function after reset request message is sent, 10 to 20 seconds (default: 10)
+  reassembly  Waiting to receive all the segments of the remaining segments, single segmented message after receiving the first segment, 10 to 20 seconds (default: 10)
+
+ss7_asp_vty_test(config-cs7)# sccp-timer conn_est ?
+  <1-999999>  Timer value, in seconds

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

Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I28a7362aa838e648ecc9b26ee53dbcade81a9d65
Gerrit-Change-Number: 11119
Gerrit-PatchSet: 5
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180927/5b2fda66/attachment.htm>


More information about the gerrit-log mailing list