Merge pull request #16170 from LabNConsulting/dleroy/nhrpd-shortcut-cleanup

nhrpd: cleans up shortcut cache entries on termination
This commit is contained in:
Donald Sharp 2024-06-05 14:39:14 -04:00 committed by GitHub
commit fbc795a047
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 6 deletions

View File

@ -83,13 +83,13 @@ static void nhrp_request_stop(void)
debugf(NHRP_DEBUG_COMMON, "Exiting..."); debugf(NHRP_DEBUG_COMMON, "Exiting...");
frr_early_fini(); frr_early_fini();
vrf_terminate(); nhrp_shortcut_terminate();
nhrp_nhs_terminate(); nhrp_nhs_terminate();
nhrp_zebra_terminate(); nhrp_zebra_terminate();
vici_terminate(); vici_terminate();
evmgr_terminate(); evmgr_terminate();
vrf_terminate();
nhrp_vc_terminate(); nhrp_vc_terminate();
nhrp_shortcut_terminate();
debugf(NHRP_DEBUG_COMMON, "Done."); debugf(NHRP_DEBUG_COMMON, "Done.");

View File

@ -19,7 +19,8 @@ DEFINE_MTYPE_STATIC(NHRPD, NHRP_SHORTCUT, "NHRP shortcut");
static struct route_table *shortcut_rib[AFI_MAX]; static struct route_table *shortcut_rib[AFI_MAX];
static void nhrp_shortcut_do_purge(struct event *t); static void nhrp_shortcut_do_purge(struct event *t);
static void nhrp_shortcut_delete(struct nhrp_shortcut *s); static void nhrp_shortcut_delete(struct nhrp_shortcut *s,
void *arg __attribute__((__unused__)));
static void nhrp_shortcut_send_resolution_req(struct nhrp_shortcut *s); static void nhrp_shortcut_send_resolution_req(struct nhrp_shortcut *s);
static void nhrp_shortcut_check_use(struct nhrp_shortcut *s) static void nhrp_shortcut_check_use(struct nhrp_shortcut *s)
@ -72,7 +73,7 @@ static void nhrp_shortcut_cache_notify(struct notifier_block *n,
s->route_installed = 0; s->route_installed = 0;
} }
if (cmd == NOTIFY_CACHE_DELETE) if (cmd == NOTIFY_CACHE_DELETE)
nhrp_shortcut_delete(s); nhrp_shortcut_delete(s, NULL);
break; break;
} }
} }
@ -132,7 +133,8 @@ static void nhrp_shortcut_update_binding(struct nhrp_shortcut *s,
} }
} }
static void nhrp_shortcut_delete(struct nhrp_shortcut *s) static void nhrp_shortcut_delete(struct nhrp_shortcut *s,
void *arg __attribute__((__unused__)))
{ {
struct route_node *rn; struct route_node *rn;
afi_t afi = family2afi(PREFIX_FAMILY(s->p)); afi_t afi = family2afi(PREFIX_FAMILY(s->p));
@ -158,7 +160,7 @@ static void nhrp_shortcut_do_purge(struct event *t)
{ {
struct nhrp_shortcut *s = EVENT_ARG(t); struct nhrp_shortcut *s = EVENT_ARG(t);
s->t_timer = NULL; s->t_timer = NULL;
nhrp_shortcut_delete(s); nhrp_shortcut_delete(s, NULL);
} }
static struct nhrp_shortcut *nhrp_shortcut_get(struct prefix *p) static struct nhrp_shortcut *nhrp_shortcut_get(struct prefix *p)
@ -469,6 +471,8 @@ void nhrp_shortcut_init(void)
void nhrp_shortcut_terminate(void) void nhrp_shortcut_terminate(void)
{ {
nhrp_shortcut_foreach(AFI_IP, nhrp_shortcut_delete, NULL);
nhrp_shortcut_foreach(AFI_IP6, nhrp_shortcut_delete, NULL);
route_table_finish(shortcut_rib[AFI_IP]); route_table_finish(shortcut_rib[AFI_IP]);
route_table_finish(shortcut_rib[AFI_IP6]); route_table_finish(shortcut_rib[AFI_IP6]);
} }