mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-29 07:59:35 +00:00
vrrpd: gracefully shutdown on SIGTERM / SIGINT
Handle kill signals by gracefully destroying all of our VRRP instances. If any of them are in Master state, send an advert with 0 priority to notify Backup routers we are going down. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
4f576e7575
commit
f1175ba931
18
vrrpd/vrrp.c
18
vrrpd/vrrp.c
@ -2354,3 +2354,21 @@ void vrrp_init(void)
|
|||||||
"VRRP virtual router hash");
|
"VRRP virtual router hash");
|
||||||
vrf_init(NULL, NULL, NULL, NULL, NULL);
|
vrf_init(NULL, NULL, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vrrp_fini(void)
|
||||||
|
{
|
||||||
|
/* Destroy all instances */
|
||||||
|
struct list *vrs = hash_to_list(vrrp_vrouters_hash);
|
||||||
|
|
||||||
|
struct listnode *ln;
|
||||||
|
struct vrrp_vrouter *vr;
|
||||||
|
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(vrs, ln, vr)) {
|
||||||
|
vrrp_vrouter_destroy(vr);
|
||||||
|
}
|
||||||
|
|
||||||
|
list_delete(&vrs);
|
||||||
|
|
||||||
|
hash_clean(vrrp_vrouters_hash, NULL);
|
||||||
|
hash_free(vrrp_vrouters_hash);
|
||||||
|
}
|
||||||
|
@ -265,6 +265,14 @@ struct vrrp_vrouter {
|
|||||||
*/
|
*/
|
||||||
void vrrp_init(void);
|
void vrrp_init(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Destroy all VRRP instances and gracefully shutdown.
|
||||||
|
*
|
||||||
|
* For instances in Master state, VRRP advertisements with 0 priority will be
|
||||||
|
* sent if possible to notify Backup routers that we are going away.
|
||||||
|
*/
|
||||||
|
void vrrp_fini(void);
|
||||||
|
|
||||||
|
|
||||||
/* Creation and destruction ------------------------------------------------ */
|
/* Creation and destruction ------------------------------------------------ */
|
||||||
|
|
||||||
|
@ -69,10 +69,12 @@ static void sighup(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* SIGINT / SIGTERM handler. */
|
/* SIGINT / SIGTERM handler. */
|
||||||
static void sigint(void)
|
static void __attribute__((noreturn)) sigint(void)
|
||||||
{
|
{
|
||||||
zlog_notice("Terminating on signal");
|
zlog_notice("Terminating on signal");
|
||||||
|
|
||||||
|
vrrp_fini();
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user