diff options
Diffstat (limited to 'ospfd/ospf_lsa.c')
| -rw-r--r-- | ospfd/ospf_lsa.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index ac53f3a19f..1d5c0be5c4 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -61,6 +61,12 @@ static struct ospf_lsa * ospf_exnl_lsa_prepare_and_flood(struct ospf *ospf, struct external_info *ei, struct in_addr id); +/* + * LSA Update and Delete Hook LSAs. + */ +DEFINE_HOOK(ospf_lsa_update, (struct ospf_lsa *lsa), (lsa)); +DEFINE_HOOK(ospf_lsa_delete, (struct ospf_lsa *lsa), (lsa)); + uint32_t get_metric(uint8_t *metric) { uint32_t m; @@ -3146,6 +3152,11 @@ struct ospf_lsa *ospf_lsa_install(struct ospf *ospf, struct ospf_interface *oi, zlog_debug("LSA[%s]: Install LSA %p, MaxAge", dump_lsa_key(new), lsa); ospf_lsa_maxage(ospf, lsa); + } else { + /* + * Invoke the LSA update hook. + */ + hook_call(ospf_lsa_update, new); } return new; @@ -3364,6 +3375,11 @@ void ospf_lsa_maxage(struct ospf *ospf, struct ospf_lsa *lsa) zlog_debug("LSA[%s]: MaxAge LSA remover scheduled.", dump_lsa_key(lsa)); + /* + * Invoke the LSA delete hook. + */ + hook_call(ospf_lsa_delete, lsa); + OSPF_TIMER_ON(ospf->t_maxage, ospf_maxage_lsa_remover, ospf->maxage_delay); } |
