netifd: add netlink udebug ring
[project/netifd.git] / main.c
diff --git a/main.c b/main.c
index 403dc125d5f039546617f84b155760b195fc100d..b6d2aa50060eb2aaf2aca4ffdbd282326830fda2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -19,8 +19,6 @@
 #include <stdarg.h>
 #include <syslog.h>
 
-#include <udebug.h>
-
 #include "netifd.h"
 #include "ubus.h"
 #include "config.h"
@@ -38,8 +36,31 @@ static char **global_argv;
 
 static struct list_head process_list = LIST_HEAD_INIT(process_list);
 static struct udebug ud;
-static struct udebug_buf udb;
-static bool udebug_enabled;
+static struct udebug_buf udb_log;
+struct udebug_buf udb_nl;
+static const struct udebug_buf_meta meta_log = {
+       .name = "netifd_log",
+       .format = UDEBUG_FORMAT_STRING,
+};
+static const struct udebug_buf_meta meta_nl = {
+       .name = "netifd_nl",
+       .format = UDEBUG_FORMAT_PACKET,
+       .sub_format = UDEBUG_DLT_NETLINK,
+};
+static struct udebug_ubus_ring rings[] = {
+       {
+               .buf = &udb_log,
+               .meta = &meta_log,
+               .default_entries = 1024,
+               .default_size = 64 * 1024,
+       },
+       {
+               .buf = &udb_nl,
+               .meta = &meta_nl,
+               .default_entries = 1024,
+               .default_size = 64 * 1024,
+       },
+};
 
 #define DEFAULT_LOG_LEVEL L_NOTICE
 
@@ -71,12 +92,12 @@ netifd_delete_process(struct netifd_process *proc)
 static void
 netifd_udebug_vprintf(const char *format, va_list ap)
 {
-       if (!udebug_enabled)
+       if (!udebug_buf_valid(&udb_log))
                return;
 
-       udebug_entry_init(&udb);
-       udebug_entry_vprintf(&udb, format, ap);
-       udebug_entry_add(&udb);
+       udebug_entry_init(&udb_log);
+       udebug_entry_vprintf(&udb_log, format, ap);
+       udebug_entry_add(&udb_log);
 }
 
 void netifd_udebug_printf(const char *format, ...)
@@ -88,27 +109,10 @@ void netifd_udebug_printf(const char *format, ...)
        va_end(ap);
 }
 
-void netifd_udebug_set_enabled(bool val)
+void netifd_udebug_config(struct udebug_ubus *ctx, struct blob_attr *data,
+                         bool enabled)
 {
-       static const struct udebug_buf_meta meta = {
-               .name = "netifd_log",
-               .format = UDEBUG_FORMAT_STRING,
-       };
-
-       if (udebug_enabled == val)
-               return;
-
-       udebug_enabled = val;
-       if (!val) {
-               udebug_buf_free(&udb);
-               udebug_free(&ud);
-               return;
-       }
-
-       udebug_init(&ud);
-       udebug_auto_connect(&ud, NULL);
-       udebug_buf_init(&udb, 1024, 64 * 1024);
-       udebug_buf_add(&ud, &udb, &meta);
+       udebug_ubus_apply_config(&ud, rings, ARRAY_SIZE(rings), data, enabled);
 }
 
 void
@@ -371,6 +375,12 @@ int main(int argc, char **argv)
                openlog("netifd", 0, LOG_DAEMON);
 
        netifd_setup_signals();
+       uloop_init();
+       udebug_init(&ud);
+       udebug_auto_connect(&ud, NULL);
+       for (size_t i = 0; i < ARRAY_SIZE(rings); i++)
+               udebug_ubus_ring_init(&ud, &rings[i]);
+
        if (netifd_ubus_init(socket) < 0) {
                fprintf(stderr, "Failed to connect to ubus\n");
                return 1;