static int hostapd_global_run(struct hapd_interfaces *ifaces, int daemonize, const char *pid_file) { #ifdef EAP_SERVER_TNC int tnc = 0; size_t i, k; for (i = 0; !tnc && i < ifaces->count; i++) { for (k = 0; k < ifaces->iface[i]->num_bss; k++) { if (ifaces->iface[i]->bss[0]->conf->tnc) { tnc++; break; } } } if (tnc && tncs_global_init() < 0) { wpa_printf(MSG_ERROR, "Failed to initialize TNCS"); return -1; } #endif /* EAP_SERVER_TNC */ if (daemonize && os_daemonize(pid_file)) { wpa_printf(MSG_ERROR, "daemon: %s", strerror(errno)); return -1; } eloop_run(); return 0; }
static void hostapd_setup_complete_cb(void *ctx) { if (daemonize && os_daemonize(pid_file)) { perror("daemon"); return; } daemonize = 0; }
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; }
int main(int argc, char *argv[]) { int i, j; int c, res, ret = -1; const char *global_wpa_s_ctrl_intf = NULL; const char *wrapd_ctrl_intf = NULL; const char *vma_conf_file = NULL; const char *wpa_s_conf_file = NULL; const char *add_psta_addr = NULL; const char *remove_psta_addr = NULL; int daemonize = 0; int hostapd_num = 0; int list_psta_addr = 0; int do_mat = 0; int do_isolation = 0; int do_timer = 0; int conn_cnt = 0; int slave_mode = 0; char msg[128] = {0}; if (os_program_init()) return -1; for (i = 0; i < HOSTAPD_CNT; i ++) { ap_ifname[i] = NULL; wrapd_hostapd_conn[i] = NULL; } for (;;) { c = getopt(argc, argv, "g:a:p:w:A:R:BLMSITc:v:d:h"); if (c < 0) break; switch (c) { case 'g': wrapd_ctrl_intf = optarg; break; case 'w': global_wpa_s_ctrl_intf = optarg; break; case 'a': if (hostapd_num >= HOSTAPD_CNT) { usage(); goto out; } ap_ifname[hostapd_num ++] = os_strdup(optarg); break; case 'p': mpsta_ifname = os_strdup(optarg); break; case 'd': dbdc_ifname = os_strdup(optarg); break; case 'B': daemonize++; break; case 'A': add_psta_addr = optarg; break; case 'R': remove_psta_addr = optarg; break; case 'L': list_psta_addr = 1; break; case 'M': do_mat = 1; break; case 'I': do_isolation = 1; break; case 'S': slave_mode = 1; break; case 'T': do_timer = 1; break; case 'c': wpa_s_conf_file = optarg; break; case 'v': vma_conf_file = optarg; break; case 'h': usage(); ret = 0; goto out; default: usage(); goto out; } } for (i = 0; i < hostapd_num - 1; i ++) { for (j = i + 1; j < hostapd_num; j ++) { if (os_strcmp(ap_ifname[i], ap_ifname[j]) == 0) { wrapd_printf("duplicated ap_ifname[%d] of ap_ifname[%d]", i, j); goto out; } } } if(NULL == wrapd_ctrl_intf) wrapd_ctrl_intf = wrapd_ctrl_iface_path; if (slave_mode) { if(add_psta_addr) { if (do_mat) { if (dbdc_ifname) { wrapd_printf("Invalid MAT option, DBDC is enabled"); goto out; } res = os_snprintf(msg, sizeof(msg),"ETH_PSTA_ADD MAT %s %s", ap_ifname[0], add_psta_addr); } else res = os_snprintf(msg, sizeof(msg),"ETH_PSTA_ADD %s %s", ap_ifname[0], add_psta_addr); if (res < 0 || res >= sizeof(msg)){ wrapd_printf("Fail to build ETH_PSTA_ADD msg"); goto out; } wrapd_send_msg(msg, 128, wrapd_ctrl_intf); ret = 0; goto out; } else if (remove_psta_addr) { res = os_snprintf(msg, sizeof(msg),"ETH_PSTA_REMOVE %s", remove_psta_addr); if (res < 0 || res >= sizeof(msg)){ wrapd_printf("Fail to build ETH_PSTA_REMOVE msg"); goto out; } wrapd_send_msg(msg, (16 + 17), wrapd_ctrl_intf); ret = 0; goto out; } else if (list_psta_addr) { wrapd_send_msg("PSTA_LIST", 9, wrapd_ctrl_intf); ret = 0; goto out; } } if(NULL == global_wpa_s_ctrl_intf) global_wpa_s_ctrl_intf = global_wpa_s_ctrl_iface_path; if (eloop_init()) { wrapd_printf("Failed to initialize event loop"); goto out; } wrapd_handle = wrapd_conn_to_global_wpa_s(global_wpa_s_ctrl_intf, wpa_s_conf_file, do_isolation, do_timer); if (wrapd_handle == NULL) goto out; wrapd_conn = wrapd_ctrl_open(wrapd_ctrl_intf, wrapd_handle); for (i = 0; i < HOSTAPD_CNT; i ++) { if(ap_ifname[i]) { for (conn_cnt = 0; conn_cnt < HOSTAPD_CONN_TIMES; conn_cnt ++) { wrapd_hostapd_conn[i] = wrapd_conn_to_hostapd(ap_ifname[i]); if (wrapd_hostapd_conn[i]) { wrapd_printf("WRAP hostapd(%s) connected", ap_ifname[i]); break; } os_sleep(1, 0); } if(wrapd_hostapd_conn[i]) { if (wpa_ctrl_attach((struct wpa_ctrl *)wrapd_hostapd_conn[i]) != 0) { wrapd_printf("Failed to attach to WRAP hostapd(%s)", ap_ifname[i]);; goto out; } wrapd_printf("WRAP hostapd(%s) attached", ap_ifname[i]); eloop_register_read_sock(wrapd_hostapd_conn[i]->sock, wrapd_hostapd_ctrl_iface_receive, wrapd_handle, (void *)ap_ifname[i]); } else { wrapd_printf("WRAP hostapd(%s) not exists", ap_ifname[i]); } } } if(mpsta_ifname == NULL) { wrapd_printf("Failed to connect to MPSTA wpa_s - mpsta_ifname == NULL"); goto out; } for (conn_cnt = 0; conn_cnt < WPA_S_CONN_TIMES; conn_cnt ++) { /* * Delay to ensure scan doesn't overlap with ht40 intol acs scan, else will cause * scan to fail and will take more time for MPSTA to associate. * EV 131644 */ if(conn_cnt == 0) os_sleep(3, 0); wrapd_wpa_s_conn = wrapd_conn_to_mpsta_wpa_s(mpsta_ifname); if (wrapd_wpa_s_conn) { wrapd_printf("MPSTA wpa_s(%s) connected", mpsta_ifname); break; } os_sleep(1, 0); } if(wrapd_wpa_s_conn) { if (wpa_ctrl_attach((struct wpa_ctrl *)wrapd_wpa_s_conn) != 0) { wrapd_printf("Failed to attach to MPSTA wpa_s(%s)", mpsta_ifname); goto out; } wrapd_printf("MPSTA wpa_s(%s) attached", mpsta_ifname); eloop_register_read_sock(wrapd_wpa_s_conn->sock, wrapd_wpa_s_ctrl_iface_receive, wrapd_handle, NULL); } else { wrapd_printf("MPSTA wpa_s(%s) not exists", mpsta_ifname); } if (vma_conf_file) { wrapd_load_vma_list(vma_conf_file, wrapd_handle); } if (daemonize && os_daemonize(NULL)) { wrapd_printf("daemon"); goto out; } eloop_run(); out: for (i = 0; i < HOSTAPD_CNT; i ++) { if (ap_ifname[i]) os_free(ap_ifname[i]); if (wrapd_hostapd_conn[i]) wpa_ctrl_close((struct wpa_ctrl *)wrapd_hostapd_conn[i]); } if (dbdc_ifname) os_free(dbdc_ifname); if (mpsta_ifname) os_free(mpsta_ifname); if (wrapd_wpa_s_conn) wpa_ctrl_close((struct wpa_ctrl *)wrapd_wpa_s_conn); os_program_deinit(); return ret; }
int main(int argc, char *argv[]) { int warning_displayed = 0; int c; int daemonize = 0; if (os_program_init()) return -1; for (;;) { c = getopt(argc, argv, "a:BhG:i:p:P:s:v"); if (c < 0) break; switch (c) { case 'a': action_file = optarg; break; case 'B': daemonize = 1; break; case 'G': ping_interval = atoi(optarg); break; case 'h': usage(); return 0; case 'v': printf("%s\n", hostapd_cli_version); return 0; case 'i': os_free(ctrl_ifname); ctrl_ifname = os_strdup(optarg); break; case 'p': ctrl_iface_dir = optarg; break; case 'P': pid_file = optarg; break; case 's': client_socket_dir = optarg; break; default: usage(); return -1; } } interactive = (argc == optind) && (action_file == NULL); if (interactive) { printf("%s\n\n%s\n\n", hostapd_cli_version, cli_license); } if (eloop_init()) return -1; for (;;) { if (ctrl_ifname == NULL) { struct dirent *dent; DIR *dir = opendir(ctrl_iface_dir); if (dir) { while ((dent = readdir(dir))) { if (os_strcmp(dent->d_name, ".") == 0 || os_strcmp(dent->d_name, "..") == 0) continue; printf("Selected interface '%s'\n", dent->d_name); ctrl_ifname = os_strdup(dent->d_name); break; } closedir(dir); } } hostapd_cli_reconnect(ctrl_ifname); if (ctrl_conn) { if (warning_displayed) printf("Connection established.\n"); break; } if (!interactive) { perror("Failed to connect to hostapd - " "wpa_ctrl_open"); return -1; } if (!warning_displayed) { printf("Could not connect to hostapd - re-trying\n"); warning_displayed = 1; } os_sleep(1, 0); continue; } if (action_file && !hostapd_cli_attached) return -1; if (daemonize && os_daemonize(pid_file) && eloop_sock_requeue()) return -1; if (interactive) hostapd_cli_interactive(); else if (action_file) hostapd_cli_action(ctrl_conn); else wpa_request(ctrl_conn, argc - optind, &argv[optind]); unregister_event_handler(ctrl_conn); os_free(ctrl_ifname); eloop_destroy(); hostapd_cli_cleanup(); return 0; }
int main(int argc, char *argv[]) { int interactive; int warning_displayed = 0; int c; int daemonize = 0; int ret = 0; const char *global = NULL; if (os_program_init()) return -1; for (;;) { c = getopt(argc, argv, "a:Bg:hi:p:P:v"); if (c < 0) break; switch (c) { case 'a': action_file = optarg; break; case 'B': daemonize = 1; break; case 'g': global = optarg; break; case 'h': usage(); return 0; case 'v': printf("%s\n", wpa_cli_version); return 0; case 'i': os_free(ctrl_ifname); ctrl_ifname = os_strdup(optarg); break; case 'p': ctrl_iface_dir = optarg; break; case 'P': pid_file = optarg; break; default: usage(); return -1; } } interactive = (argc == optind) && (action_file == NULL); if (interactive) printf("%s\n\n%s\n\n", wpa_cli_version, wpa_cli_license); if (global) { #ifdef CONFIG_CTRL_IFACE_NAMED_PIPE ctrl_conn = wpa_ctrl_open(NULL); #else /* CONFIG_CTRL_IFACE_NAMED_PIPE */ ctrl_conn = wpa_ctrl_open(global); #endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ if (ctrl_conn == NULL) { perror("Failed to connect to wpa_supplicant - " "wpa_ctrl_open"); return -1; } } for (; !global;) { if (ctrl_ifname == NULL) ctrl_ifname = wpa_cli_get_default_ifname(); ctrl_conn = wpa_cli_open_connection(ctrl_ifname); if (ctrl_conn) { if (warning_displayed) printf("Connection established.\n"); break; } if (!interactive) { perror("Failed to connect to wpa_supplicant - " "wpa_ctrl_open"); return -1; } if (!warning_displayed) { printf("Could not connect to wpa_supplicant - " "re-trying\n"); warning_displayed = 1; } os_sleep(1, 0); continue; } #ifndef _WIN32_WCE signal(SIGINT, wpa_cli_terminate); signal(SIGTERM, wpa_cli_terminate); #endif /* _WIN32_WCE */ #ifndef CONFIG_NATIVE_WINDOWS signal(SIGALRM, wpa_cli_alarm); #endif /* CONFIG_NATIVE_WINDOWS */ if (interactive || action_file) { if (wpa_ctrl_attach(monitor_conn) == 0) { wpa_cli_attached = 1; } else { printf("Warning: Failed to attach to " "wpa_supplicant.\n"); if (!interactive) return -1; } } if (daemonize && os_daemonize(pid_file)) return -1; if (interactive) wpa_cli_interactive(); else if (action_file) wpa_cli_action(ctrl_conn); else ret = wpa_request(ctrl_conn, argc - optind, &argv[optind]); os_free(ctrl_ifname); wpa_cli_cleanup(); return ret; }
int main(int argc, char *argv[]) { int interactive; int warning_displayed = 0; int c; int daemonize = 0; if (os_program_init()) return -1; for (;;) { c = getopt(argc, argv, "a:BhG:i:p:v"); if (c < 0) break; switch (c) { case 'a': action_file = optarg; break; case 'B': daemonize = 1; break; case 'G': ping_interval = atoi(optarg); break; case 'h': usage(); return 0; case 'v': printf("%s\n", hostapd_cli_version); return 0; case 'i': os_free(ctrl_ifname); ctrl_ifname = os_strdup(optarg); break; case 'p': ctrl_iface_dir = optarg; break; default: usage(); return -1; } } interactive = (argc == optind) && (action_file == NULL); if (interactive) { printf("%s\n\n%s\n\n", hostapd_cli_version, hostapd_cli_license); } for (;;) { if (ctrl_ifname == NULL) { struct dirent *dent; DIR *dir = opendir(ctrl_iface_dir); if (dir) { while ((dent = readdir(dir))) { if (os_strcmp(dent->d_name, ".") == 0 || os_strcmp(dent->d_name, "..") == 0) continue; printf("Selected interface '%s'\n", dent->d_name); ctrl_ifname = os_strdup(dent->d_name); break; } closedir(dir); } } ctrl_conn = hostapd_cli_open_connection(ctrl_ifname); if (ctrl_conn) { if (warning_displayed) printf("Connection established.\n"); break; } if (!interactive) { perror("Failed to connect to hostapd - " "wpa_ctrl_open"); return -1; } if (!warning_displayed) { printf("Could not connect to hostapd - re-trying\n"); warning_displayed = 1; } os_sleep(1, 0); continue; } signal(SIGINT, hostapd_cli_terminate); signal(SIGTERM, hostapd_cli_terminate); signal(SIGALRM, hostapd_cli_alarm); if (interactive || action_file) { if (wpa_ctrl_attach(ctrl_conn) == 0) { hostapd_cli_attached = 1; } else { printf("Warning: Failed to attach to hostapd.\n"); if (action_file) return -1; } } if (daemonize && os_daemonize(pid_file)) return -1; if (interactive) hostapd_cli_interactive(); else if (action_file) hostapd_cli_action(ctrl_conn); else wpa_request(ctrl_conn, argc - optind, &argv[optind]); os_free(ctrl_ifname); hostapd_cli_cleanup(); return 0; }
int main(int argc, char *argv[]) { int warning_displayed = 0; int c; int daemonize = 0; printf("In hostapd cli main\n"); if (os_program_init()) return -1; for (;;) { c = getopt(argc, argv, "a:BhG:i:p:P:s:v"); if (c < 0) { break; printf("c<0 getting out of for loop\n"); } switch (c) { case 'a': action_file = optarg; break; case 'B': daemonize = 1; break; case 'G': ping_interval = atoi(optarg); break; case 'h': usage(); return 0; case 'v': printf("%s\n", hostapd_cli_version); return 0; case 'i': os_free(ctrl_ifname); ctrl_ifname = os_strdup(optarg); break; case 'p': ctrl_iface_dir = optarg; break; case 'P': pid_file = optarg; break; case 's': client_socket_dir = optarg; break; default: usage(); return -1; } } interactive = (argc == optind) && (action_file == NULL); if (interactive) { printf("%s\n\n%s\n\n", hostapd_cli_version, hostapd_cli_license); } if (eloop_init()) return -1; for (;;) { if (ctrl_ifname == NULL) { struct dirent *dent; DIR *dir = opendir(ctrl_iface_dir); if (dir) { while ((dent = readdir(dir))) { if (os_strcmp(dent->d_name, ".") == 0 || os_strcmp(dent->d_name, "..") == 0) continue; printf("Selected interface '%s'\n", dent->d_name); ctrl_ifname = os_strdup(dent->d_name); break; } closedir(dir); } } ctrl_conn = hostapd_cli_open_connection(ctrl_ifname); if (ctrl_conn) { if (warning_displayed) printf("Connection established.\n"); break; } if (!interactive) { perror("Failed to connect to hostapd - " "wpa_ctrl_open"); return -1; } if (!warning_displayed) { printf("Could not connect to hostapd - re-trying\n"); warning_displayed = 1; } os_sleep(1, 0); continue; } if (interactive || action_file) { if (wpa_ctrl_attach(ctrl_conn) == 0) { hostapd_cli_attached = 1; } else { printf("Warning: Failed to attach to hostapd.\n"); if (action_file) return -1; } } if (daemonize && os_daemonize(pid_file)) return -1; //sharing pid start int ShmID; pid_t *ShmPTR; pid_t pid = getpid(); key_t MyKey; MyKey = 1234; ShmID = shmget(MyKey, sizeof(pid_t), IPC_CREAT | 0666); ShmPTR = (pid_t *) shmat(ShmID, NULL, 0); *ShmPTR = pid; //sharing pid end if (signal(SIGINT, SIGINT_handler) == SIG_ERR) { printf("SIGINT install error\n"); exit(1); } if (signal(SIGQUIT, SIGQUIT_handler) == SIG_ERR) { printf("SIGQUIT install error\n"); exit(1); } printf("Waiting for the signals from HTTP server to arrive\n"); while (1); /*..derecated from the original implementation.. hostapd_cli_list_interfaces(ctrl_conn); os_free(ctrl_ifname); eloop_destroy(); hostapd_cli_cleanup(); return 0; */ }
int main(int argc, char *argv[]) { int interactive; int warning_displayed = 0; int c; int daemonize = 0; const char *global = NULL; if (os_program_init()) return -1; for (;;) { c = getopt(argc, argv, "a:Bg:hi:p:P:v"); if (c < 0) break; switch (c) { case 'a': action_file = optarg; break; case 'B': daemonize = 1; break; case 'g': global = optarg; break; case 'h': usage(); return 0; case 'v': printf("%s\n", wpa_cli_version); return 0; case 'i': ctrl_ifname = strdup(optarg); break; case 'p': ctrl_iface_dir = optarg; break; case 'P': pid_file = optarg; break; default: usage(); return -1; } } interactive = (argc == optind) && (action_file == NULL); if (interactive) printf("%s\n\n%s\n\n", wpa_cli_version, wpa_cli_license); if (global) { ctrl_conn = wpa_ctrl_open(global); if (ctrl_conn == NULL) { perror("Failed to connect to wpa_supplicant - " "wpa_ctrl_open"); return -1; } } for (; !global;) { #ifndef CONFIG_CTRL_IFACE_UDP if (ctrl_ifname == NULL) { struct dirent *dent; DIR *dir = opendir(ctrl_iface_dir); if (dir) { while ((dent = readdir(dir))) { #ifdef _DIRENT_HAVE_D_TYPE /* Skip the file if it is not a socket. * Also accept DT_UNKNOWN (0) in case * the C library or underlying file * system does not support d_type. */ if (dent->d_type != DT_SOCK && dent->d_type != DT_UNKNOWN) continue; #endif /* _DIRENT_HAVE_D_TYPE */ if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0) continue; printf("Selected interface '%s'\n", dent->d_name); ctrl_ifname = strdup(dent->d_name); break; } closedir(dir); } } #endif /* CONFIG_CTRL_IFACE_UDP */ ctrl_conn = wpa_cli_open_connection(ctrl_ifname); if (ctrl_conn) { if (warning_displayed) printf("Connection established.\n"); break; } if (!interactive) { perror("Failed to connect to wpa_supplicant - " "wpa_ctrl_open"); return -1; } if (!warning_displayed) { printf("Could not connect to wpa_supplicant - " "re-trying\n"); warning_displayed = 1; } os_sleep(1, 0); continue; } #ifndef _WIN32_WCE signal(SIGINT, wpa_cli_terminate); signal(SIGTERM, wpa_cli_terminate); #endif /* _WIN32_WCE */ #ifndef CONFIG_NATIVE_WINDOWS signal(SIGALRM, wpa_cli_alarm); #endif /* CONFIG_NATIVE_WINDOWS */ if (interactive || action_file) { if (wpa_ctrl_attach(ctrl_conn) == 0) { wpa_cli_attached = 1; } else { printf("Warning: Failed to attach to " "wpa_supplicant.\n"); if (!interactive) return -1; } } if (daemonize && os_daemonize(pid_file)) return -1; if (interactive) wpa_cli_interactive(); else if (action_file) wpa_cli_action(ctrl_conn); else wpa_request(ctrl_conn, argc - optind, &argv[optind]); free(ctrl_ifname); wpa_cli_cleanup(); return 0; }