[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/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);