libvlr: use generic osmo_tdef API for T3250, T3260, and T3270

These timers so far were implemented as a list of unsigned integers,
which has never been initialized to any reasonable defaults. Since
they are used as state timeouts in several FSMs, we might end up
staying in some state forever.

Let's migrate to generic osmo_tdef API and use default values from
table 11.2 of 3GPP TS 24.008. This way the user can introspect and
change their values from the VTY / configuration file.

Change-Id: Ia8cf98da0aea0e626c5ff088a833d7359c43847f
Related: OS#4368
diff --git a/src/libmsc/msc_net_init.c b/src/libmsc/msc_net_init.c
index ffb8a3b..8c8fb86 100644
--- a/src/libmsc/msc_net_init.c
+++ b/src/libmsc/msc_net_init.c
@@ -41,6 +41,7 @@
 };
 
 struct osmo_tdef_group msc_tdef_group[] = {
+	{ .name = "vlr", .tdefs = msc_tdefs_vlr, .desc = "VLR (Visitors Location Register)" },
 	{ .name = "mgw", .tdefs = g_mgw_tdefs, .desc = "MGW (Media Gateway) interface" },
 	{ .name = "mncc", .tdefs = mncc_tdefs, .desc = "MNCC (Mobile Network Call Control) interface" },
 	{ .name = "sccp", .tdefs = g_sccp_tdefs, .desc = "SCCP (Signalling Connection Control Part)" },
diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c
index b164fd8..a1489f2 100644
--- a/src/libvlr/vlr.c
+++ b/src/libvlr/vlr.c
@@ -23,6 +23,7 @@
 #include <osmocom/core/fsm.h>
 #include <osmocom/core/utils.h>
 #include <osmocom/core/timer.h>
+#include <osmocom/core/tdef.h>
 #include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
 #include <osmocom/gsm/gsup.h>
 #include <osmocom/gsm/apn.h>
@@ -61,24 +62,20 @@
 	{ 0, NULL }
 };
 
+/* 3GPP TS 24.008, table 11.2 Mobility management timers (network-side) */
+struct osmo_tdef msc_tdefs_vlr[] = {
+	/* TODO: also define T3212 here */
+	{ .T = 3250, .default_val = 12, .desc = "TMSI Reallocation procedure" },
+	{ .T = 3260, .default_val = 12, .desc = "Authentication procedure" },
+	{ .T = 3270, .default_val = 12, .desc = "Identification procedure" },
+	{ /* terminator */ }
+};
+
+/* This is just a wrapper around the osmo_tdef API.
+ * TODO: we should start using osmo_tdef_fsm_inst_state_chg() */
 uint32_t vlr_timer(struct vlr_instance *vlr, uint32_t timer)
 {
-	uint32_t tidx = 0xffffffff;
-
-	switch (timer) {
-	case 3270:
-		tidx = VLR_T_3270;
-		break;
-	case 3260:
-		tidx = VLR_T_3260;
-		break;
-	case 3250:
-		tidx = VLR_T_3250;
-		break;
-	}
-
-	OSMO_ASSERT(tidx < sizeof(vlr->cfg.timer));
-	return vlr->cfg.timer[tidx];
+	return osmo_tdef_get(msc_tdefs_vlr, timer, OSMO_TDEF_S, 0);
 }
 
 /* return static buffer with printable name of VLR subscriber */