Skip to content

Commit

Permalink
add respondd-module-wifisettings
Browse files Browse the repository at this point in the history
  • Loading branch information
genofire committed Jul 1, 2018
1 parent c34d129 commit c213f1f
Show file tree
Hide file tree
Showing 4 changed files with 156 additions and 0 deletions.
25 changes: 25 additions & 0 deletions net/respondd-module-wifisettings/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=respondd-module-wifisettings
PKG_VERSION:=1
PKG_RELEASE:=1

PKG_LICENSE:=BSD-2-Clause

PKG_BUILD_DEPENDS := respondd

include $(INCLUDE_DIR)/package.mk

define Package/respondd-module-wifisettings
SECTION:=net
CATEGORY:=Network
TITLE:=Add wifisettings to respondd
DEPENDS:=+respondd +libuci
endef

define Package/respondd-module-wifisettings/install
$(INSTALL_DIR) $(1)/usr/lib/respondd
$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/usr/lib/respondd/wifi-settings.so
endef

$(eval $(call BuildPackage,respondd-module-wifisettings))
13 changes: 13 additions & 0 deletions net/respondd-module-wifisettings/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
This module adds a respondd wifisettings usage nodeinfo provider.
The format is the following:

```json
{
"nodeinfo": {
"channel24": 11,
"txpower24": 22,
"channel5": 44,
"txpower5": 18,
}
}
```
9 changes: 9 additions & 0 deletions net/respondd-module-wifisettings/src/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
all: respondd.so

CFLAGS += -Wall

respondd.so: respondd.c
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -luci

clean:
rm -rf *.so
109 changes: 109 additions & 0 deletions net/respondd-module-wifisettings/src/respondd.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include <limits.h>

#include <json-c/json.h>
#include <uci.h>

#include <respondd.h>

const unsigned int INVALID_CHANNEL = 0;
const unsigned int INVALID_TXPOWER = 0;

static inline unsigned char parse_option(const char *s, unsigned char invalid) {
char *endptr = NULL;
long int result;

if (!s)
return invalid;

result = strtol(s, &endptr, 10);

if (!endptr)
return invalid;
if ('\0' != *endptr)
return invalid;
if (result > UCHAR_MAX)
return invalid;
if (result < 0)
return invalid;

return (unsigned char)(result % UCHAR_MAX);
}

static struct json_object *respondd_provider_nodeinfo(void) {
struct uci_context *ctx = NULL;
struct uci_package *p = NULL;
struct uci_section *s;
struct uci_element *e;
struct json_object *ret = NULL, *wireless = NULL, *v;
unsigned char tmp;

ctx = uci_alloc_context();
if (!ctx)
goto end;
ctx->flags &= ~UCI_FLAG_STRICT;

wireless = json_object_new_object();
if (!wireless)
goto end;

ret = json_object_new_object();
if (!ret)
goto end;

if (uci_load(ctx, "wireless", &p))
goto end;

uci_foreach_element(&p->sections, e) {
s = uci_to_section(e);

if(!strncmp(s->type,"wifi-device",11)){
tmp = parse_option(uci_lookup_option_string(ctx, s, "channel"), INVALID_CHANNEL);
if (tmp != INVALID_CHANNEL) {
v = json_object_new_int64(tmp);
if (!v)
goto end;
if (tmp >= 1 && tmp <= 14){
json_object_object_add(wireless, "channel24", v);
tmp = parse_option(uci_lookup_option_string(ctx, s, "txpower"), INVALID_TXPOWER);
if (tmp != INVALID_TXPOWER) {
v = json_object_new_int64(tmp);
if (!v)
goto end;
json_object_object_add(wireless, "txpower24", v);
}
// FIXME lowes is 7, but i was able to differ between 2.4 Ghz and 5 Ghz by iwinfo_ops->frequency
// In EU and US it is 36, so it would be okay for the moment (https://en.wikipedia.org/wiki/List_of_WLAN_channels)
} else if (tmp >= 36 && tmp < 196){
json_object_object_add(wireless, "channel5", v);
tmp = parse_option(uci_lookup_option_string(ctx, s, "txpower"), INVALID_TXPOWER);
if (tmp != INVALID_TXPOWER) {
v = json_object_new_int64(tmp);
if (!v)
goto end;
json_object_object_add(wireless, "txpower5", v);
}
} else
json_object_object_add(wireless, "ErrorChannel", v);
}
}
}

json_object_object_add(ret, "wireless", wireless);
end:
if (ctx) {
if (p)
uci_unload(ctx, p);
uci_free_context(ctx);
}
return ret;

}

const struct respondd_provider_info respondd_providers[] = {
{"nodeinfo", respondd_provider_nodeinfo},
{0,0},
};

0 comments on commit c213f1f

Please sign in to comment.