summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2025-05-28 11:10:13 +0000
committerFelix Fietkau2025-05-28 11:10:14 +0000
commit263a0cb87b50a5dffabb830d976df1cd7f2b374a (patch)
tree7f71a94aaf0c451443c14c80ed98c619f23ae738
parentc5ca22a71b2ecb83a2a28b46391dac443be315c2 (diff)
downloadmdnsd-263a0cb87b50a5dffabb830d976df1cd7f2b374a.tar.gz
udebug: use proper libudebug API
Replace handwritten code for enabling debug ring buffers Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--main.c51
-rw-r--r--ubus.c75
-rw-r--r--ubus.h4
3 files changed, 30 insertions, 100 deletions
diff --git a/main.c b/main.c
index 752e78a..521a266 100644
--- a/main.c
+++ b/main.c
@@ -26,7 +26,6 @@
#include <netinet/in.h>
#include <arpa/nameser.h>
-#include <udebug.h>
#include <libubus.h>
#include <libubox/uloop.h>
@@ -42,18 +41,30 @@ int cfg_proto = 0;
int cfg_no_subnet = 0;
static struct udebug ud;
-static struct udebug_buf udb;
-static bool udebug_enabled;
+static struct udebug_buf udb_log;
+static const struct udebug_buf_meta meta_log = {
+ .name = "umdns_log",
+ .format = UDEBUG_FORMAT_STRING,
+};
+
+static struct udebug_ubus_ring rings[] = {
+ {
+ .buf = &udb_log,
+ .meta = &meta_log,
+ .default_entries = 1024,
+ .default_size = 64 * 1024,
+ }
+};
static void
umdns_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 umdns_udebug_printf(const char *format, ...)
@@ -65,27 +76,11 @@ void umdns_udebug_printf(const char *format, ...)
va_end(ap);
}
-void umdns_udebug_set_enabled(bool val)
-{
- static const struct udebug_buf_meta meta = {
- .name = "umdns_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);
+void umdns_udebug_config(struct udebug_ubus *ctx, struct blob_attr *data,
+ bool enabled)
+{
+ udebug_ubus_apply_config(&ud, rings, ARRAY_SIZE(rings), data, enabled);
}
static void
@@ -100,6 +95,8 @@ main(int argc, char **argv)
int ch, ttl;
uloop_init();
+ udebug_init(&ud);
+ udebug_auto_connect(&ud, NULL);
while ((ch = getopt(argc, argv, "t:i:d46n")) != -1) {
switch (ch) {
diff --git a/ubus.c b/ubus.c
index 0319554..813db9e 100644
--- a/ubus.c
+++ b/ubus.c
@@ -28,8 +28,8 @@
#include "interface.h"
static struct ubus_auto_conn conn;
+static struct udebug_ubus udebug;
static struct blob_buf b;
-static struct ubus_subscriber udebug_sub;
static int
umdns_reload(struct ubus_context *ctx, struct ubus_object *obj,
@@ -369,87 +369,16 @@ static struct ubus_object umdns_object = {
.n_methods = ARRAY_SIZE(umdns_methods),
};
-static struct blob_attr *
-find_attr(struct blob_attr *attr, const char *name, enum blobmsg_type type)
-{
- struct blobmsg_policy policy = { name, type };
- struct blob_attr *ret;
-
- if (!attr)
- return NULL;
-
- blobmsg_parse_attr(&policy, 1, &ret, attr);
-
- return ret;
-}
-
-static void
-umdns_udebug_config_cb(struct blob_attr *data)
-{
- enum {
- CFG_ATTR_ENABLED,
- __CFG_ATTR_MAX
- };
- static const struct blobmsg_policy policy[__CFG_ATTR_MAX] = {
- [CFG_ATTR_ENABLED] = { "enabled", BLOBMSG_TYPE_STRING },
- };
- struct blob_attr *tb[__CFG_ATTR_MAX];
- bool en;
-
- data = find_attr(data, "service", BLOBMSG_TYPE_TABLE);
- data = find_attr(data, "umdns", BLOBMSG_TYPE_TABLE);
- if (!data)
- return;
-
- blobmsg_parse_attr(policy, __CFG_ATTR_MAX, tb, data);
- if (!tb[CFG_ATTR_ENABLED])
- return;
-
- en = !!atoi(blobmsg_get_string(tb[CFG_ATTR_ENABLED]));
- umdns_udebug_set_enabled(en);
-}
-
-static int
-umdns_udebug_notify_cb(struct ubus_context *ctx, struct ubus_object *obj,
- struct ubus_request_data *req, const char *method,
- struct blob_attr *msg)
-{
- umdns_udebug_config_cb(msg);
-
- return 0;
-}
-
-static void
-umdns_udebug_req_cb(struct ubus_request *req, int type, struct blob_attr *msg)
-{
- umdns_udebug_config_cb(msg);
-}
-
-static bool
-umdns_udebug_sub_cb(struct ubus_context *ctx, struct ubus_subscriber *sub,
- const char *path)
-{
- return !strcmp(path, "udebug");
-}
-
-
static void
ubus_connect_handler(struct ubus_context *ctx)
{
- uint32_t id;
int ret;
ret = ubus_add_object(ctx, &umdns_object);
if (ret)
fprintf(stderr, "Failed to add object: %s\n", ubus_strerror(ret));
- udebug_sub.cb = umdns_udebug_notify_cb;
- udebug_sub.new_obj_cb = umdns_udebug_sub_cb;
- ubus_register_subscriber(&conn.ctx, &udebug_sub);
- if (ubus_lookup_id(&conn.ctx, "udebug", &id) == 0) {
- ubus_subscribe(&conn.ctx, &udebug_sub, id);
- ubus_invoke(&conn.ctx, id, "get_config", NULL, umdns_udebug_req_cb, NULL, 1000);
- }
+ udebug_ubus_init(&udebug, ctx, "umdns", umdns_udebug_config);
}
void
diff --git a/ubus.h b/ubus.h
index e880b73..4796825 100644
--- a/ubus.h
+++ b/ubus.h
@@ -14,7 +14,11 @@
#ifndef _UBUS_H__
#define _UBUS_H__
+#include <udebug.h>
+
extern void ubus_startup(void);
extern int ubus_service_list(ubus_data_handler_t cb);
+void umdns_udebug_config(struct udebug_ubus *ctx, struct blob_attr *data,
+ bool enabled);
#endif