Common router id.
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 05ad4db..e92147f 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-03 James R. Leu <jleu at mindspring.com>
+
+	* zclient.c, zclient.h: zclient functions for router id handling.
+	* zebra.h: New message types for router id handling.
+
 2004-09-27 Paul Jakma <paul@dishone.st>
 
 	* zebra.h: Add WANT_OSPF_WRITE_FRAGMENT for ospfd
diff --git a/lib/zclient.c b/lib/zclient.c
index 3b68338..5df420f 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -260,6 +260,9 @@
   /* We need interface information. */
   zebra_message_send (zclient, ZEBRA_INTERFACE_ADD);
 
+  /* We need router-id information. */
+  zebra_message_send (zclient, ZEBRA_ROUTER_ID_ADD);
+
   /* Flush all redistribute request. */
   for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
     if (i != zclient->redist_default && zclient->redist[i])
@@ -477,6 +480,20 @@
   return ret;
 }
 
+/* Router-id update from zebra daemon. */
+void
+zebra_router_id_update_read (struct stream *s, struct prefix *rid)
+{
+  int plen;
+
+  /* Fetch interface address. */
+  rid->family = stream_getc (s);
+
+  plen = prefix_blen (rid);
+  stream_get (&rid->u.prefix, s, plen);
+  rid->prefixlen = stream_getc (s);
+}
+
 /* Interface addition from zebra daemon. */
 /*  
  * The format of the message sent with type ZEBRA_INTERFACE_ADD or
@@ -614,6 +631,19 @@
  *
  */
 
+void
+zebra_interface_if_set_value (struct stream *s, struct interface *ifp)
+{
+  /* Read interface's index. */
+  ifp->ifindex = stream_getl (s);
+
+  /* Read interface's value. */
+  ifp->flags = stream_getl (s);
+  ifp->metric = stream_getl (s);
+  ifp->mtu = stream_getl (s);
+  ifp->bandwidth = stream_getl (s);
+}
+
 struct connected *
 zebra_interface_address_read (int type, struct stream *s)
 {
@@ -745,6 +775,10 @@
 
   switch (command)
     {
+    case ZEBRA_ROUTER_ID_UPDATE:
+      if (zclient->router_id_update)
+	ret = (*zclient->router_id_update) (command, zclient, length);
+      break;
     case ZEBRA_INTERFACE_ADD:
       if (zclient->interface_add)
 	ret = (*zclient->interface_add) (command, zclient, length);
diff --git a/lib/zclient.h b/lib/zclient.h
index da8d016..03a6e0a 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -62,6 +62,7 @@
   u_char default_information;
 
   /* Pointer to the callback functions. */
+  int (*router_id_update) (int, struct zclient *, zebra_size_t);
   int (*interface_add) (int, struct zclient *, zebra_size_t);
   int (*interface_delete) (int, struct zclient *, zebra_size_t);
   int (*interface_up) (int, struct zclient *, zebra_size_t);
@@ -119,6 +120,8 @@
 struct interface *zebra_interface_add_read (struct stream *);
 struct interface *zebra_interface_state_read (struct stream *s);
 struct connected *zebra_interface_address_read (int, struct stream *);
+void zebra_interface_if_set_value (struct stream *, struct interface *);
+void zebra_router_id_update_read (struct stream *s, struct prefix *rid);
 int zapi_ipv4_route (u_char, struct zclient *, struct prefix_ipv4 *, 
                      struct zapi_ipv4 *);
 
diff --git a/lib/zebra.h b/lib/zebra.h
index e53a40c..0b8b654 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -314,7 +314,10 @@
 #define ZEBRA_IPV4_IMPORT_LOOKUP          17
 #define ZEBRA_IPV6_IMPORT_LOOKUP          18
 #define ZEBRA_INTERFACE_RENAME            19
-#define ZEBRA_MESSAGE_MAX                 20
+#define ZEBRA_ROUTER_ID_ADD               20
+#define ZEBRA_ROUTER_ID_DELETE            21
+#define ZEBRA_ROUTER_ID_UPDATE            22
+#define ZEBRA_MESSAGE_MAX                 23
 
 /* Zebra route's types. */
 #define ZEBRA_ROUTE_SYSTEM               0