/* 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); }
/* return the daemon running state */ int process_running(char *pid_file) { FILE *pidfile = fopen(pid_file, "r"); pid_t pid; int ret; /* No pidfile */ if (!pidfile) return 0; ret = fscanf(pidfile, "%d", &pid); if (ret != 1) { log_message(LOG_INFO, "Error reading pid file %s", pid_file); pid = 0; } fclose(pidfile); /* What should we return - we don't know if it is running or not. */ if (!pid) return 1; /* If no process is attached to pidfile, remove it */ if (kill(pid, 0)) { log_message(LOG_INFO, "Remove a zombie pid file %s", pid_file); pidfile_rm(pid_file); return 0; } return 1; }
/* Daemon stop sequence */ static void stop_keepalived(void) { /* Just cleanup memory & exit */ signal_handler_destroy(); thread_destroy_master(master); pidfile_rm(main_pidfile); if (__test_bit(DAEMON_VRRP, &daemon_mode)) pidfile_rm(vrrp_pidfile); if (__test_bit(DAEMON_CHECKERS, &daemon_mode)) pidfile_rm(checkers_pidfile); #ifdef _DEBUG_ keepalived_free_final("Parent process"); #endif }
/* Daemon stop sequence */ static void stop_keepalived(void) { log_message(LOG_INFO, "Stopping " VERSION_STRING); /* Just cleanup memory & exit */ signal_handler_destroy(); thread_destroy_master(master); pidfile_rm(main_pidfile); if (daemon_mode & 1 || !daemon_mode) pidfile_rm(vrrp_pidfile); if (daemon_mode & 2 || !daemon_mode) pidfile_rm(checkers_pidfile); #ifdef _DEBUG_ keepalived_free_final("Parent process"); #endif }
/* Daemon stop sequence */ static void stop_keepalived(void) { #ifndef _DEBUG_ /* Just cleanup memory & exit */ signal_handler_destroy(); thread_destroy_master(master); #ifdef _WITH_VRRP_ if (__test_bit(DAEMON_VRRP, &daemon_mode)) pidfile_rm(vrrp_pidfile); #endif #ifdef _WITH_LVS_ if (__test_bit(DAEMON_CHECKERS, &daemon_mode)) pidfile_rm(checkers_pidfile); #endif pidfile_rm(main_pidfile); #endif }
/* 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); }
/* Daemon stop sequence */ static void stop_bfd(int status) { struct rusage usage; if (__test_bit(CONFIG_TEST_BIT, &debug)) return; /* Stop daemon */ pidfile_rm(bfd_pidfile); /* Clean data */ free_global_data(global_data); bfd_dispatcher_release(bfd_data); free_bfd_data(bfd_data); free_bfd_buffer(); thread_destroy_master(master); free_parent_mallocs_exit(); /* * Reached when terminate signal catched. * finally return to parent process. */ if (__test_bit(LOG_DETAIL_BIT, &debug)) { getrusage(RUSAGE_SELF, &usage); log_message(LOG_INFO, "Stopped - used %ld.%6.6ld user time, %ld.%6.6ld system time", usage.ru_utime.tv_sec, usage.ru_utime.tv_usec, usage.ru_stime.tv_sec, usage.ru_stime.tv_usec); } else log_message(LOG_INFO, "Stopped"); #ifdef ENABLE_LOG_TO_FILE if (log_file_name) close_log_file(); #endif closelog(); #ifndef _MEM_CHECK_LOG_ FREE_PTR(bfd_syslog_ident); #else if (bfd_syslog_ident) free(bfd_syslog_ident); #endif close_std_fd(); exit(status); }
/* 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); }
/* Daemon stop sequence */ static void stop_vrrp(void) { /* Destroy master thread */ signal_handler_destroy(); free_vrrp_sockpool(vrrp_data); thread_destroy_master(master); /* Clear static entries */ netlink_rtlist_ipv4(vrrp_data->static_routes, IPROUTE_DEL); netlink_iplist_ipv4(-1, vrrp_data->static_addresses, IPADDRESS_DEL); if (!(debug & 8)) shutdown_vrrp_instances(); free_interface_queue(); gratuitous_arp_close(); ndisc_close(); vrrp_trackip_close(); /* Stop daemon */ pidfile_rm(vrrp_pidfile); /* Clean data */ free_global_data(data); free_vrrp_data(vrrp_data); free_vrrp_buffer(); #ifdef _WITH_LVS_ /* Clean ipvs related */ //ipvs_stop(); #endif #ifdef _DEBUG_ keepalived_free_final("VRRP Child process"); #endif /* * Reached when terminate signal catched. * finally return to parent process. */ closelog(); exit(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); }
/* return the daemon running state */ int process_running(char *pid_file) { FILE *pidfile = fopen(pid_file, "r"); pid_t pid; int ret; /* No pidfile */ if (!pidfile) return 0; ret = fscanf(pidfile, "%d", &pid); fclose(pidfile); /* If no process is attached to pidfile, remove it */ if (kill(pid, 0)) { log_message(LOG_INFO, "Remove a zombie pid file %s", pid_file); pidfile_rm(pid_file); return 0; } return 1; }
/* 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); }