[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