From: Ben Greear <greearb@xxxxxxxxxxxxxxx> I wanted a way to start wpa_cli, have it do the keep-alive ping, and print events as they are received. I do not want an action file, and I do not need interactive mode, and I want to run this in a way where stdin may not be open. So, introduce '-m' monitor mode. wpa_cli -m -g /var/run/wpa_supplicant_if_wiphy0 Signed-off-by: Ben Greear <greearb@xxxxxxxxxxxxxxx> --- wpa_supplicant/wpa_cli.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c index 510f385..7edacac 100644 --- a/wpa_supplicant/wpa_cli.c +++ b/wpa_supplicant/wpa_cli.c @@ -54,6 +54,7 @@ static const char *pid_file = NULL; static const char *action_file = NULL; static int ping_interval = 5; static int interactive = 0; +static int do_monitor = 0; static char *ifname_prefix = NULL; static DEFINE_DL_LIST(bsses); /* struct cli_txt_entry */ @@ -89,6 +90,7 @@ static void usage(void) "events from\n" " wpa_supplicant\n" " -B = run a daemon in the background\n" + " -m = Run in monitor mode, even if we don't have an action file.\n" " default path: " CONFIG_CTRL_IFACE_DIR "\n" " default interface: first interface found in socket path\n"); print_help(NULL); @@ -123,7 +125,7 @@ static int wpa_cli_open_connection(const char *ifname, int attach) if (ctrl_conn == NULL) return -1; - if (attach && interactive) + if (attach && (interactive || do_monitor)) mon_conn = wpa_ctrl_open(ifname); else mon_conn = NULL; @@ -168,7 +170,7 @@ static int wpa_cli_open_connection(const char *ifname, int attach) return -1; } - if (attach && interactive) + if (attach && (interactive || do_monitor)) mon_conn = wpa_ctrl_open2(cfile, client_socket_dir); else mon_conn = NULL; @@ -178,7 +180,7 @@ static int wpa_cli_open_connection(const char *ifname, int attach) if (mon_conn) { if (wpa_ctrl_attach(mon_conn) == 0) { wpa_cli_attached = 1; - if (interactive) + if (interactive || do_monitor) eloop_register_read_sock( wpa_ctrl_get_fd(mon_conn), wpa_cli_mon_receive, NULL, NULL); @@ -200,7 +202,7 @@ static void wpa_cli_close_connection(void) return; if (wpa_cli_attached) { - wpa_ctrl_detach(interactive ? mon_conn : ctrl_conn); + wpa_ctrl_detach((interactive || do_monitor) ? mon_conn : ctrl_conn); wpa_cli_attached = 0; } wpa_ctrl_close(ctrl_conn); @@ -3682,6 +3684,9 @@ static void wpa_cli_action_process(const char *msg) if (eloop_terminated()) return; + if (!action_file) + return; + pos = msg; if (os_strncmp(pos, "IFNAME=", 7) == 0) { const char *end; @@ -3818,8 +3823,9 @@ static void wpa_cli_reconnect(void) return; } - if (interactive) { - update_ifnames(ctrl_conn); + if (interactive || do_monitor) { + if (interactive) + update_ifnames(ctrl_conn); mon_conn = wpa_ctrl_open(global); if (mon_conn) { if (wpa_ctrl_attach(mon_conn) == 0) { @@ -4269,6 +4275,7 @@ static void wpa_cli_action(struct wpa_ctrl *ctrl) int fd; fd = wpa_ctrl_get_fd(ctrl); + eloop_register_timeout(ping_interval, 0, wpa_cli_action_ping, ctrl, NULL); eloop_register_read_sock(fd, wpa_cli_action_receive, ctrl, NULL); @@ -4369,7 +4376,7 @@ int main(int argc, char *argv[]) return -1; for (;;) { - c = getopt(argc, argv, "a:Bg:G:hi:p:P:s:v"); + c = getopt(argc, argv, "a:Bg:G:hi:mp:P:s:v"); if (c < 0) break; switch (c) { @@ -4391,6 +4398,9 @@ int main(int argc, char *argv[]) case 'v': printf("%s\n", wpa_cli_version); return 0; + case 'm': + do_monitor = 1; + break; case 'i': os_free(ctrl_ifname); ctrl_ifname = os_strdup(optarg); @@ -4415,7 +4425,7 @@ int main(int argc, char *argv[]) */ setbuf(stdout, NULL); - interactive = (argc == optind) && (action_file == NULL); + interactive = (argc == optind) && (action_file == NULL) && !do_monitor; if (interactive) printf("%s\n\n%s\n\n", wpa_cli_version, cli_license); @@ -4436,8 +4446,9 @@ int main(int argc, char *argv[]) return -1; } - if (interactive) { - update_ifnames(ctrl_conn); + if (interactive || do_monitor) { + if (interactive) + update_ifnames(ctrl_conn); mon_conn = wpa_ctrl_open(global); if (mon_conn) { if (wpa_ctrl_attach(mon_conn) == 0) { @@ -4458,7 +4469,7 @@ int main(int argc, char *argv[]) eloop_register_signal_terminate(wpa_cli_terminate, NULL); - if (ctrl_ifname == NULL) + if (ctrl_ifname == NULL && !do_monitor) ctrl_ifname = wpa_cli_get_default_ifname(); if (interactive) { @@ -4473,7 +4484,7 @@ int main(int argc, char *argv[]) return -1; } - if (action_file) { + if (action_file || do_monitor) { if (wpa_ctrl_attach(ctrl_conn) == 0) { wpa_cli_attached = 1; } else { @@ -4486,7 +4497,7 @@ int main(int argc, char *argv[]) if (daemonize && os_daemonize(pid_file) && eloop_sock_requeue()) return -1; - if (action_file) + if (action_file || do_monitor) wpa_cli_action(ctrl_conn); else ret = wpa_request(ctrl_conn, argc - optind, -- 2.7.5 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap