]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add interface name to wpa_msg() output
authorBen Greear <greearb@candelatech.com>
Sun, 6 Feb 2011 18:39:34 +0000 (20:39 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 6 Feb 2011 18:39:34 +0000 (20:39 +0200)
This makes log files much more readable if multiple interfaces
are being controlled by the same process. The interface name is
added to stdout/file/syslog entries, but not to the messages
sent to control interface monitors to avoid issues with parsing
in external programs.

Signed-off-by: Ben Greear <greearb@candelatech.com>
src/utils/wpa_debug.c
src/utils/wpa_debug.h
wpa_supplicant/wpa_supplicant.c

index 560b85a84873184fcacf2cf5413a036a1ae78bf2..fa453eb61a913d46507720e503ffda32d4955ffc 100644 (file)
@@ -348,12 +348,21 @@ void wpa_msg_register_cb(wpa_msg_cb_func func)
 }
 
 
+static wpa_msg_get_ifname_func wpa_msg_ifname_cb = NULL;
+
+void wpa_msg_register_ifname_cb(wpa_msg_get_ifname_func func)
+{
+       wpa_msg_ifname_cb = func;
+}
+
+
 void wpa_msg(void *ctx, int level, const char *fmt, ...)
 {
        va_list ap;
        char *buf;
        const int buflen = 2048;
        int len;
+       char prefix[130];
 
        buf = os_malloc(buflen);
        if (buf == NULL) {
@@ -362,9 +371,19 @@ void wpa_msg(void *ctx, int level, const char *fmt, ...)
                return;
        }
        va_start(ap, fmt);
+       prefix[0] = '\0';
+       if (wpa_msg_ifname_cb) {
+               const char *ifname = wpa_msg_ifname_cb(ctx);
+               if (ifname) {
+                       int res = os_snprintf(prefix, sizeof(prefix), "%s: ",
+                                             ifname);
+                       if (res < 0 || res >= (int) sizeof(prefix))
+                               prefix[0] = '\0';
+               }
+       }
        len = vsnprintf(buf, buflen, fmt, ap);
        va_end(ap);
-       wpa_printf(level, "%s", buf);
+       wpa_printf(level, "%s%s", prefix, buf);
        if (wpa_msg_cb)
                wpa_msg_cb(ctx, level, buf, len);
        os_free(buf);
index fb59ea5404ee0f91719ff1558fbb70b0cb322964..ee258ffec96a20e75274d17cf3c93c10cee95438 100644 (file)
@@ -188,8 +188,11 @@ typedef void (*wpa_msg_cb_func)(void *ctx, int level, const char *txt,
  * @func: Callback function (%NULL to unregister)
  */
 void wpa_msg_register_cb(wpa_msg_cb_func func);
-#endif /* CONFIG_NO_WPA_MSG */
 
+typedef const char * (*wpa_msg_get_ifname_func)(void *ctx);
+void wpa_msg_register_ifname_cb(wpa_msg_get_ifname_func func);
+
+#endif /* CONFIG_NO_WPA_MSG */
 
 #ifdef CONFIG_NO_HOSTAPD_LOGGER
 #define hostapd_logger(args...) do { } while (0)
index 5b94a27abf2b967ea72f3e8ae49c09f00cb14187..aad6c198868b3ae78f55d0f535e3e62d089f7318 100644 (file)
@@ -2333,6 +2333,15 @@ struct wpa_supplicant * wpa_supplicant_get_iface(struct wpa_global *global,
 }
 
 
+static const char * wpa_supplicant_msg_ifname_cb(void *ctx)
+{
+       struct wpa_supplicant *wpa_s = ctx;
+       if (wpa_s == NULL)
+               return NULL;
+       return wpa_s->ifname;
+}
+
+
 /**
  * wpa_supplicant_init - Initialize %wpa_supplicant
  * @params: Parameters for %wpa_supplicant
@@ -2350,6 +2359,8 @@ struct wpa_global * wpa_supplicant_init(struct wpa_params *params)
        if (params == NULL)
                return NULL;
 
+       wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
+
        wpa_debug_open_file(params->wpa_debug_file_path);
        if (params->wpa_debug_syslog)
                wpa_debug_open_syslog();