]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: implement the 'database-overload' notification
authorEmanuele Di Pascale <emanuele@voltanet.io>
Wed, 14 Nov 2018 13:55:48 +0000 (14:55 +0100)
committerEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 18 Dec 2018 14:24:46 +0000 (15:24 +0100)
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
isisd/isis_northbound.c
isisd/isisd.c
isisd/isisd.h

index 93998cda89eb5169c98b9639c7a4de72ec65faea..657cc00277dafe61d846509450c08229dbc17325 100644 (file)
@@ -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",
index 7b60f619dd97372877d986cefbbee0c61a567cba..f9b202c3a7ea6851aeec5ea04dbfe4a578f36c8c 100644 (file)
@@ -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)
index ff09db8ea243105fa5005dd52d240d828562959f..73f91bde0184e8b52ca2b41894ef824e15df1cc3 100644 (file)
@@ -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;