[PATCH] wpa_supplicant: Support 'relog' command to re-open log files.

Ben Greear greearb
Fri Dec 3 00:26:10 PST 2010


On 11/29/2010 11:41 AM, Ben Greear wrote:
> This allows rolling log files:
>
> mv log.txt log.txt.1
> wpa_cli relog

Any feedback on this?

Thanks,
Ben

>
> Signed-off-by: Ben Greear<greearb at candelatech.com>
> ---
> :100644 100644 6f6fc69... fb7811d... M	src/utils/wpa_debug.c
> :100644 100644 f2e8646... fb59ea5... M	src/utils/wpa_debug.h
> :100644 100644 2a635dd... db99351... M	wpa_supplicant/ctrl_iface.c
> :100644 100644 2e2d3ab... 3577c68... M	wpa_supplicant/wpa_cli.c
>   src/utils/wpa_debug.c       |   25 +++++++++++++++++++++++++
>   src/utils/wpa_debug.h       |    1 +
>   wpa_supplicant/ctrl_iface.c |    6 ++++++
>   wpa_supplicant/wpa_cli.c    |    8 ++++++++
>   4 files changed, 40 insertions(+), 0 deletions(-)
>
> diff --git a/src/utils/wpa_debug.c b/src/utils/wpa_debug.c
> index 6f6fc69..fb7811d 100644
> --- a/src/utils/wpa_debug.c
> +++ b/src/utils/wpa_debug.c
> @@ -272,12 +272,37 @@ void wpa_hexdump_ascii_key(int level, const char *title, const u8 *buf,
>   	_wpa_hexdump_ascii(level, title, buf, len, wpa_debug_show_keys);
>   }
>
> +static char* last_path;
> +
> +int wpa_debug_reopen_file(void)
> +{
> +	int rv;
> +	if (last_path) {
> +		char* tmp = strdup(last_path);
> +		wpa_debug_close_file();
> +		rv = wpa_debug_open_file(tmp);
> +		free(tmp);
> +	}
> +	else {
> +		wpa_printf(MSG_ERROR, "Last-path was not set, cannot"
> +			   " re-open log file.\n");
> +		rv = -1;
> +	}
> +	return rv;
> +}
> +	
>
>   int wpa_debug_open_file(const char *path)
>   {
>   #ifdef CONFIG_DEBUG_FILE
>   	if (!path)
>   		return 0;
> +
> +	/* Save our path to enable re-open */
> +	if (last_path)
> +		free(last_path);
> +	last_path = strdup(path);
> +	
>   	out_file = fopen(path, "a");
>   	if (out_file == NULL) {
>   		wpa_printf(MSG_ERROR, "wpa_debug_open_file: Failed to open "
> diff --git a/src/utils/wpa_debug.h b/src/utils/wpa_debug.h
> index f2e8646..fb59ea5 100644
> --- a/src/utils/wpa_debug.h
> +++ b/src/utils/wpa_debug.h
> @@ -40,6 +40,7 @@ enum {
>   #else /* CONFIG_NO_STDOUT_DEBUG */
>
>   int wpa_debug_open_file(const char *path);
> +int wpa_debug_reopen_file(void);
>   void wpa_debug_close_file(void);
>
>   /**
> diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
> index 2a635dd..db99351 100644
> --- a/wpa_supplicant/ctrl_iface.c
> +++ b/wpa_supplicant/ctrl_iface.c
> @@ -2787,6 +2787,12 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
>   	if (os_strcmp(buf, "PING") == 0) {
>   		os_memcpy(reply, "PONG\n", 5);
>   		reply_len = 5;
> +	} else if (os_strncmp(buf, "RELOG", 5) == 0) {
> +		if (wpa_debug_reopen_file()<  0) {
> +			const char* msg = "ERROR:  Failed to reopen log file.\n";
> +			reply_len = strlen(msg);
> +			os_memcpy(reply, msg, reply_len);
> +		}
>   	} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
>   		wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
>   	} else if (os_strcmp(buf, "MIB") == 0) {
> diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c
> index 2e2d3ab..3577c68 100644
> --- a/wpa_supplicant/wpa_cli.c
> +++ b/wpa_supplicant/wpa_cli.c
> @@ -277,6 +277,11 @@ static int wpa_cli_cmd_ping(struct wpa_ctrl *ctrl, int argc, char *argv[])
>   	return wpa_ctrl_command(ctrl, "PING");
>   }
>
> +static int wpa_cli_cmd_relog(struct wpa_ctrl *ctrl, int argc, char *argv[])
> +{
> +	return wpa_ctrl_command(ctrl, "RELOG");
> +}
> +
>
>   static int wpa_cli_cmd_note(struct wpa_ctrl *ctrl, int argc, char *argv[])
>   {
> @@ -2164,6 +2169,9 @@ static struct wpa_cli_cmd wpa_cli_commands[] = {
>   	{ "ping", wpa_cli_cmd_ping,
>   	  cli_cmd_flag_none,
>   	  "= pings wpa_supplicant" },
> +	{ "relog", wpa_cli_cmd_relog,
> +	  cli_cmd_flag_none,
> +	  "= re-open log-file (allow rolling logs)" },
>   	{ "note", wpa_cli_cmd_note,
>   	  cli_cmd_flag_none,
>   	  "<text>  = add a note to wpa_supplicant debug log" },


-- 
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



More information about the Hostap mailing list