From b3bedbbefa8925b0366fa4cf1c665e2f7ce97acf Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakobols@kth.se>
Date: Wed, 30 May 2018 15:49:46 +0200
Subject: [PATCH] preparation to get host ip from /proc/net/route
---
dfs.c | 1 -
dongle_infrastructure.c | 71 ++++++++++++++++++++++++++++++++++++++---
2 files changed, 66 insertions(+), 6 deletions(-)
diff --git a/dfs.c b/dfs.c
index 28ddaed..a3cf171 100644
--- a/dfs.c
+++ b/dfs.c
@@ -34,7 +34,6 @@ bool search(char *path, struct list_head *list)
void clear_list(struct list_head *list)
{
struct directory *dr, *tmp;
- print_list_dfs(list);
if (list_empty(list))
return;
diff --git a/dongle_infrastructure.c b/dongle_infrastructure.c
index ba8a5f5..dfbe529 100644
--- a/dongle_infrastructure.c
+++ b/dongle_infrastructure.c
@@ -54,7 +54,6 @@ int tag_missing_devices(void)
}
dev->missing++;
- printf("added to missing counter!\n");
if (dev->missing == 1)
delete_device_by_obj(dev);
}
@@ -121,7 +120,6 @@ int delete_device_by_name(char *name)
int delete_device_by_obj(struct device *dev)
{
- printf("lets remove %s\n", dev->usb.if_name);
free(dev->usb.if_name);
free(dev->ip);
list_del(&dev->list);
@@ -140,6 +138,29 @@ struct device *search_list(char *name)
return NULL;
}
+char *lexer_chr(char **input, char delimiter)
+{
+ char *token, *substr;
+printf("%s\n", *input);
+ if (strlen(*input) == 0) {
+ debug_print("empty input!\n");
+ return NULL;
+ }
+printf("%s\n", *input);
+ token = strchr(*input, delimiter);
+ printf("%s\n", token);
+ if (token) {
+ *token = '\0';
+ substr = strdup(*input);
+ *input = token + 1;
+ } else {
+ substr = strdup(*input);
+ *input[0] = '\0';
+ }
+
+ return substr;
+}
+
char *lexer(char **input, char *delimiter)
{
char *token, *substr;
@@ -212,6 +233,7 @@ char *get_usb_stat(char *path, char *dir, char *stat)
fgets(contents, 1024, f);
remove_newline(contents);
fclose(f);
+
return strdup(contents);
fail:
return NULL;
@@ -273,7 +295,6 @@ char *get_device_name(char *dir_name)
}
if (strstr(dr->path, "net")) {
- printf("de->d_name %s\n", de->d_name);
name = strdup(de->d_name);
goto success;
}
@@ -313,7 +334,6 @@ int get_devices(void)
continue;
snprintf(product_path, PATH_MAX, "%s%s/product", usb_path, de->d_name);
- printf("product_path %s\n", product_path);
memset(&st, 0, sizeof(struct stat));
rv = stat(product_path, &st);
@@ -376,6 +396,39 @@ fail:
return NULL;
}
+char *get_device_ip_alt(char *device_name)
+{
+ char route[1024];
+ char *iface, *destination, *gateway, *flags;
+ FILE *fp;
+
+ fp = fopen("/proc/net/route", "r");
+ if (!fp) {
+ perror("fopen");
+ goto fail;
+ }
+
+ while ((fgets(route, 1024, fp)) != NULL) {
+ remove_newline(route);
+ /*
+ 1. delimiter on first tab, check if = usb0, else continue
+ 2. delimiter on 4th tab, convert to binary, check if 3rd bit = 1, else continue
+ 3. get destintion ip
+ */
+ printf("route %s\n", route);
+ printf("some more test stuff\n");
+ iface = lexer_chr(&route, 'a');
+ printf("iface %s\n", iface);
+ destination = lexer_chr(&route, 'a');
+ gateway = lexer_chr(&route, 'a');
+ flags = lexer_chr(&route, 'a');
+ printf("iface %s, destination %s, gateway %s, flags %s\n", iface, destination, gateway, flags);
+ }
+ fclose(fp);
+fail:
+ return NULL;
+}
+
char *get_device_ip(char *device_name)
{
int fd, rv;
@@ -495,6 +548,14 @@ int clear(struct ubus_context *ctx, struct ubus_object *obj,
return 0;
}
+int test(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ get_device_ip_alt(NULL);
+ return 0;
+}
+
int remove_device(struct ubus_context *ctx, struct ubus_object *obj,
struct ubus_request_data *req, const char *method,
struct blob_attr *msg)
@@ -516,7 +577,7 @@ fail:
}
struct ubus_method infrastructure_object_methods[] = {
- //UBUS_METHOD_NOARG("test", test),
+ UBUS_METHOD_NOARG("test", test),
UBUS_METHOD_NOARG("list", print_list),
UBUS_METHOD_NOARG("clear", clear),
UBUS_METHOD("remove_device", remove_device, dev_policy)
--
GitLab