include $(TOPDIR)/rules.mk
PKG_NAME:=babeld
-PKG_VERSION:=1.12.2
+PKG_VERSION:=1.13
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.irif.fr/~jch/software/files/
-PKG_HASH:=1db22b6193070ea2450a1ab51196fd72f58a1329f780cb0388e2e4b2e7768cbb
+PKG_HASH:=d085ccccfb06a11d7fa5b54c51d9c410f5f3b0a9389f584951336ff178f293b8
PKG_MAINTAINER:=Gabriel Kerneis <gabriel@kerneis.info>, \
Baptiste Jonglez <openwrt-pkg@bitsofnetworks.org>, \
--- /dev/null
+From b29cb705c3b717a7d5c61719936464438b9a48f0 Mon Sep 17 00:00:00 2001
+From: Nick Hainke <vincent@systemli.org>
+Date: Fri, 15 Jan 2021 15:01:31 +0100
+Subject: [PATCH] local: make local_kind function accessible
+
+The kind-definitions are contained in the header file:
+ LOCAL_FLUSH 0
+ LOCAL_ADD 1
+ LOCAL_CHANGE 2
+
+The function (local_kind) that converts them into strings again
+is private. New addons (for example openwrt ubus bindings) that make
+use of babeld should also use the same function to convert the kind
+to string format. This allows to ensure uniformity over all addons.
+
+Signed-off-by: Nick Hainke <vincent@systemli.org>
+---
+ local.c | 2 +-
+ local.h | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+--- a/local.c
++++ b/local.c
+@@ -80,7 +80,7 @@ write_timeout(int fd, const void *buf, i
+ }
+ }
+
+-static const char *
++const char *
+ local_kind(int kind)
+ {
+ switch(kind) {
+--- a/local.h
++++ b/local.h
+@@ -55,3 +55,4 @@ int local_read(struct local_socket *s);
+ int local_header(struct local_socket *s);
+ struct local_socket *local_socket_create(int fd);
+ void local_socket_destroy(int i);
++const char *local_kind(int kind);
struct timeval now;
unsigned char myid[8];
-@@ -521,6 +523,9 @@ main(int argc, char **argv)
+@@ -505,6 +507,9 @@ main(int argc, char **argv)
}
}
init_signals();
rc = resize_receive_buffer(1500);
if(rc < 0)
-@@ -616,6 +621,8 @@ main(int argc, char **argv)
+@@ -597,6 +602,8 @@ main(int argc, char **argv)
FD_SET(local_sockets[i].fd, &readfds);
maxfd = MAX(maxfd, local_sockets[i].fd);
}
rc = select(maxfd + 1, &readfds, NULL, NULL, &tv);
if(rc < 0) {
if(errno != EINTR) {
-@@ -684,6 +691,9 @@ main(int argc, char **argv)
+@@ -665,6 +672,9 @@ main(int argc, char **argv)
i++;
}
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
+@@ -1017,7 +1019,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 ||
int b;
c = getbool(c, &b, gnc, closure);
if(c < -1)
-@@ -1054,6 +1057,8 @@ parse_option(int c, gnc_t gnc, void *clo
+@@ -1035,6 +1038,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;
static void babeld_add_route_buf(struct babel_route *route,
struct blob_buf *b) {
void *prefix;
- char channels[100];
-
- if (route->channels_len == 0) {
- channels[0] = '\0';
- } else {
- int i, j = 0;
- snprintf(channels, sizeof(channels), " chan (");
- j = strlen(channels);
- for (i = 0; i < route->channels_len; i++) {
- if (i > 0)
- channels[j++] = ',';
- snprintf(channels + j, sizeof(channels) - j, "%u",
- (unsigned)route->channels[i]);
- j = strlen(channels);
- }
- snprintf(channels + j, sizeof(channels) - j, ")");
- }
prefix = blobmsg_open_table(
b, format_prefix(route->src->prefix, route->src->plen));
blobmsg_add_u32(b, "refmetric", route->refmetric);
blobmsg_add_string(b, "id", format_eui64(route->src->id));
blobmsg_add_u32(b, "seqno", (uint32_t)route->seqno);
- blobmsg_add_string(b, "channels", channels);
blobmsg_add_u32(b, "age", (int)(now.tv_sec - route->time));
blobmsg_add_string(b, "via", format_address(route->neigh->address));
if (memcmp(route->nexthop, route->neigh->address, 16) != 0)
blobmsg_add_u32(b, "rxcost", neighbour_rxcost(neigh));
blobmsg_add_u32(b, "txcost", neigh->txcost);
blobmsg_add_string(b, "rtt", format_thousands(neigh->rtt));
- blobmsg_add_u32(b, "channel", neigh->ifp->channel);
blobmsg_add_u8(b, "if_up", if_up(neigh->ifp));
blobmsg_close_table(b, neighbour);
}