isisd: implement the 'lsp-generation' notification

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
This commit is contained in:
Emanuele Di Pascale 2018-11-14 15:28:55 +01:00
parent 8375020ac6
commit 998011fa8b
3 changed files with 34 additions and 0 deletions

View File

@ -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;
}

View File

@ -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",

View File

@ -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;