diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index 8b2af9975c..658624370b 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -1274,6 +1274,12 @@ int lsp_generate(struct isis_area *area, int level) "ISIS (%s): Built L%d LSP. Set triggered regenerate to non-pending.", area->area_tag, level); +#ifndef FABRICD + /* send northbound notification */ + isis_notif_lsp_gen(area, rawlspid_print(newlsp->hdr.lsp_id), + newlsp->hdr.seqno, newlsp->last_generated); +#endif /* ifndef FABRICD */ + return ISIS_OK; } diff --git a/isisd/isis_northbound.c b/isisd/isis_northbound.c index bb6b23122d..ca694a95a6 100644 --- a/isisd/isis_northbound.c +++ b/isisd/isis_northbound.c @@ -2787,6 +2787,32 @@ void isis_notif_lsp_received(const struct isis_circuit *circuit, nb_notification_send(xpath, arguments); } +/* + * XPath: + * /frr-isisd:lsp-generation + */ +void isis_notif_lsp_gen(const struct isis_area *area, const char *lsp_id, + uint32_t seqno, uint32_t timestamp) +{ + const char *xpath = "/frr-isisd:lsp-generation"; + 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/lsp-id", xpath); + data = yang_data_new_string(xpath_arg, lsp_id); + listnode_add(arguments, data); + snprintf(xpath_arg, sizeof(xpath_arg), "%s/sequence", xpath); + data = yang_data_new_uint32(xpath_arg, seqno); + listnode_add(arguments, data); + snprintf(xpath_arg, sizeof(xpath_arg), "%s/send-timestamp", xpath); + data = yang_data_new_uint32(xpath_arg, timestamp); + 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.h b/isisd/isisd.h index bad930ddf3..96db44b63f 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -250,6 +250,8 @@ extern void isis_notif_area_mismatch(const struct isis_circuit *circuit, extern void isis_notif_lsp_received(const struct isis_circuit *circuit, const char *lsp_id, uint32_t seqno, uint32_t timestamp, const char *sys_id); +extern void isis_notif_lsp_gen(const struct isis_area *area, const char *lsp_id, + uint32_t seqno, uint32_t timestamp); /* Master of threads. */ extern struct thread_master *master;