[zserv] fix up custom isisd and bgpd Zserv functions for new format.

2006-01-17 Paul Jakma <paul.jakma@sun.com>

	* bgp_nexthop.c: (zlookup_read*) convert to new Zserv format.
	  (zlookup_query_ipv6) ditto.
	  (bgp_import_check) ditto.
	* isis_zebra.c: (isis_zebra_route_add_ipv4) fix for new
	  zserv format.
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index b555334..234ecb5 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-17 Paul Jakma <paul.jakma@sun.com>
+
+	* bgp_nexthop.c: (zlookup_read*) convert to new Zserv format.
+	  (zlookup_query_ipv6) ditto.
+	  (bgp_import_check) ditto.
+	  
 2006-01-16 Paul Jakma <paul.jakma@sun.com>
 
 	* bgp_aspath.c: (assegment_append_asns) XREALLOC can return
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c
index 1f6fef8..ba1752f 100644
--- a/bgpd/bgp_nexthop.c
+++ b/bgpd/bgp_nexthop.c
@@ -738,11 +738,13 @@
 zlookup_read ()
 {
   struct stream *s;
-  u_int16_t length;
-  u_char command;
+  uint16_t length;
+  u_char marker;
+  u_char version;
+  uint16_t command;
   int nbytes;
   struct in_addr raddr;
-  u_int32_t metric;
+  uint32_t metric;
   int i;
   u_char nexthop_num;
   struct nexthop *nexthop;
@@ -755,7 +757,18 @@
   length = stream_getw (s);
 
   nbytes = stream_read (s, zlookup->sock, length - 2);
-  command = stream_getc (s);
+  marker = stream_getc (s);
+  version = stream_getc (s);
+  
+  if (version != ZSERV_VERSION || marker != ZEBRA_HEADER_MARKER)
+    {
+      zlog_err("%s: socket %d version mismatch, marker %d, version %d",
+               __func__, zlookup->sock, marker, version);
+      return NULL;
+    }
+    
+  command = stream_getw (s);
+  
   raddr.s_addr = stream_get_ipv4 (s);
   metric = stream_getl (s);
   nexthop_num = stream_getc (s);
@@ -806,11 +819,12 @@
 
   s = zlookup->obuf;
   stream_reset (s);
-  stream_putw (s, 7);
-  stream_putc (s, ZEBRA_IPV4_NEXTHOP_LOOKUP);
+  zclient_create_header (s, ZEBRA_IPV4_NEXTHOP_LOOKUP);
   stream_put_in_addr (s, &addr);
-
-  ret = writen (zlookup->sock, s->data, 7);
+  
+  stream_putw_at (s, 0, stream_get_endp (s));
+  
+  ret = writen (zlookup->sock, s->data, stream_get_endp (s));
   if (ret < 0)
     {
       zlog_err ("can't write to zlookup->sock");
@@ -834,11 +848,12 @@
 zlookup_read_ipv6 ()
 {
   struct stream *s;
-  u_int16_t length;
-  u_char command;
+  uint16_t length;
+  u_char version, marker;
+  uint16_t  command;
   int nbytes;
   struct in6_addr raddr;
-  u_int32_t metric;
+  uint32_t metric;
   int i;
   u_char nexthop_num;
   struct nexthop *nexthop;
@@ -851,8 +866,18 @@
   length = stream_getw (s);
 
   nbytes = stream_read (s, zlookup->sock, length - 2);
-  command = stream_getc (s);
-
+  marker = stream_getc (s);
+  version = stream_getc (s);
+  
+  if (version != ZSERV_VERSION || marker != ZEBRA_HEADER_MARKER)
+    {
+      zlog_err("%s: socket %d version mismatch, marker %d, version %d",
+               __func__, zlookup->sock, marker, version);
+      return NULL;
+    }
+    
+  command = stream_getw (s);
+  
   stream_get (&raddr, s, 16);
 
   metric = stream_getl (s);
@@ -909,11 +934,11 @@
 
   s = zlookup->obuf;
   stream_reset (s);
-  stream_putw (s, 19);
-  stream_putc (s, ZEBRA_IPV6_NEXTHOP_LOOKUP);
+  zclient_create_header (s, ZEBRA_IPV6_NEXTHOP_LOOKUP);
   stream_put (s, addr, 16);
-
-  ret = writen (zlookup->sock, s->data, 19);
+  stream_putw_at (s, 0, stream_get_endp (s));
+  
+  ret = writen (zlookup->sock, s->data, stream_get_endp (s));
   if (ret < 0)
     {
       zlog_err ("can't write to zlookup->sock");
@@ -939,8 +964,8 @@
 {
   struct stream *s;
   int ret;
-  u_int16_t length;
-  u_char command;
+  u_int16_t length, command;
+  u_char version, marker;
   int nbytes;
   struct in_addr addr;
   struct in_addr nexthop;
@@ -959,13 +984,15 @@
   /* Send query to the lookup connection */
   s = zlookup->obuf;
   stream_reset (s);
-  stream_putw (s, 8);
-  stream_putc (s, ZEBRA_IPV4_IMPORT_LOOKUP);
+  zclient_create_header (s, ZEBRA_IPV4_IMPORT_LOOKUP);
+  
   stream_putc (s, p->prefixlen);
   stream_put_in_addr (s, &p->u.prefix4);
-
+  
+  stream_putw_at (s, 0, stream_get_endp (s));
+  
   /* Write the packet. */
-  ret = writen (zlookup->sock, s->data, 8);
+  ret = writen (zlookup->sock, s->data, stream_get_endp (s));
 
   if (ret < 0)
     {
@@ -991,7 +1018,18 @@
 
   /* Fetch whole data. */
   nbytes = stream_read (s, zlookup->sock, length - 2);
-  command = stream_getc (s);
+  marker = stream_getc (s);
+  version = stream_getc (s);
+
+  if (version != ZSERV_VERSION || marker != ZEBRA_HEADER_MARKER)
+    {
+      zlog_err("%s: socket %d version mismatch, marker %d, version %d",
+               __func__, zlookup->sock, marker, version);
+      return 0;
+    }
+    
+  command = stream_getw (s);
+  
   addr.s_addr = stream_get_ipv4 (s);
   metric = stream_getl (s);
   nexthop_num = stream_getc (s);
diff --git a/isisd/ChangeLog b/isisd/ChangeLog
index fa2a13a..5e203c8 100644
--- a/isisd/ChangeLog
+++ b/isisd/ChangeLog
@@ -1,3 +1,8 @@
+2006-01-17 Paul Jakma <paul.jakma@sun.com>
+
+	* isis_zebra.c: (isis_zebra_route_add_ipv4) fix for new
+	  zserv format.
+
 2005-11-20 Paul Jakma <paul.jakma@sun.com>
 
         * (general) remove includes of very common system headers,
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index aff6a71..4631cc7 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -267,10 +267,7 @@
 
       stream = zclient->obuf;
       stream_reset (stream);
-      /* Length place holder. */
-      stream_putw (stream, 0);
-      /* command */
-      stream_putc (stream, ZEBRA_IPV4_ROUTE_ADD);
+      zclient_create_header (stream, ZEBRA_IPV4_ROUTE_ADD);
       /* type */
       stream_putc (stream, ZEBRA_ROUTE_ISIS);
       /* flags */