summaryrefslogtreecommitdiff
path: root/sharpd/sharp_zebra.c
diff options
context:
space:
mode:
Diffstat (limited to 'sharpd/sharp_zebra.c')
-rw-r--r--sharpd/sharp_zebra.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/sharpd/sharp_zebra.c b/sharpd/sharp_zebra.c
index 34cc1a4b5a..6ebc04b9eb 100644
--- a/sharpd/sharp_zebra.c
+++ b/sharpd/sharp_zebra.c
@@ -483,16 +483,16 @@ static int sharp_redistribute_route(ZAPI_CALLBACK_ARGS)
/* Handler for opaque messages */
static int sharp_opaque_handler(ZAPI_CALLBACK_ARGS)
{
- uint32_t type;
struct stream *s;
+ struct zapi_opaque_msg info;
s = zclient->ibuf;
- STREAM_GETL(s, type);
-
- zlog_debug("%s: received opaque type %u", __func__, type);
+ if (zclient_opaque_decode(s, &info) != 0)
+ return -1;
-stream_failure:
+ zlog_debug("%s: [%d] received opaque type %u", __func__,
+ zclient->session_id, info.type);
return 0;
}
@@ -500,7 +500,8 @@ stream_failure:
/*
* Send OPAQUE messages, using subtype 'type'.
*/
-void sharp_opaque_send(uint32_t type, uint32_t count)
+void sharp_opaque_send(uint32_t type, uint32_t proto, uint32_t instance,
+ uint32_t session_id, uint32_t count)
{
uint8_t buf[32];
int ret;
@@ -514,9 +515,15 @@ void sharp_opaque_send(uint32_t type, uint32_t count)
buf[i] = 255;
}
- /* Send some messages */
+ /* Send some messages - broadcast and unicast are supported */
for (i = 0; i < count; i++) {
- ret = zclient_send_opaque(zclient, type, buf, sizeof(buf));
+ if (proto == 0)
+ ret = zclient_send_opaque(zclient, type, buf,
+ sizeof(buf));
+ else
+ ret = zclient_send_opaque_unicast(zclient, type, proto,
+ instance, session_id,
+ buf, sizeof(buf));
if (ret < 0) {
zlog_debug("%s: send_opaque() failed => %d",
__func__, ret);