static void hostapd_global_deinit(const char *pid_file) { int i; for (i = 0; wpa_drivers[i] && global.drv_priv; i++) { if (!global.drv_priv[i]) continue; wpa_drivers[i]->global_deinit(global.drv_priv[i]); } os_free(global.drv_priv); global.drv_priv = NULL; #ifdef EAP_SERVER_TNC tncs_global_deinit(); #endif /* EAP_SERVER_TNC */ random_deinit(); eloop_destroy(); #ifndef CONFIG_NATIVE_WINDOWS closelog(); #endif /* CONFIG_NATIVE_WINDOWS */ eap_server_unregister_methods(); os_daemonize_terminate(pid_file); }
static void hostapd_cli_cleanup(void) { hostapd_cli_close_connection(); if (pid_file) os_daemonize_terminate(pid_file); os_program_deinit(); }
static void hostapd_global_deinit(const char *pid_file) { #ifdef EAP_SERVER_TNC tncs_global_deinit(); #endif /* EAP_SERVER_TNC */ eloop_destroy(); #ifndef CONFIG_NATIVE_WINDOWS closelog(); #endif /* CONFIG_NATIVE_WINDOWS */ eap_server_unregister_methods(); os_daemonize_terminate(pid_file); }
int main(int argc, char *argv[]) { int c, i; int ret = -1; char *pid_file = NULL; int daemonize = 0; char *ctrl_dir = "/var/run/wpa_priv"; struct wpa_priv_interface *interfaces = NULL, *iface; if (os_program_init()) return -1; wpa_priv_fd_workaround(); for (;;) { c = getopt(argc, argv, "Bc:dP:"); if (c < 0) break; switch (c) { case 'B': daemonize++; break; case 'c': ctrl_dir = optarg; break; case 'd': wpa_debug_level--; break; case 'P': pid_file = os_rel2abs_path(optarg); break; default: usage(); goto out; } } if (optind >= argc) { usage(); goto out; } wpa_printf(MSG_DEBUG, "wpa_priv control directory: '%s'", ctrl_dir); if (eloop_init(NULL)) { wpa_printf(MSG_ERROR, "Failed to initialize event loop"); goto out; } for (i = optind; i < argc; i++) { wpa_printf(MSG_DEBUG, "Adding driver:interface %s", argv[i]); iface = wpa_priv_interface_init(ctrl_dir, argv[i]); if (iface == NULL) goto out; iface->next = interfaces; interfaces = iface; } if (daemonize && os_daemonize(pid_file)) goto out; eloop_register_signal_terminate(wpa_priv_terminate, NULL); eloop_run(); ret = 0; out: iface = interfaces; while (iface) { struct wpa_priv_interface *prev = iface; iface = iface->next; wpa_priv_interface_deinit(prev); } eloop_destroy(); os_daemonize_terminate(pid_file); os_free(pid_file); os_program_deinit(); return ret; }