diff --git a/package/gluon-mesh-babel/Makefile b/package/gluon-mesh-babel/Makefile index 20ccd125f3..c60619d86e 100644 --- a/package/gluon-mesh-babel/Makefile +++ b/package/gluon-mesh-babel/Makefile @@ -10,7 +10,7 @@ include ../gluon.mk define Package/gluon-mesh-babel TITLE:=Babel mesh - DEPENDS:=+gluon-core +babeld +mmfd +libiwinfo +libgluonutil +firewall +libjson-c +libnl-tiny +libubus +libubox +libblobmsg-json +libbabelhelper +luabitop + DEPENDS:=+gluon-core +babeld +mmfd +libgluonutil +firewall +libjson-c +libnl-tiny +libubus +libubox +libblobmsg-json +libbabelhelper +luabitop PROVIDES:=gluon-mesh-provider endef diff --git a/package/gluon-mesh-babel/src/Makefile b/package/gluon-mesh-babel/src/Makefile index 98a22d5e5c..80d29fa942 100644 --- a/package/gluon-mesh-babel/src/Makefile +++ b/package/gluon-mesh-babel/src/Makefile @@ -25,7 +25,7 @@ LDFLAGS_JSONC = $(shell pkg-config --libs json-c) respondd.so: respondd.c handle_neighbour.c - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -shared $(LDFLAGS_JSONC) -o $@ $^ -lgluonutil -lblobmsg_json -lubox -lubus -liwinfo -luci + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -shared $(LDFLAGS_JSONC) -o $@ $^ -lgluonutil -lblobmsg_json -lubox -lubus -luci neighbours-babel: neighbours-babel.c handle_neighbour.c $(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_JSONC) $(LDFLAGS) $(LDLIBS) $(LDFLAGS_JSONC) -o $@ $^ diff --git a/package/gluon-mesh-babel/src/respondd.c b/package/gluon-mesh-babel/src/respondd.c index 29f20ccf9b..9cfddb33a0 100644 --- a/package/gluon-mesh-babel/src/respondd.c +++ b/package/gluon-mesh-babel/src/respondd.c @@ -26,7 +26,6 @@ #include -#include #include #include #include @@ -423,72 +422,6 @@ static struct json_object * get_traffic(void) { return ret; } -static void count_iface_stations(size_t *wifi24, size_t *wifi5, const char *ifname) { - const struct iwinfo_ops *iw = iwinfo_backend(ifname); - if (!iw) - return; - - int freq; - if (iw->frequency(ifname, &freq) < 0) - return; - - size_t *wifi; - if (freq >= 2400 && freq < 2500) - wifi = wifi24; - else if (freq >= 5000 && freq < 6000) - wifi = wifi5; - else - return; - - int len; - char buf[IWINFO_BUFSIZE]; - if (iw->assoclist(ifname, buf, &len) < 0) - return; - - struct iwinfo_assoclist_entry *entry; - for (entry = (struct iwinfo_assoclist_entry *)buf; (char*)(entry+1) <= buf + len; entry++) { - if (entry->inactive > MAX_INACTIVITY) - continue; - - (*wifi)++; - } -} - -static void count_stations(size_t *wifi24, size_t *wifi5) { - struct uci_context *ctx = uci_alloc_context(); - ctx->flags &= ~UCI_FLAG_STRICT; - - - struct uci_package *p; - if (uci_load(ctx, "wireless", &p)) - goto end; - - - struct uci_element *e; - uci_foreach_element(&p->sections, e) { - struct uci_section *s = uci_to_section(e); - if (strcmp(s->type, "wifi-iface")) - continue; - - const char *network = uci_lookup_option_string(ctx, s, "network"); - if (!network || strcmp(network, "client")) - continue; - - const char *mode = uci_lookup_option_string(ctx, s, "mode"); - if (!mode || strcmp(mode, "ap")) - continue; - - const char *ifname = uci_lookup_option_string(ctx, s, "ifname"); - if (!ifname) - continue; - - count_iface_stations(wifi24, wifi5, ifname); - } - -end: - uci_free_context(ctx); -} - static bool handle_route_addgw_nexthop(char **data, void *arg) { struct json_object *obj = (struct json_object*) arg; if (data[PREFIX] && data[FROM] && data[VIA] && data[IF]) { @@ -570,21 +503,13 @@ static int ask_l3roamd_for_client_count() { } static struct json_object * get_clients(void) { - size_t wifi24 = 0, wifi5 = 0; - - count_stations(&wifi24, &wifi5); - int total = ask_l3roamd_for_client_count(); - size_t wifi = wifi24 + wifi5; struct json_object *ret = json_object_new_object(); if (total >= 0) json_object_object_add(ret, "total", json_object_new_int(total)); - json_object_object_add(ret, "wifi", json_object_new_int(wifi)); - json_object_object_add(ret, "wifi24", json_object_new_int(wifi24)); - json_object_object_add(ret, "wifi5", json_object_new_int(wifi5)); return ret; } @@ -599,89 +524,6 @@ static struct json_object * respondd_provider_statistics(void) { return ret; } -static struct json_object * get_wifi_neighbours(const char *ifname) { - const struct iwinfo_ops *iw = iwinfo_backend(ifname); - if (!iw) - return NULL; - - int len; - char buf[IWINFO_BUFSIZE]; - if (iw->assoclist(ifname, buf, &len) < 0) - return NULL; - - struct json_object *neighbours = json_object_new_object(); - - struct iwinfo_assoclist_entry *entry; - for (entry = (struct iwinfo_assoclist_entry *)buf; (char*)(entry+1) <= buf + len; entry++) { - if (entry->inactive > MAX_INACTIVITY) - continue; - - struct json_object *obj = json_object_new_object(); - - json_object_object_add(obj, "signal", json_object_new_int(entry->signal)); - json_object_object_add(obj, "noise", json_object_new_int(entry->noise)); - json_object_object_add(obj, "inactive", json_object_new_int(entry->inactive)); - - char mac[18]; - snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", - entry->mac[0], entry->mac[1], entry->mac[2], - entry->mac[3], entry->mac[4], entry->mac[5]); - - json_object_object_add(neighbours, mac, obj); - } - - struct json_object *ret = json_object_new_object(); - - if (json_object_object_length(neighbours)) - json_object_object_add(ret, "neighbours", neighbours); - else - json_object_put(neighbours); - - return ret; -} - -static struct json_object * get_wifi(void) { - - struct uci_context *ctx = uci_alloc_context(); - ctx->flags &= ~UCI_FLAG_STRICT; - - struct json_object *ret = json_object_new_object(); - - struct uci_package *p; - if (uci_load(ctx, "network", &p)) - goto end; - - - struct uci_element *e; - uci_foreach_element(&p->sections, e) { - struct uci_section *s = uci_to_section(e); - if (strcmp(s->type, "interface")) - continue; - - const char *proto = uci_lookup_option_string(ctx, s, "proto"); - if (!proto || strcmp(proto, "gluon_mesh")) - continue; - - const char *ifname = uci_lookup_option_string(ctx, s, "ifname"); - if (!ifname) - continue; - - char *ifaddr = gluonutil_get_interface_address(ifname); - if (!ifaddr) - continue; - - struct json_object *neighbours = get_wifi_neighbours(ifname); - if (neighbours) - json_object_object_add(ret, ifaddr, neighbours); - - free(ifaddr); - } - -end: - uci_free_context(ctx); - return ret; -} - static struct json_object * respondd_provider_neighbours(void) { struct json_object *ret = json_object_new_object(); @@ -689,11 +531,6 @@ static struct json_object * respondd_provider_neighbours(void) { if (babel) json_object_object_add(ret, "babel", babel); - - struct json_object *wifi = get_wifi(); - if (wifi) - json_object_object_add(ret, "wifi", wifi); - return ret; } diff --git a/package/gluon-mesh-batman-adv/Makefile b/package/gluon-mesh-batman-adv/Makefile index 4b158f5a12..46fe4d02e5 100644 --- a/package/gluon-mesh-batman-adv/Makefile +++ b/package/gluon-mesh-batman-adv/Makefile @@ -7,7 +7,7 @@ include ../gluon.mk define Package/gluon-mesh-batman-adv/common PROVIDES:=gluon-mesh-batman-adv - DEPENDS:=+gluon-core +libgluonutil +gluon-client-bridge +gluon-ebtables +firewall +libiwinfo +kmod-dummy +libnl-tiny +libbatadv +@GLUON_SPECIALIZE_KERNEL:KERNEL_DUMMY +@GLUON_SPECIALIZE_KERNEL:KERNEL_CRC16 +@GLUON_SPECIALIZE_KERNEL:KERNEL_LIBCRC32C + DEPENDS:=+gluon-core +libgluonutil +gluon-client-bridge +gluon-ebtables +firewall +kmod-dummy +libnl-tiny +libbatadv +@GLUON_SPECIALIZE_KERNEL:KERNEL_DUMMY +@GLUON_SPECIALIZE_KERNEL:KERNEL_CRC16 +@GLUON_SPECIALIZE_KERNEL:KERNEL_LIBCRC32C endef define Package/gluon-mesh-batman-adv-14 diff --git a/package/gluon-mesh-batman-adv/src/Makefile b/package/gluon-mesh-batman-adv/src/Makefile index 0974669b02..b40c52b15b 100644 --- a/package/gluon-mesh-batman-adv/src/Makefile +++ b/package/gluon-mesh-batman-adv/src/Makefile @@ -32,4 +32,4 @@ CFLAGS += $(LIBBATADV_CFLAGS) LDLIBS += $(LIBBATADV_LDLIBS) respondd.so: respondd.c - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil -liwinfo -luci + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil -luci diff --git a/package/gluon-mesh-batman-adv/src/respondd.c b/package/gluon-mesh-batman-adv/src/respondd.c index 810dfc5932..e13b3b92ca 100644 --- a/package/gluon-mesh-batman-adv/src/respondd.c +++ b/package/gluon-mesh-batman-adv/src/respondd.c @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -76,7 +75,8 @@ struct gw_netlink_opts { }; struct clients_netlink_opts { - size_t non_wifi; + size_t total; + size_t wifi; struct batadv_nlquery_opts query_opts; }; @@ -444,74 +444,6 @@ static struct json_object * get_traffic(void) { return ret; } -static void count_iface_stations(size_t *wifi24, size_t *wifi5, const char *ifname) { - const struct iwinfo_ops *iw = iwinfo_backend(ifname); - if (!iw) - return; - - int freq; - if (iw->frequency(ifname, &freq) < 0) - return; - - size_t *wifi; - if (freq >= 2400 && freq < 2500) - wifi = wifi24; - else if (freq >= 5000 && freq < 6000) - wifi = wifi5; - else - return; - - int len; - char buf[IWINFO_BUFSIZE]; - if (iw->assoclist(ifname, buf, &len) < 0) - return; - - struct iwinfo_assoclist_entry *entry; - for (entry = (struct iwinfo_assoclist_entry *)buf; (char*)(entry+1) <= buf + len; entry++) { - if (entry->inactive > MAX_INACTIVITY) - continue; - - (*wifi)++; - } -} - -static void count_stations(size_t *wifi24, size_t *wifi5) { - struct uci_context *ctx = uci_alloc_context(); - if (!ctx) - return; - ctx->flags &= ~UCI_FLAG_STRICT; - - - struct uci_package *p; - if (uci_load(ctx, "wireless", &p)) - goto end; - - - struct uci_element *e; - uci_foreach_element(&p->sections, e) { - struct uci_section *s = uci_to_section(e); - if (strcmp(s->type, "wifi-iface")) - continue; - - const char *network = uci_lookup_option_string(ctx, s, "network"); - if (!network || strcmp(network, "client")) - continue; - - const char *mode = uci_lookup_option_string(ctx, s, "mode"); - if (!mode || strcmp(mode, "ap")) - continue; - - const char *ifname = uci_lookup_option_string(ctx, s, "ifname"); - if (!ifname) - continue; - - count_iface_stations(wifi24, wifi5, ifname); - } - - end: - uci_free_context(ctx); -} - static const enum batadv_nl_attrs clients_mandatory[] = { BATADV_ATTR_TT_FLAGS, /* Entries without the BATADV_TT_CLIENT_NOPURGE flag do not have a @@ -552,24 +484,27 @@ static int parse_clients_list_netlink_cb(struct nl_msg *msg, void *arg) flags = nla_get_u32(attrs[BATADV_ATTR_TT_FLAGS]); - if (flags & (BATADV_TT_CLIENT_NOPURGE | BATADV_TT_CLIENT_WIFI)) + if (flags & BATADV_TT_CLIENT_NOPURGE) return NL_OK; lastseen = nla_get_u32(attrs[BATADV_ATTR_LAST_SEEN_MSECS]); if (lastseen > MAX_INACTIVITY) return NL_OK; - opts->non_wifi++; + if (flags & BATADV_TT_CLIENT_WIFI) + opts->wifi++; + + opts->total++; return NL_OK; } static struct json_object * get_clients(void) { - size_t wifi24 = 0, wifi5 = 0; size_t total; size_t wifi; struct clients_netlink_opts opts = { - .non_wifi = 0, + .total = 0, + .wifi = 0, .query_opts = { .err = 0, }, @@ -579,15 +514,9 @@ static struct json_object * get_clients(void) { parse_clients_list_netlink_cb, NLM_F_DUMP, &opts.query_opts); - count_stations(&wifi24, &wifi5); - wifi = wifi24 + wifi5; - total = wifi + opts.non_wifi; - struct json_object *ret = json_object_new_object(); - json_object_object_add(ret, "total", json_object_new_int(total)); - json_object_object_add(ret, "wifi", json_object_new_int(wifi)); - json_object_object_add(ret, "wifi24", json_object_new_int(wifi24)); - json_object_object_add(ret, "wifi5", json_object_new_int(wifi5)); + json_object_object_add(ret, "total", json_object_new_int(opts.total)); + json_object_object_add(ret, "wifi", json_object_new_int(opts.wifi)); return ret; } @@ -723,80 +652,6 @@ static struct json_object * get_batadv(void) { return ifnames2addrs(opts.interfaces); } -static struct json_object * get_wifi_neighbours(const char *ifname) { - const struct iwinfo_ops *iw = iwinfo_backend(ifname); - if (!iw) - return NULL; - - int len; - char buf[IWINFO_BUFSIZE]; - if (iw->assoclist(ifname, buf, &len) < 0) - return NULL; - - struct json_object *neighbours = json_object_new_object(); - - struct iwinfo_assoclist_entry *entry; - for (entry = (struct iwinfo_assoclist_entry *)buf; (char*)(entry+1) <= buf + len; entry++) { - if (entry->inactive > MAX_INACTIVITY) - continue; - - struct json_object *obj = json_object_new_object(); - - json_object_object_add(obj, "signal", json_object_new_int(entry->signal)); - json_object_object_add(obj, "noise", json_object_new_int(entry->noise)); - json_object_object_add(obj, "inactive", json_object_new_int(entry->inactive)); - - char mac[18]; - snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", - entry->mac[0], entry->mac[1], entry->mac[2], - entry->mac[3], entry->mac[4], entry->mac[5]); - - json_object_object_add(neighbours, mac, obj); - } - - struct json_object *ret = json_object_new_object(); - - if (json_object_object_length(neighbours)) - json_object_object_add(ret, "neighbours", neighbours); - else - json_object_put(neighbours); - - return ret; -} - -static struct json_object * get_wifi(void) { - const char *mesh = "bat0"; - - struct json_object *ret = json_object_new_object(); - - const char *format = "/sys/class/net/%s/lower_*"; - char pattern[strlen(format) + strlen(mesh)]; - snprintf(pattern, sizeof(pattern), format, mesh); - - size_t pattern_len = strlen(pattern); - - glob_t lower; - if (!glob(pattern, GLOB_NOSORT, NULL, &lower)) { - size_t i; - for (i = 0; i < lower.gl_pathc; i++) { - const char *ifname = lower.gl_pathv[i] + pattern_len - 1; - char *ifaddr = gluonutil_get_interface_address(ifname); - if (!ifaddr) - continue; - - struct json_object *neighbours = get_wifi_neighbours(ifname); - if (neighbours) - json_object_object_add(ret, ifaddr, neighbours); - - free(ifaddr); - } - - globfree(&lower); - } - - return ret; -} - static struct json_object * respondd_provider_neighbours(void) { struct json_object *ret = json_object_new_object(); @@ -804,10 +659,6 @@ static struct json_object * respondd_provider_neighbours(void) { if (batadv) json_object_object_add(ret, "batadv", batadv); - struct json_object *wifi = get_wifi(); - if (wifi) - json_object_object_add(ret, "wifi", wifi); - return ret; } diff --git a/package/gluon-respondd/Makefile b/package/gluon-respondd/Makefile index 52839a8640..9161babac6 100644 --- a/package/gluon-respondd/Makefile +++ b/package/gluon-respondd/Makefile @@ -7,7 +7,7 @@ include ../gluon.mk define Package/gluon-respondd TITLE:=Provides node information to the network - DEPENDS:=+gluon-core +libplatforminfo +libgluonutil +libuci +ubus +respondd + DEPENDS:=+gluon-core +libplatforminfo +libgluonutil +libuci +ubus +respondd +respondd-wifi endef $(eval $(call BuildPackageGluon,gluon-respondd))