summaryrefslogtreecommitdiff
path: root/lib/zclient.c
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <Jafaral@users.noreply.github.com>2019-10-14 01:07:24 -0500
committerGitHub <noreply@github.com>2019-10-14 01:07:24 -0500
commitd563896dada99f3474d428f928786cbfde936fee (patch)
treebfb366c123c96cfc0b086803628b45dc2d2d6b05 /lib/zclient.c
parent09ea1a40386f02a13cdb0462cc55af0d03f0c277 (diff)
parent40e79e94110c772bfb71b97b1d97e8ad35901b88 (diff)
Merge pull request #4885 from satheeshkarra/pim_mlag
pimd, lib, Zebra: PIM MLAG Support
Diffstat (limited to 'lib/zclient.c')
-rw-r--r--lib/zclient.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/zclient.c b/lib/zclient.c
index 91dbe30a09..5e23a5cc33 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -2717,6 +2717,63 @@ stream_failure:
return;
}
+void zclient_send_mlag_register(struct zclient *client, uint32_t bit_map)
+{
+ struct stream *s;
+
+ s = client->obuf;
+ stream_reset(s);
+
+ zclient_create_header(s, ZEBRA_MLAG_CLIENT_REGISTER, VRF_DEFAULT);
+ stream_putl(s, bit_map);
+
+ stream_putw_at(s, 0, stream_get_endp(s));
+ zclient_send_message(client);
+}
+
+void zclient_send_mlag_deregister(struct zclient *client)
+{
+ zebra_message_send(client, ZEBRA_MLAG_CLIENT_UNREGISTER, VRF_DEFAULT);
+}
+
+void zclient_send_mlag_data(struct zclient *client, struct stream *client_s)
+{
+ struct stream *s;
+
+ s = client->obuf;
+ stream_reset(s);
+
+ zclient_create_header(s, ZEBRA_MLAG_FORWARD_MSG, VRF_DEFAULT);
+ stream_put(s, client_s->data, client_s->endp);
+
+ stream_putw_at(s, 0, stream_get_endp(s));
+ zclient_send_message(client);
+}
+
+static void zclient_mlag_process_up(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
+{
+ if (zclient->mlag_process_up)
+ (*zclient->mlag_process_up)();
+
+}
+
+static void zclient_mlag_process_down(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
+{
+ if (zclient->mlag_process_down)
+ (*zclient->mlag_process_down)();
+
+}
+
+static void zclient_mlag_handle_msg(int command, struct zclient *zclient,
+ zebra_size_t length, vrf_id_t vrf_id)
+{
+ if (zclient->mlag_handle_msg)
+ (*zclient->mlag_handle_msg)(zclient->ibuf, length);
+
+}
+
/* Zebra client message read function. */
static int zclient_read(struct thread *thread)
{
@@ -3011,6 +3068,15 @@ static int zclient_read(struct thread *thread)
(*zclient->vxlan_sg_del)(command, zclient, length,
vrf_id);
break;
+ case ZEBRA_MLAG_PROCESS_UP:
+ zclient_mlag_process_up(command, zclient, length, vrf_id);
+ break;
+ case ZEBRA_MLAG_PROCESS_DOWN:
+ zclient_mlag_process_down(command, zclient, length, vrf_id);
+ break;
+ case ZEBRA_MLAG_FORWARD_MSG:
+ zclient_mlag_handle_msg(command, zclient, length, vrf_id);
+ break;
default:
break;
}