From 9414b6f662924ced2349e7b14105612f85213b97 Mon Sep 17 00:00:00 2001 From: Emanuele Di Pascale Date: Wed, 14 Nov 2018 14:55:48 +0100 Subject: [PATCH] isisd: implement the 'database-overload' notification Signed-off-by: Emanuele Di Pascale --- isisd/isis_northbound.c | 42 +++++++++++++++++++++++++++++++++++++++++ isisd/isisd.c | 3 +++ isisd/isisd.h | 3 +++ 3 files changed, 48 insertions(+) diff --git a/isisd/isis_northbound.c b/isisd/isis_northbound.c index 93998cda8..657cc0027 100644 --- a/isisd/isis_northbound.c +++ b/isisd/isis_northbound.c @@ -2443,6 +2443,48 @@ static int lib_interface_isis_multi_topology_ipv6_dstsrc_modify( ISIS_MT_IPV6_DSTSRC); } +/* + * NOTIFICATIONS + */ +static void notif_prep_instance_hdr(const char *xpath, + const struct isis_area *area, + const char *routing_instance, + struct list *args) +{ + char xpath_arg[XPATH_MAXLEN]; + struct yang_data *data; + + snprintf(xpath_arg, sizeof(xpath_arg), "%s/routing-instance", xpath); + data = yang_data_new_string(xpath_arg, routing_instance); + listnode_add(args, data); + snprintf(xpath_arg, sizeof(xpath_arg), "%s/routing-protocol-name", + xpath); + data = yang_data_new_string(xpath_arg, area->area_tag); + listnode_add(args, data); + snprintf(xpath_arg, sizeof(xpath_arg), "%s/isis-level", xpath); + data = yang_data_new_enum(xpath_arg, area->is_type); + listnode_add(args, data); +} + +/* + * XPath: + * /frr-isisd:database-overload + */ +void isis_notif_db_overload(const struct isis_area *area, bool overload) +{ + const char *xpath = "/frr-isisd:database-overload"; + struct list *arguments = yang_data_list_new(); + char xpath_arg[XPATH_MAXLEN]; + struct yang_data *data; + + notif_prep_instance_hdr(xpath, area, "default", arguments); + snprintf(xpath_arg, sizeof(xpath_arg), "%s/overload", xpath); + data = yang_data_new_enum(xpath_arg, !!overload); + listnode_add(arguments, data); + + nb_notification_send(xpath, arguments); +} + /* clang-format off */ const struct frr_yang_module_info frr_isisd_info = { .name = "frr-isisd", diff --git a/isisd/isisd.c b/isisd/isisd.c index 7b60f619d..f9b202c3a 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -1763,6 +1763,9 @@ void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit) area->overload_bit = new_overload_bit; lsp_regenerate_schedule(area, IS_LEVEL_1 | IS_LEVEL_2, 1); } +#ifndef FABRICD + isis_notif_db_overload(area, overload_bit); +#endif /* ifndef FABRICD */ } void isis_area_attached_bit_set(struct isis_area *area, bool attached_bit) diff --git a/isisd/isisd.h b/isisd/isisd.h index ff09db8ea..73f91bde0 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -220,6 +220,9 @@ int isis_area_passwd_hmac_md5_set(struct isis_area *area, int level, extern const struct frr_yang_module_info frr_isisd_info; extern void isis_northbound_init(void); + +/* YANG northbound notifications */ +extern void isis_notif_db_overload(const struct isis_area *area, bool overload); /* Master of threads. */ extern struct thread_master *master; -- 2.39.2