zebra: ZEBRA_HELLO and mopping up routes (BZ#448)

ZEBRA_HELLO message is used by routing daemons to inform zebra
what type of routes daemon will be announcing to zebra. Also
zebra uses route_type_oaths array to track which daemon announces
which protocol. Zebra mops up routes if daemon didn't for some
reason.
diff --git a/lib/zclient.c b/lib/zclient.c
index a5d5b7f..37ee242 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -318,6 +318,25 @@
   return zclient_send_message(zclient);
 }
 
+static int
+zebra_hello_send (struct zclient *zclient)
+{
+  struct stream *s;
+
+  if (zclient->redist_default)
+    {
+      s = zclient->obuf;
+      stream_reset (s);
+
+      zclient_create_header (s, ZEBRA_HELLO);
+      stream_putc (s, zclient->redist_default);
+      stream_putw_at (s, 0, stream_get_endp (s));
+      return zclient_send_message(zclient);
+    }
+
+  return 0;
+}
+
 /* Make connection to zebra daemon. */
 int
 zclient_start (struct zclient *zclient)
@@ -359,6 +378,8 @@
   /* Create read thread. */
   zclient_event (ZCLIENT_READ, zclient);
 
+  zebra_hello_send (zclient);
+
   /* We need router-id information. */
   zebra_message_send (zclient, ZEBRA_ROUTER_ID_ADD);
 
diff --git a/lib/zebra.h b/lib/zebra.h
index 4b4c7c0..ab072d6 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -417,7 +417,8 @@
 #define ZEBRA_ROUTER_ID_ADD               20
 #define ZEBRA_ROUTER_ID_DELETE            21
 #define ZEBRA_ROUTER_ID_UPDATE            22
-#define ZEBRA_MESSAGE_MAX                 23
+#define ZEBRA_HELLO                       23
+#define ZEBRA_MESSAGE_MAX                 24
 
 /* Marker value used in new Zserv, in the byte location corresponding
  * the command value in the old zserv header. To allow old and new