summaryrefslogtreecommitdiff
path: root/ospfd/ospf_zebra.c
diff options
context:
space:
mode:
authorKaren Schoener <karen@voltanet.io>2020-12-08 09:44:27 -0500
committerKaren Schoener <karen@volta.io>2020-12-09 08:41:42 -0500
commitcb135cc94303d2581987645f124bd6d4cecd80a6 (patch)
tree5dd374ddd2105b3a82439ec1c4e8ea686b5e55d0 /ospfd/ospf_zebra.c
parentb64e1733746a2cabb5b25b283407c095fc1c8c3a (diff)
isisd, ospfd: IGPs detect LDP down via zapi client close message
When ldp-sync is configured, IGPs take action if the LDP process goes down. Currently, IGPs detect the LDP process is down if they do not receive a periodic 'hello' message from LDP within 1 second. Intermittently, this heartbeat mechanism causes false topotest failures. When the failure occurs, LDP is busy receiving messages from zebra for a few seconds. During this time, LDP does not send the expected periodic message. With this change, IGPs detect LDP down via zapi client close message. Signed-off-by: Karen Schoener <karen@voltanet.io>
Diffstat (limited to 'ospfd/ospf_zebra.c')
-rw-r--r--ospfd/ospf_zebra.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index e7dbdbd9af..93d4ee0ec7 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -1986,6 +1986,20 @@ stream_failure:
return ret;
}
+static int ospf_zebra_client_close_notify(ZAPI_CALLBACK_ARGS)
+{
+ int ret = 0;
+
+ struct zapi_client_close_info info;
+
+ if (zapi_client_close_notify_decode(zclient->ibuf, &info) < 0)
+ return -1;
+
+ ospf_ldp_sync_handle_client_close(&info);
+
+ return ret;
+}
+
void ospf_zebra_init(struct thread_master *master, unsigned short instance)
{
/* Allocate zebra structure. */
@@ -2021,6 +2035,8 @@ void ospf_zebra_init(struct thread_master *master, unsigned short instance)
prefix_list_delete_hook(ospf_prefix_list_update);
zclient->opaque_msg_handler = ospf_opaque_msg_handler;
+
+ zclient->zebra_client_close_notify = ospf_zebra_client_close_notify;
}
void ospf_zebra_send_arp(const struct interface *ifp, const struct prefix *p)