[PATCH] iw: add option to print human readable event time
From: Markus Theil <hidden>
Date: 2021-02-06 15:06:27
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Markus Theil <redacted> --- event.c | 30 ++++++++++++++++++++++++------ iw.h | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/event.c b/event.c
index 61395f8..8bdbbe9 100644
--- a/event.c
+++ b/event.c@@ -3,6 +3,7 @@ #include <net/if.h> #include <errno.h> #include <inttypes.h> +#include <time.h> #include "iw.h" static int no_seq_check(struct nl_msg *msg, void *arg)
@@ -905,12 +906,13 @@ static int print_event(struct nl_msg *msg, void *arg) int rem_nst; __u16 status; - if (args->time || args->reltime) { + if (args->time || args->reltime || args->ctime) { unsigned long long usecs, previous; previous = 1000000ULL * args->ts.tv_sec + args->ts.tv_usec; gettimeofday(&args->ts, NULL); usecs = 1000000ULL * args->ts.tv_sec + args->ts.tv_usec; + if (args->reltime) { if (!args->have_ts) { usecs = 0;
@@ -918,7 +920,16 @@ static int print_event(struct nl_msg *msg, void *arg) } else usecs -= previous; } - printf("%llu.%06llu: ", usecs/1000000, usecs % 1000000); + + if (args->ctime) { + struct tm *tm = localtime(&args->ts.tv_sec); + char buf[255]; + + memset(buf, 0, 255); + strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm); + printf("[%s.%06lu]: ", buf, args->ts.tv_usec); + } else + printf("%llu.%06llu: ", usecs/1000000, usecs % 1000000); } nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
@@ -1407,6 +1418,7 @@ static int print_events(struct nl80211_state *state, enum id_input id) { struct print_event_args args; + int num_time_formats = 0; int ret; memset(&args, 0, sizeof(args));
@@ -1417,17 +1429,22 @@ static int print_events(struct nl80211_state *state, while (argc > 0) { if (strcmp(argv[0], "-f") == 0) args.frame = true; - else if (strcmp(argv[0], "-t") == 0) + else if (strcmp(argv[0], "-t") == 0) { + num_time_formats++; args.time = true; - else if (strcmp(argv[0], "-r") == 0) + } else if (strcmp(argv[0], "-T") == 0) { + num_time_formats++; + args.ctime = true; + } else if (strcmp(argv[0], "-r") == 0) { + num_time_formats++; args.reltime = true; - else + } else return 1; argc--; argv++; } - if (args.time && args.reltime) + if (num_time_formats > 1) return 1; if (argc)
@@ -1442,5 +1459,6 @@ static int print_events(struct nl80211_state *state, TOPLEVEL(event, "[-t|-r] [-f]", 0, 0, CIB_NONE, print_events, "Monitor events from the kernel.\n" "-t - print timestamp\n" + "-T - print absolute, human-readable timestamp\n" "-r - print relative timestamp\n" "-f - print full frame for auth/assoc etc.");
diff --git a/iw.h b/iw.h
index 807adec..7f7f4fc 100644
--- a/iw.h
+++ b/iw.h@@ -181,7 +181,7 @@ int handle_cmd(struct nl80211_state *state, enum id_input idby, struct print_event_args { struct timeval ts; /* internal */ bool have_ts; /* must be set false */ - bool frame, time, reltime; + bool frame, time, reltime, ctime; }; __u32 listen_events(struct nl80211_state *state,
--
2.30.0