summaryrefslogtreecommitdiff
path: root/lib/zclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/zclient.c')
-rw-r--r--lib/zclient.c37
1 files changed, 31 insertions, 6 deletions
diff --git a/lib/zclient.c b/lib/zclient.c
index 5ca5849948..dde60a6c90 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -1105,6 +1105,33 @@ stream_failure:
return -1;
}
+int zapi_srv6_locator_encode(struct stream *s, const struct srv6_locator *l)
+{
+ stream_putw(s, strlen(l->name));
+ stream_put(s, l->name, strlen(l->name));
+ stream_putw(s, l->prefix.prefixlen);
+ stream_put(s, &l->prefix.prefix, sizeof(l->prefix.prefix));
+ return 0;
+}
+
+int zapi_srv6_locator_decode(struct stream *s, struct srv6_locator *l)
+{
+ uint16_t len = 0;
+
+ STREAM_GETW(s, len);
+ if (len > SRV6_LOCNAME_SIZE)
+ goto stream_failure;
+
+ STREAM_GET(l->name, s, len);
+ STREAM_GETW(s, l->prefix.prefixlen);
+ STREAM_GET(&l->prefix.prefix, s, sizeof(l->prefix.prefix));
+ l->prefix.family = AF_INET6;
+ return 0;
+
+stream_failure:
+ return -1;
+}
+
static int zapi_nhg_encode(struct stream *s, int cmd, struct zapi_nhg *api_nhg)
{
int i;
@@ -4487,11 +4514,9 @@ static int zclient_neigh_ip_read_entry(struct stream *s, struct ipaddr *add)
return -1;
}
-int zclient_neigh_ip_encode(struct stream *s,
- uint16_t cmd,
- union sockunion *in,
- union sockunion *out,
- struct interface *ifp)
+int zclient_neigh_ip_encode(struct stream *s, uint16_t cmd, union sockunion *in,
+ union sockunion *out, struct interface *ifp,
+ int ndm_state)
{
int ret = 0;
@@ -4506,7 +4531,7 @@ int zclient_neigh_ip_encode(struct stream *s,
stream_putc(s, AF_UNSPEC);
stream_putl(s, ifp->ifindex);
if (out)
- stream_putl(s, ZEBRA_NEIGH_STATE_REACHABLE);
+ stream_putl(s, ndm_state);
else
stream_putl(s, ZEBRA_NEIGH_STATE_FAILED);
return ret;