summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2020-04-20 22:59:38 +0200
committerMark Stapp <mjs@voltanet.io>2020-06-02 14:22:24 +0200
commit6e2a33a84391e6e49ab5da76293ebb90e2efca7a (patch)
treefc0645f286adea407b83c6243c3881710a8185b6
parentsharpd: send opaque message registrations (diff)
downloadfrr-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.c19
-rw-r--r--zebra/zserv.h11
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