Revert "ubus: remove dnsmasq subscriber"
authorFelix Fietkau <nbd@nbd.name>
Thu, 17 Mar 2022 18:20:12 +0000 (19:20 +0100)
committerFelix Fietkau <nbd@nbd.name>
Thu, 17 Mar 2022 18:22:14 +0000 (19:22 +0100)
This reverts commit a78bd43c4a542c18842ef981641d4e8948cbdc28.
Under some conditions it might still be useful to have this as a backup

Signed-off-by: Felix Fietkau <nbd@nbd.name>
ubus.c

diff --git a/ubus.c b/ubus.c
index d38d53f3681751e9cfcb48c6b728a9fa12156ea8..644df1a8533bc4ec53c680d95a92c70a0a7b1182 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -307,10 +307,54 @@ static struct ubus_object qosify_object = {
        .n_methods = ARRAY_SIZE(qosify_methods),
 };
 
+static void
+qosify_subscribe_dnsmasq(struct ubus_context *ctx)
+{
+       static struct ubus_subscriber sub = {
+               .cb = qosify_ubus_add_dns_host,
+       };
+       uint32_t id;
+
+       if (!sub.obj.id &&
+           ubus_register_subscriber(ctx, &sub))
+               return;
+
+       if (ubus_lookup_id(ctx, "dnsmasq.dns", &id))
+               return;
+
+       ubus_subscribe(ctx, &sub, id);
+}
+
+static void
+qosify_ubus_event_cb(struct ubus_context *ctx, struct ubus_event_handler *ev,
+                    const char *type, struct blob_attr *msg)
+{
+       static const struct blobmsg_policy policy =
+               { "path", BLOBMSG_TYPE_STRING };
+       struct blob_attr *attr;
+       const char *path;
+
+       blobmsg_parse(&policy, 1, &attr, blobmsg_data(msg), blobmsg_len(msg));
+
+       if (!attr)
+               return;
+
+       path = blobmsg_get_string(attr);
+       if (!strcmp(path, "dnsmasq.dns"))
+               qosify_subscribe_dnsmasq(ctx);
+}
+
+
 static void
 ubus_connect_handler(struct ubus_context *ctx)
 {
+       static struct ubus_event_handler ev = {
+               .cb = qosify_ubus_event_cb
+       };
+
        ubus_add_object(ctx, &qosify_object);
+       ubus_register_event_handler(ctx, &ev, "ubus.object.add");
+       qosify_subscribe_dnsmasq(ctx);
 }
 
 static struct ubus_auto_conn conn;