aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/dnsmasq/patches
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2017-08-22 16:43:02 +0200
committerJohn Crispin <john@phrozen.org>2017-08-22 21:31:39 +0200
commit34a206bc1194cfcc72e1ecbe9ed23aa8c85d2995 (patch)
tree7bfe5f552729a2c4dced34a961b6b0d4bd7fd5f1 /package/network/services/dnsmasq/patches
parentd18e0dc7d1f37e3bf779fb474ffc28b1fea690a4 (diff)
downloadupstream-34a206bc1194cfcc72e1ecbe9ed23aa8c85d2995.tar.gz
upstream-34a206bc1194cfcc72e1ecbe9ed23aa8c85d2995.tar.bz2
upstream-34a206bc1194cfcc72e1ecbe9ed23aa8c85d2995.zip
dnsmasq: add ubus notifications for new leases
Signed-off-by: John Crispin <john@phrozen.org>
Diffstat (limited to 'package/network/services/dnsmasq/patches')
-rw-r--r--package/network/services/dnsmasq/patches/240-ubus.patch134
1 files changed, 134 insertions, 0 deletions
diff --git a/package/network/services/dnsmasq/patches/240-ubus.patch b/package/network/services/dnsmasq/patches/240-ubus.patch
new file mode 100644
index 0000000000..41e2848594
--- /dev/null
+++ b/package/network/services/dnsmasq/patches/240-ubus.patch
@@ -0,0 +1,134 @@
+Index: dnsmasq-2.77/src/dnsmasq.c
+===================================================================
+--- dnsmasq-2.77.orig/src/dnsmasq.c
++++ dnsmasq-2.77/src/dnsmasq.c
+@@ -17,6 +17,8 @@
+ /* Declare static char *compiler_opts in config.h */
+ #define DNSMASQ_COMPILE_OPTS
+
++#include <libubus.h>
++
+ #include "dnsmasq.h"
+
+ struct daemon *daemon;
+@@ -32,6 +34,62 @@ static void fatal_event(struct event_des
+ static int read_event(int fd, struct event_desc *evp, char **msg);
+ static void poll_resolv(int force, int do_reload, time_t now);
+
++static struct ubus_context *ubus;
++static struct blob_buf b;
++
++static struct ubus_object_type ubus_object_type = {
++ .name = "dnsmasq",
++};
++
++static struct ubus_object ubus_object = {
++ .name = "dnsmasq",
++ .type = &ubus_object_type,
++};
++
++void ubus_event_bcast(const char *type, const char *mac, const char *ip, const char *name)
++{
++ if (!ubus || !ubus_object.has_subscribers)
++ return;
++
++ blob_buf_init(&b, 0);
++ if (mac)
++ blobmsg_add_string(&b, "mac", mac);
++ if (ip)
++ blobmsg_add_string(&b, "ip", ip);
++ if (name)
++ blobmsg_add_string(&b, "name", name);
++ ubus_notify(ubus, &ubus_object, type, b.head, -1);
++}
++
++static void set_ubus_listeners(void)
++{
++ if (!ubus)
++ return;
++
++ poll_listen(ubus->sock.fd, POLLIN);
++ poll_listen(ubus->sock.fd, POLLERR);
++ poll_listen(ubus->sock.fd, POLLHUP);
++}
++
++static void check_ubus_listeners()
++{
++ if (!ubus) {
++ ubus = ubus_connect(NULL);
++ if (ubus)
++ ubus_add_object(ubus, &ubus_object);
++ else
++ return;
++ }
++
++ if (poll_check(ubus->sock.fd, POLLIN))
++ ubus_handle_event(ubus);
++
++ if (poll_check(ubus->sock.fd, POLLHUP)) {
++ ubus_free(ubus);
++ ubus = NULL;
++ }
++}
++
+ int main (int argc, char **argv)
+ {
+ int bind_fallback = 0;
+@@ -911,6 +969,7 @@ int main (int argc, char **argv)
+ set_dbus_listeners();
+ #endif
+
++ set_ubus_listeners();
+ #ifdef HAVE_DHCP
+ if (daemon->dhcp || daemon->relay4)
+ {
+@@ -1041,6 +1100,8 @@ int main (int argc, char **argv)
+ check_dbus_listeners();
+ #endif
+
++ check_ubus_listeners();
++
+ check_dns_listeners(now);
+
+ #ifdef HAVE_TFTP
+Index: dnsmasq-2.77/Makefile
+===================================================================
+--- dnsmasq-2.77.orig/Makefile
++++ dnsmasq-2.77/Makefile
+@@ -85,7 +85,7 @@ all : $(BUILDDIR)
+ @cd $(BUILDDIR) && $(MAKE) \
+ top="$(top)" \
+ build_cflags="$(version) $(dbus_cflags) $(idn2_cflags) $(idn_cflags) $(ct_cflags) $(lua_cflags) $(nettle_cflags)" \
+- build_libs="$(dbus_libs) $(idn2_libs) $(idn_libs) $(ct_libs) $(lua_libs) $(sunos_libs) $(nettle_libs) $(gmp_libs)" \
++ build_libs="$(dbus_libs) $(idn2_libs) $(idn_libs) $(ct_libs) $(lua_libs) $(sunos_libs) $(nettle_libs) $(gmp_libs) -lubox -lubus" \
+ -f $(top)/Makefile dnsmasq
+
+ mostly_clean :
+Index: dnsmasq-2.77/src/dnsmasq.h
+===================================================================
+--- dnsmasq-2.77.orig/src/dnsmasq.h
++++ dnsmasq-2.77/src/dnsmasq.h
+@@ -1389,6 +1389,8 @@ void emit_dbus_signal(int action, struct
+ # endif
+ #endif
+
++void ubus_event_bcast(const char *type, const char *mac, const char *ip, const char *name);
++
+ /* ipset.c */
+ #ifdef HAVE_IPSET
+ void ipset_init(void);
+Index: dnsmasq-2.77/src/rfc2131.c
+===================================================================
+--- dnsmasq-2.77.orig/src/rfc2131.c
++++ dnsmasq-2.77/src/rfc2131.c
+@@ -1621,6 +1621,10 @@ static void log_packet(char *type, void
+ daemon->namebuff,
+ string ? string : "",
+ err ? err : "");
++ if (!strcmp(type, "DHCPACK"))
++ ubus_event_bcast("dhcp.ack", addr ? inet_ntoa(a) : NULL, daemon->namebuff, string ? string : NULL);
++ else if (!strcmp(type, "DHCPRELEASE"))
++ ubus_event_bcast("dhcp.release", addr ? inet_ntoa(a) : NULL, daemon->namebuff, string ? string : NULL);
+ }
+
+ static void log_options(unsigned char *start, u32 xid)