/* Daemon stop sequence */ static void stop_check(void) { /* Destroy master thread */ signal_handler_destroy(); thread_destroy_master(master); free_checkers_queue(); free_ssl(); if (!(debug & 16)) clear_services(); ipvs_stop(); /* Stop daemon */ pidfile_rm(checkers_pidfile); /* Clean data */ free_global_data(data); free_check_data(check_data); #ifdef _WITH_VRRP_ free_interface_queue(); #endif #ifdef _DEBUG_ keepalived_free_final("Healthcheck child process"); #endif /* * Reached when terminate signal catched. * finally return to parent process. */ closelog(); exit(0); }
/* Reload thread */ static int reload_vrrp_thread(thread_t * thread) { /* set the reloading flag */ SET_RELOAD; /* Destroy master thread */ vrrp_dispatcher_release(vrrp_data); kernel_netlink_close(); thread_cleanup_master(master); #ifdef _HAVE_IPVS_SYNCD_ /* TODO - Note: this didn't work if we found ipvs_syndc on vrrp before on old_vrrp */ if (global_data->lvs_syncd_if) ipvs_syncd_cmd(IPVS_STOPDAEMON, NULL, (global_data->lvs_syncd_vrrp->state == VRRP_STATE_MAST) ? IPVS_MASTER: IPVS_BACKUP, global_data->lvs_syncd_syncid, false); #endif free_global_data(global_data); free_vrrp_buffer(); gratuitous_arp_close(); ndisc_close(); #ifdef _WITH_LVS_ if (vrrp_ipvs_needed()) { /* Clean ipvs related */ ipvs_stop(); } #endif /* Save previous conf data */ old_vrrp_data = vrrp_data; vrrp_data = NULL; reset_interface_queue(); /* Reload the conf */ #ifdef _DEBUG_ mem_allocated = 0; #endif start_vrrp(); #ifdef _HAVE_IPVS_SYNCD_ if (global_data->lvs_syncd_if) ipvs_syncd_cmd(IPVS_STARTDAEMON, NULL, (global_data->lvs_syncd_vrrp->state == VRRP_STATE_MAST) ? IPVS_MASTER: IPVS_BACKUP, global_data->lvs_syncd_syncid, false); #endif /* free backup data */ free_vrrp_data(old_vrrp_data); free_old_interface_queue(); UNSET_RELOAD; return 0; }
/* Daemon stop sequence */ static void stop_vrrp(void) { signal_handler_destroy(); if (!(debug & 8)) shutdown_vrrp_instances(); /* Clear static entries */ netlink_rtlist(vrrp_data->static_routes, IPROUTE_DEL); netlink_iplist(vrrp_data->static_addresses, IPADDRESS_DEL, NULL); #ifdef _WITH_SNMP_ if (snmp) vrrp_snmp_agent_close(); #endif /* Stop daemon */ pidfile_rm(vrrp_pidfile); #ifdef _WITH_LVS_ if (vrrp_ipvs_needed()) { /* Clean ipvs related */ ipvs_stop(); } #endif /* Clean data */ free_global_data(global_data); vrrp_dispatcher_release(vrrp_data); free_vrrp_data(vrrp_data); free_vrrp_buffer(); free_interface_queue(); kernel_netlink_close(); thread_destroy_master(master); gratuitous_arp_close(); ndisc_close(); #ifdef _DEBUG_ keepalived_free_final("VRRP Child process"); #endif /* * Reached when terminate signal catched. * finally return to parent process. */ closelog(); exit(0); }
/* Reload thread */ int reload_vrrp_thread(thread_t * thread) { /* set the reloading flag */ SET_RELOAD; /* Signal handling */ signal_handler_reset(); /* Destroy master thread */ vrrp_dispatcher_release(vrrp_data); kernel_netlink_close(); thread_destroy_master(master); master = thread_make_master(); free_global_data(global_data); free_interface_queue(); free_vrrp_buffer(); gratuitous_arp_close(); ndisc_close(); #ifdef _WITH_LVS_ if (vrrp_ipvs_needed()) { /* Clean ipvs related */ ipvs_stop(); } #endif /* Save previous conf data */ old_vrrp_data = vrrp_data; vrrp_data = NULL; /* Reload the conf */ #ifdef _DEBUG_ mem_allocated = 0; #endif vrrp_signal_init(); signal_set(SIGCHLD, thread_child_handler, master); start_vrrp(); /* free backup data */ free_vrrp_data(old_vrrp_data); UNSET_RELOAD; return 0; }
/* Daemon stop sequence */ static void stop_check(int status) { /* Destroy master thread */ signal_handler_destroy(); thread_destroy_master(master); free_checkers_queue(); free_ssl(); if (!__test_bit(DONT_RELEASE_IPVS_BIT, &debug)) clear_services(); ipvs_stop(); #ifdef _WITH_SNMP_CHECKER_ if (global_data->enable_snmp_checker) check_snmp_agent_close(); #endif /* Stop daemon */ pidfile_rm(checkers_pidfile); /* Clean data */ free_global_data(global_data); free_check_data(check_data); #ifdef _WITH_VRRP_ free_interface_queue(); #endif free_parent_mallocs_exit(); /* * Reached when terminate signal catched. * finally return to parent process. */ log_message(LOG_INFO, "Stopped"); closelog(); #ifndef _MEM_CHECK_LOG_ FREE_PTR(check_syslog_ident); #else if (check_syslog_ident) free(check_syslog_ident); #endif exit(status); }
/* Reload thread */ int reload_check_thread(thread_t * thread) { /* set the reloading flag */ SET_RELOAD; log_message(LOG_INFO, "Got SIGHUP, reloading checker configuration"); /* Signals handling */ signal_handler_reset(); /* Destroy master thread */ #ifdef _WITH_VRRP_ kernel_netlink_close(); #endif thread_destroy_master(master); master = thread_make_master(); free_global_data(global_data); free_checkers_queue(); #ifdef _WITH_VRRP_ free_interface_queue(); #endif free_ssl(); ipvs_stop(); /* Save previous conf data */ old_check_data = check_data; check_data = NULL; /* Reload the conf */ #ifdef _DEBUG_ mem_allocated = 0; #endif check_signal_init(); signal_set(SIGCHLD, thread_child_handler, master); start_check(); /* free backup data */ free_check_data(old_check_data); UNSET_RELOAD; return 0; }
/* Reload thread */ int reload_vrrp_thread(thread_t * thread) { /* set the reloading flag */ SET_RELOAD; /* Close sockpool */ free_vrrp_sockpool(vrrp_data); /* Signal handling */ signal_reset(); signal_handler_destroy(); /* Destroy master thread */ thread_destroy_master(master); master = thread_make_master(); free_global_data(data); free_interface_queue(); free_vrrp_buffer(); gratuitous_arp_close(); ndisc_close(); /* Save previous conf data */ old_vrrp_data = vrrp_data; vrrp_data = NULL; #ifdef _WITH_LVS_ /* Clean ipvs related */ ipvs_stop(); #endif /* Reload the conf */ mem_allocated = 0; vrrp_signal_init(); signal_set(SIGCHLD, thread_child_handler, master); start_vrrp(); /* free backup data */ free_vrrp_data(old_vrrp_data); UNSET_RELOAD; return 0; }
/* Daemon stop sequence */ static void stop_check(void) { /* Destroy master thread */ signal_handler_destroy(); thread_destroy_master(master); free_checkers_queue(); free_ssl(); if (!__test_bit(DONT_RELEASE_IPVS_BIT, &debug)) clear_services(); ipvs_stop(); #ifdef _WITH_SNMP_CHECKER_ if (global_data->enable_snmp_checker) check_snmp_agent_close(); #endif /* Stop daemon */ pidfile_rm(checkers_pidfile); /* Clean data */ free_global_data(global_data); free_check_data(check_data); #ifdef _WITH_VRRP_ free_interface_queue(); #endif #ifdef _MEM_CHECK_ keepalived_free_final("Healthcheck child process"); #endif /* * Reached when terminate signal catched. * finally return to parent process. */ log_message(LOG_INFO, "Stopped"); closelog(); exit(0); }
/* Reload thread */ static int reload_check_thread(thread_t * thread) { /* set the reloading flag */ SET_RELOAD; log_message(LOG_INFO, "Got SIGHUP, reloading checker configuration"); /* Destroy master thread */ #ifdef _WITH_VRRP_ kernel_netlink_close(); #endif thread_cleanup_master(master); free_global_data(global_data); free_checkers_queue(); #ifdef _WITH_VRRP_ free_interface_queue(); #endif free_ssl(); ipvs_stop(); /* Save previous conf data */ old_check_data = check_data; check_data = NULL; /* Reload the conf */ #ifdef _MEM_CHECK_ mem_allocated = 0; #endif start_check(); /* free backup data */ free_check_data(old_check_data); UNSET_RELOAD; return 0; }
/* Reload thread */ int reload_check_thread(thread_t * thread) { /* set the reloading flag */ SET_RELOAD; /* Signals handling */ signal_reset(); signal_handler_destroy(); /* Destroy master thread */ thread_destroy_master(master); master = thread_make_master(); free_global_data(data); free_checkers_queue(); #ifdef _WITH_VRRP_ free_interface_queue(); #endif free_ssl(); ipvs_stop(); /* Save previous conf data */ old_check_data = check_data; check_data = NULL; /* Reload the conf */ mem_allocated = 0; check_signal_init(); signal_set(SIGCHLD, thread_child_handler, master); start_check(); /* free backup data */ free_check_data(old_check_data); UNSET_RELOAD; return 0; }
/* Daemon stop sequence */ static void stop_vrrp(void) { /* Ensure any interfaces are in backup mode, * sending a priority 0 vrrp message */ restore_vrrp_interfaces(); #ifdef _HAVE_LIBIPTC_ iptables_fini(); #endif /* Clear static entries */ netlink_rtlist(vrrp_data->static_routes, IPROUTE_DEL); netlink_rulelist(vrrp_data->static_rules, IPRULE_DEL); netlink_iplist(vrrp_data->static_addresses, IPADDRESS_DEL); #ifdef _WITH_SNMP_ if (global_data->enable_snmp_keepalived || global_data->enable_snmp_rfc) vrrp_snmp_agent_close(); #endif /* Stop daemon */ pidfile_rm(vrrp_pidfile); #ifdef _WITH_LVS_ if (vrrp_ipvs_needed()) { /* Clean ipvs related */ ipvs_stop(); } #endif /* Clean data */ free_global_data(global_data); vrrp_dispatcher_release(vrrp_data); /* This is not nice, but it significantly increases the chances * of an IGMP leave group being sent for some reason. * Since we are about to exit, it doesn't affect anything else * running. */ sleep ( 1 ); if (!__test_bit(DONT_RELEASE_VRRP_BIT, &debug)) shutdown_vrrp_instances(); free_vrrp_data(vrrp_data); free_vrrp_buffer(); free_interface_queue(); kernel_netlink_close(); thread_destroy_master(master); gratuitous_arp_close(); ndisc_close(); signal_handler_destroy(); #ifdef _DEBUG_ keepalived_free_final("VRRP Child process"); #endif /* * Reached when terminate signal catched. * finally return to parent process. */ closelog(); exit(0); }