vty: replace'logging level' numeric value with human readable string
diff --git a/openbsc/include/openbsc/debug.h b/openbsc/include/openbsc/debug.h
index f9c4afd..c40eec3 100644
--- a/openbsc/include/openbsc/debug.h
+++ b/openbsc/include/openbsc/debug.h
@@ -118,6 +118,8 @@
 void debug_set_print_timestamp(struct debug_target *target, int);
 void debug_set_log_level(struct debug_target *target, int log_level);
 void debug_parse_category_mask(struct debug_target *target, const char* mask);
+int debug_parse_level(const char *lvl);
+int debug_parse_category(const char *category);
 void debug_set_category_filter(struct debug_target *target, int category, int enable, int level);
 
 
diff --git a/openbsc/src/vty_interface.c b/openbsc/src/vty_interface.c
index 51c8028..59865d5 100644
--- a/openbsc/src/vty_interface.c
+++ b/openbsc/src/vty_interface.c
@@ -958,14 +958,17 @@
 	return CMD_SUCCESS;
 }
 
+/* FIXME: those have to be kept in sync with the log levels and categories */
 #define VTY_DEBUG_CATEGORIES "(rll|cc|mm|rr|rsl|nm|sms|pag|mncc|inp|mi|mib|mux|meas|sccp|msc|mgcp|ho|db|ref)"
+#define VTY_DEBUG_LEVELS "(everything|debug|info|notice|error|fatal)"
 DEFUN(logging_level,
       logging_level_cmd,
-      "logging level " VTY_DEBUG_CATEGORIES " <0-8>",
+      "logging level " VTY_DEBUG_CATEGORIES " " VTY_DEBUG_LEVELS,
       "Set the log level for a specified category\n")
 {
 	struct telnet_connection *conn;
 	int category = debug_parse_category(argv[0]);
+	int level = debug_parse_level(argv[1]);
 
 	conn = (struct telnet_connection *) vty->priv;
 	if (!conn->dbg) {
@@ -978,8 +981,13 @@
 		return CMD_WARNING;
 	}
 
+	if (level < 0) {
+		vty_out(vty, "Invalid level `%s'%s", argv[1], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
 	conn->dbg->categories[category].enabled = 1;
-	conn->dbg->categories[category].loglevel = atoi(argv[1]);
+	conn->dbg->categories[category].loglevel = level;
 
 	return CMD_SUCCESS;
 }