| --- a/babeld.c |
| +++ b/babeld.c |
| @@ -54,6 +54,8 @@ THE SOFTWARE. |
| #include "local.h" |
| #include "version.h" |
| |
| +#include "ubus.h" |
| + |
| struct timeval now; |
| |
| unsigned char myid[8]; |
| @@ -521,6 +523,9 @@ main(int argc, char **argv) |
| } |
| } |
| |
| + if(ubus_bindings) |
| + babeld_add_ubus(); |
| + |
| init_signals(); |
| rc = resize_receive_buffer(1500); |
| if(rc < 0) |
| @@ -616,6 +621,8 @@ main(int argc, char **argv) |
| FD_SET(local_sockets[i].fd, &readfds); |
| maxfd = MAX(maxfd, local_sockets[i].fd); |
| } |
| + if(ubus_bindings) |
| + maxfd = babeld_ubus_add_read_sock(&readfds, maxfd); |
| rc = select(maxfd + 1, &readfds, NULL, NULL, &tv); |
| if(rc < 0) { |
| if(errno != EINTR) { |
| @@ -684,6 +691,9 @@ main(int argc, char **argv) |
| i++; |
| } |
| |
| + if(ubus_bindings) |
| + babeld_ubus_receive(&readfds); |
| + |
| if(reopening) { |
| kernel_dump_time = now.tv_sec; |
| check_neighbours_timeout = now; |
| --- a/generate-version.sh |
| +++ b/generate-version.sh |
| @@ -10,4 +10,4 @@ else |
| version="unknown" |
| fi |
| |
| -echo "#define BABELD_VERSION \"$version\"" |
| +echo "#define BABELD_VERSION \"$version-ubus-mod\"" |
| --- a/configuration.c |
| +++ b/configuration.c |
| @@ -42,6 +42,8 @@ THE SOFTWARE. |
| #include "hmac.h" |
| #include "configuration.h" |
| |
| +#include "ubus.h" |
| + |
| static struct filter *input_filters = NULL; |
| static struct filter *output_filters = NULL; |
| static struct filter *redistribute_filters = NULL; |
| @@ -1036,7 +1038,8 @@ parse_option(int c, gnc_t gnc, void *clo |
| strcmp(token, "daemonise") == 0 || |
| strcmp(token, "skip-kernel-setup") == 0 || |
| strcmp(token, "ipv6-subtrees") == 0 || |
| - strcmp(token, "reflect-kernel-metric") == 0) { |
| + strcmp(token, "reflect-kernel-metric") == 0 || |
| + strcmp(token, "ubus-bindings") == 0) { |
| int b; |
| c = getbool(c, &b, gnc, closure); |
| if(c < -1) |
| @@ -1054,6 +1057,8 @@ parse_option(int c, gnc_t gnc, void *clo |
| has_ipv6_subtrees = b; |
| else if(strcmp(token, "reflect-kernel-metric") == 0) |
| reflect_kernel_metric = b; |
| + else if(strcmp(token, "ubus-bindings") == 0) |
| + ubus_bindings = b; |
| else |
| abort(); |
| } else if(strcmp(token, "protocol-group") == 0) { |
| --- a/local.c |
| +++ b/local.c |
| @@ -42,6 +42,8 @@ THE SOFTWARE. |
| #include "local.h" |
| #include "version.h" |
| |
| +#include "ubus.h" |
| + |
| int local_server_socket = -1; |
| struct local_socket local_sockets[MAX_LOCAL_SOCKETS]; |
| int num_local_sockets = 0; |
| @@ -191,6 +193,8 @@ local_notify_neighbour(struct neighbour |
| if(local_sockets[i].monitor) |
| local_notify_neighbour_1(&local_sockets[i], neigh, kind); |
| } |
| + if(ubus_bindings) |
| + ubus_notify_neighbour(neigh, kind); |
| } |
| |
| static void |
| @@ -228,6 +232,8 @@ local_notify_xroute(struct xroute *xrout |
| if(local_sockets[i].monitor) |
| local_notify_xroute_1(&local_sockets[i], xroute, kind); |
| } |
| + if(ubus_bindings) |
| + ubus_notify_xroute(xroute, kind); |
| } |
| |
| static void |
| @@ -273,6 +279,8 @@ local_notify_route(struct babel_route *r |
| if(local_sockets[i].monitor) |
| local_notify_route_1(&local_sockets[i], route, kind); |
| } |
| + if(ubus_bindings) |
| + ubus_notify_route(route, kind); |
| } |
| |
| static void |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -11,11 +11,11 @@ LDLIBS = -lrt |
| |
| SRCS = babeld.c net.c kernel.c util.c interface.c source.c neighbour.c \ |
| route.c xroute.c message.c resend.c configuration.c local.c \ |
| - hmac.c rfc6234/sha224-256.c BLAKE2/ref/blake2s-ref.c |
| + hmac.c ubus.c rfc6234/sha224-256.c BLAKE2/ref/blake2s-ref.c |
| |
| OBJS = babeld.o net.o kernel.o util.o interface.o source.o neighbour.o \ |
| route.o xroute.o message.o resend.o configuration.o local.o \ |
| - hmac.o rfc6234/sha224-256.o BLAKE2/ref/blake2s-ref.o |
| + hmac.o ubus.o rfc6234/sha224-256.o BLAKE2/ref/blake2s-ref.o |
| |
| babeld: $(OBJS) |
| $(CC) $(CFLAGS) $(LDFLAGS) -o babeld $(OBJS) $(LDLIBS) |