From c71959df68f307341144194d1826782233c64892 Mon Sep 17 00:00:00 2001 From: "aiyion.prime" Date: Thu, 6 May 2021 23:35:52 +0200 Subject: [PATCH] gluon-mesh-vpn-core: add simple-tc respondd-provider omit unlimited bandwidth limit A value of '-' marks a streamdirection as unlimited. --- package/gluon-mesh-vpn-core/src/Makefile | 2 +- package/gluon-mesh-vpn-core/src/respondd.c | 51 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/package/gluon-mesh-vpn-core/src/Makefile b/package/gluon-mesh-vpn-core/src/Makefile index bf7c00c8..daab3e2c 100644 --- a/package/gluon-mesh-vpn-core/src/Makefile +++ b/package/gluon-mesh-vpn-core/src/Makefile @@ -3,4 +3,4 @@ all: respondd.so CFLAGS += -Wall -Werror-implicit-function-declaration respondd.so: respondd.c - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil -luci diff --git a/package/gluon-mesh-vpn-core/src/respondd.c b/package/gluon-mesh-vpn-core/src/respondd.c index d556401a..a643319c 100644 --- a/package/gluon-mesh-vpn-core/src/respondd.c +++ b/package/gluon-mesh-vpn-core/src/respondd.c @@ -23,13 +23,63 @@ #include +#include #include #include +#include #include #include +#include +static struct json_object * get_bandwidth_limit(void) { + bool enabled = false; + int egress = -1; + int ingress = -1; + + struct json_object *ret = json_object_new_object(); + + struct uci_context *ctx = uci_alloc_context(); + if (!ctx) + goto disabled; + ctx->flags &= ~UCI_FLAG_STRICT; + + struct uci_package *p; + if (uci_load(ctx, "gluon", &p)) + goto disabled; + + struct uci_section *s = uci_lookup_section(ctx, p, "mesh_vpn"); + if (!s) + goto disabled; + + const char *enabled_str = uci_lookup_option_string(ctx, s, "limit_enabled"); + if (enabled_str && strcmp(enabled_str, "1")) + goto disabled; + + enabled = true; + + const char *egress_str = uci_lookup_option_string(ctx, s, "limit_egress"); + if (strcmp(egress_str, "-")) + egress = atoi(egress_str); + + const char *ingress_str = uci_lookup_option_string(ctx, s, "limit_ingress"); + if (strcmp(ingress_str, "-")) + ingress = atoi(ingress_str); + + if (egress >= 0) + json_object_object_add(ret, "egress", json_object_new_int(egress)); + if (ingress >= 0) + json_object_object_add(ret, "ingress", json_object_new_int(ingress)); + +disabled: + if (ctx) + uci_free_context(ctx); + + json_object_object_add(ret, "enabled", json_object_new_boolean(enabled)); + return ret; +} + char * read_stdout(const char *command) { FILE *f = popen(command, "r"); if (!f) @@ -89,6 +139,7 @@ static struct json_object * respondd_provider_nodeinfo(void) { struct json_object *network = json_object_new_object(); struct json_object *mesh_vpn = json_object_new_object(); + json_object_object_add(mesh_vpn, "bandwidth_limit", get_bandwidth_limit()); json_object_object_add(mesh_vpn, "provider", get_active_vpn_provider()); json_object_object_add(mesh_vpn, "enabled", get_mesh_vpn_enabled()); json_object_object_add(network, "mesh_vpn", mesh_vpn);