diff options
author | Mark Stapp <mjs@voltanet.io> | 2020-04-20 22:59:38 +0200 |
---|---|---|
committer | Mark Stapp <mjs@voltanet.io> | 2020-06-02 14:22:24 +0200 |
commit | 6e2a33a84391e6e49ab5da76293ebb90e2efca7a (patch) | |
tree | fc0645f286adea407b83c6243c3881710a8185b6 | |
parent | sharpd: send opaque message registrations (diff) | |
download | frr-6e2a33a84391e6e49ab5da76293ebb90e2efca7a.tar.xz frr-6e2a33a84391e6e49ab5da76293ebb90e2efca7a.zip |
zebra: add zserv_send_batch api
Add a zserv api to send a batch (a fifo) of messages to a
zapi client.
Signed-off-by: Mark Stapp <mjs@voltanet.io>
-rw-r--r-- | zebra/zserv.c | 19 | ||||
-rw-r--r-- | zebra/zserv.h | 11 |
2 files changed, 30 insertions, 0 deletions
diff --git a/zebra/zserv.c b/zebra/zserv.c index 26023173b..cb863b258 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -544,6 +544,25 @@ int zserv_send_message(struct zserv *client, struct stream *msg) return 0; } +/* + * Send a batch of messages to a connected Zebra API client. + */ +int zserv_send_batch(struct zserv *client, struct stream_fifo *fifo) +{ + struct stream *msg; + + frr_with_mutex(&client->obuf_mtx) { + msg = stream_fifo_pop(fifo); + while (msg) { + stream_fifo_push(client->obuf_fifo, msg); + msg = stream_fifo_pop(fifo); + } + } + + zserv_client_event(client, ZSERV_CLIENT_WRITE); + + return 0; +} /* Hooks for client connect / disconnect */ DEFINE_HOOK(zserv_client_connect, (struct zserv *client), (client)); diff --git a/zebra/zserv.h b/zebra/zserv.h index b943c246c..f2a452381 100644 --- a/zebra/zserv.h +++ b/zebra/zserv.h @@ -282,6 +282,17 @@ extern void zserv_start(char *path); extern int zserv_send_message(struct zserv *client, struct stream *msg); /* + * Send a batch of messages to a connected Zebra API client. + * + * client + * the client to send to + * + * fifo + * the list of messages to send + */ +extern int zserv_send_batch(struct zserv *client, struct stream_fifo *fifo); + +/* * Retrieve a client by its protocol and instance number. * * proto |