]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: implement the 'if-state-change' notification
authorEmanuele Di Pascale <emanuele@voltanet.io>
Wed, 14 Nov 2018 14:04:51 +0000 (15:04 +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_circuit.c
isisd/isis_northbound.c
isisd/isisd.h

index 11fad92f40a4cbc2cb4b8f46a4bd5de2fdff069c..ad4f40467772faa6257b37d0f435f2cb70a1f53a 100644 (file)
@@ -667,11 +667,21 @@ int isis_circuit_up(struct isis_circuit *circuit)
 
        circuit->tx_queue = isis_tx_queue_new(circuit, send_lsp);
 
+#ifndef FABRICD
+       /* send northbound notification */
+       isis_notif_if_state_change(circuit, false);
+#endif /* ifndef FABRICD */
+
        return ISIS_OK;
 }
 
 void isis_circuit_down(struct isis_circuit *circuit)
 {
+#ifndef FABRICD
+       /* send northbound notification */
+       isis_notif_if_state_change(circuit, true);
+#endif /* ifndef FABRICD */
+
        /* Clear the flags for all the lsps of the circuit. */
        isis_circuit_update_all_srmflags(circuit, 0);
 
index de380876a7194c1f10f5c5237f43a5a8b0797dff..d5eac45eb94fa44796d3b87ca004848384567f40 100644 (file)
@@ -2529,6 +2529,27 @@ void isis_notif_lsp_too_large(const struct isis_circuit *circuit,
        nb_notification_send(xpath, arguments);
 }
 
+/*
+ * XPath:
+ * /frr-isisd:if-state-change
+ */
+void isis_notif_if_state_change(const struct isis_circuit *circuit, bool down)
+{
+       const char *xpath = "/frr-isisd:if-state-change";
+       struct list *arguments = yang_data_list_new();
+       char xpath_arg[XPATH_MAXLEN];
+       struct yang_data *data;
+       struct isis_area *area = circuit->area;
+
+       notif_prep_instance_hdr(xpath, area, "default", arguments);
+       notif_prepr_iface_hdr(xpath, circuit, arguments);
+       snprintf(xpath_arg, sizeof(xpath_arg), "%s/state", xpath);
+       data = yang_data_new_enum(xpath_arg, !!down);
+       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 c5f3f37341f2251ea5bb5de60f186c05ef2f7954..05a25e660288dcf0aa5b99dd7ad8b93aa6e3f12c 100644 (file)
@@ -225,6 +225,8 @@ extern void isis_northbound_init(void);
 extern void isis_notif_db_overload(const struct isis_area *area, bool overload);
 extern void isis_notif_lsp_too_large(const struct isis_circuit *circuit,
                                     uint32_t pdu_size, const char *lsp_id);
+extern void isis_notif_if_state_change(const struct isis_circuit *circuit,
+                                      bool down);
 /* Master of threads. */
 extern struct thread_master *master;