From 6e2a33a84391e6e49ab5da76293ebb90e2efca7a Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Mon, 20 Apr 2020 16:59:38 -0400 Subject: [PATCH] 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 --- zebra/zserv.c | 19 +++++++++++++++++++ zebra/zserv.h | 11 +++++++++++ 2 files changed, 30 insertions(+) diff --git a/zebra/zserv.c b/zebra/zserv.c index 26023173b5..cb863b258c 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 b943c246c6..f2a4523818 100644 --- a/zebra/zserv.h +++ b/zebra/zserv.h @@ -281,6 +281,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. * -- 2.39.5