[gprs] BSSGP: convert cause strings to value_string
diff --git a/openbsc/src/gprs_bssgp.c b/openbsc/src/gprs_bssgp.c
index 44e0a35..4b58213 100644
--- a/openbsc/src/gprs_bssgp.c
+++ b/openbsc/src/gprs_bssgp.c
@@ -43,41 +43,42 @@
 
 void *bssgp_tall_ctx = NULL;
 
+/* BSSGP Protocol specific, not implementation specific */
+/* FIXME: This needs to go into libosmocore after finished */
+
 /* Chapter 11.3.9 / Table 11.10: Cause coding */
-static const char *bssgp_cause_strings[] = {
-	[BSSGP_CAUSE_PROC_OVERLOAD]	= "Processor overload",
-	[BSSGP_CAUSE_EQUIP_FAIL]	= "Equipment Failure",
-	[BSSGP_CAUSE_TRASIT_NET_FAIL]	= "Transit netowkr service failure",
-	[BSSGP_CAUSE_CAPA_GREATER_0KPBS]= "Transmission capacity modified",
-	[BSSGP_CAUSE_UNKNOWN_MS]	= "Unknown MS",
-	[BSSGP_CAUSE_UNKNOWN_BVCI]	= "Unknown BVCI",
-	[BSSGP_CAUSE_CELL_TRAF_CONG]	= "Cell traffic congestion",
-	[BSSGP_CAUSE_SGSN_CONG]		= "SGSN congestion",
-	[BSSGP_CAUSE_OML_INTERV]	= "O&M intervention",
-	[BSSGP_CAUSE_BVCI_BLOCKED]	= "BVCI blocked",
-	[BSSGP_CAUSE_PFC_CREATE_FAIL]	= "PFC create failure",
-	[BSSGP_CAUSE_SEM_INCORR_PDU]	= "Semantically incorrect PDU",
-	[BSSGP_CAUSE_INV_MAND_INF]	= "Invalid mandatory information",
-	[BSSGP_CAUSE_MISSING_MAND_IE]	= "Missing mandatory IE",
-	[BSSGP_CAUSE_MISSING_COND_IE]	= "Missing conditional IE",
-	[BSSGP_CAUSE_UNEXP_COND_IE]	= "Unexpected conditional IE",
-	[BSSGP_CAUSE_COND_IE_ERR]	= "Conditional IE error",
-	[BSSGP_CAUSE_PDU_INCOMP_STATE]	= "PDU incompatible with protocol state",
-	[BSSGP_CAUSE_PROTO_ERR_UNSPEC]	= "Protocol error - unspecified",
-	[BSSGP_CAUSE_PDU_INCOMP_FEAT]	= "PDU not compatible with feature set",
+static const struct value_string bssgp_cause_strings[] = {
+	{ BSSGP_CAUSE_PROC_OVERLOAD,	"Processor overload" },
+	{ BSSGP_CAUSE_EQUIP_FAIL,	"Equipment Failure" },
+	{ BSSGP_CAUSE_TRASIT_NET_FAIL,	"Transit netowkr service failure" },
+	{ BSSGP_CAUSE_CAPA_GREATER_0KPBS,"Transmission capacity modified" },
+	{ BSSGP_CAUSE_UNKNOWN_MS,	"Unknown MS" },
+	{ BSSGP_CAUSE_UNKNOWN_BVCI,	"Unknown BVCI" },
+	{ BSSGP_CAUSE_CELL_TRAF_CONG,	"Cell traffic congestion" },
+	{ BSSGP_CAUSE_SGSN_CONG,	"SGSN congestion" },
+	{ BSSGP_CAUSE_OML_INTERV,	"O&M intervention" },
+	{ BSSGP_CAUSE_BVCI_BLOCKED,	"BVCI blocked" },
+	{ BSSGP_CAUSE_PFC_CREATE_FAIL,	"PFC create failure" },
+	{ BSSGP_CAUSE_SEM_INCORR_PDU,	"Semantically incorrect PDU" },
+	{ BSSGP_CAUSE_INV_MAND_INF,	"Invalid mandatory information" },
+	{ BSSGP_CAUSE_MISSING_MAND_IE,	"Missing mandatory IE" },
+	{ BSSGP_CAUSE_MISSING_COND_IE,	"Missing conditional IE" },
+	{ BSSGP_CAUSE_UNEXP_COND_IE,	"Unexpected conditional IE" },
+	{ BSSGP_CAUSE_COND_IE_ERR,	"Conditional IE error" },
+	{ BSSGP_CAUSE_PDU_INCOMP_STATE,	"PDU incompatible with protocol state" },
+	{ BSSGP_CAUSE_PROTO_ERR_UNSPEC,	"Protocol error - unspecified" },
+	{ BSSGP_CAUSE_PDU_INCOMP_FEAT, 	"PDU not compatible with feature set" },
+	{ 0, NULL },
 };
 
-static const char *bssgp_cause_str(enum gprs_bssgp_cause cause)
+const char *bssgp_cause_str(enum gprs_bssgp_cause cause)
 {
-	if (cause >= ARRAY_SIZE(bssgp_cause_strings))
-		return "undefined";
-
-	if (bssgp_cause_strings[cause])
-		return bssgp_cause_strings[cause];
-
-	return "undefined";
+	return get_value_string(bssgp_cause_strings, cause);
 }
 
+
+/* Our actual implementation */
+
 #define BVC_F_BLOCKED	0x0001
 
 /* The per-BTS context that we keep on the SGSN side of the BSSGP link */