lib: put route_types.txt to real use

this replaces most occurences of routing protocol lists by preprocessor
defines from route_types.h. the latter is autogenerated from
route_types.txt by a perl script (previously awk). adding a routing
protocol now is mostly a matter of changing route_types.txt and log.c.

Conflicts:

	lib/route_types.awk
diff --git a/lib/log.c b/lib/log.c
index 4afe922..7edc5c4 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -20,6 +20,8 @@
  * 02111-1307, USA.  
  */
 
+#define QUAGGA_DEFINE_DESC_TABLE
+
 #include <zebra.h>
 
 #include "log.h"
@@ -817,29 +819,6 @@
   return (s != NULL) ? s : "Unknown error";
 }
 
-struct zebra_desc_table
-{
-  unsigned int type;
-  const char *string;
-  char chr;
-};
-
-#define DESC_ENTRY(T,S,C) [(T)] = { (T), (S), (C) }
-static const struct zebra_desc_table route_types[] = {
-  DESC_ENTRY	(ZEBRA_ROUTE_SYSTEM,	"system",	'X' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_KERNEL,	"kernel",	'K' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_CONNECT,	"connected",	'C' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_STATIC,	"static",	'S' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_RIP,	"rip",		'R' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_RIPNG,	"ripng",	'R' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_OSPF,	"ospf",		'O' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_OSPF6,	"ospf6",	'O' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_ISIS,	"isis",		'I' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_BGP,	"bgp",		'B' ),
-  DESC_ENTRY	(ZEBRA_ROUTE_HSLS,	"hsls",		'H' ),
-};
-#undef DESC_ENTRY
-
 #define DESC_ENTRY(T) [(T)] = { (T), (#T), '\0' }
 static const struct zebra_desc_table command_types[] = {
   DESC_ENTRY	(ZEBRA_INTERFACE_ADD),
@@ -929,4 +908,48 @@
        return route_types[i].type;
    return -1;
 }
+
 #undef RTSIZE
+
+int
+proto_redistnum(int afi, const char *s)
+{
+  if (! s)
+    return -1;
+
+  if (afi == AFI_IP)
+    {
+      if (strncmp (s, "k", 1) == 0)
+	return ZEBRA_ROUTE_KERNEL;
+      else if (strncmp (s, "c", 1) == 0)
+	return ZEBRA_ROUTE_CONNECT;
+      else if (strncmp (s, "s", 1) == 0)
+	return ZEBRA_ROUTE_STATIC;
+      else if (strncmp (s, "r", 1) == 0)
+	return ZEBRA_ROUTE_RIP;
+      else if (strncmp (s, "o", 1) == 0)
+	return ZEBRA_ROUTE_OSPF;
+      else if (strncmp (s, "i", 1) == 0)
+	return ZEBRA_ROUTE_ISIS;
+      else if (strncmp (s, "b", 1) == 0)
+	return ZEBRA_ROUTE_BGP;
+    }
+  if (afi == AFI_IP6)
+    {
+      if (strncmp (s, "k", 1) == 0)
+	return ZEBRA_ROUTE_KERNEL;
+      else if (strncmp (s, "c", 1) == 0)
+	return ZEBRA_ROUTE_CONNECT;
+      else if (strncmp (s, "s", 1) == 0)
+	return ZEBRA_ROUTE_STATIC;
+      else if (strncmp (s, "r", 1) == 0)
+	return ZEBRA_ROUTE_RIPNG;
+      else if (strncmp (s, "o", 1) == 0)
+	return ZEBRA_ROUTE_OSPF6;
+      else if (strncmp (s, "i", 1) == 0)
+	return ZEBRA_ROUTE_ISIS;
+      else if (strncmp (s, "b", 1) == 0)
+	return ZEBRA_ROUTE_BGP;
+    }
+  return -1;
+}