[07/10] alfred: Split get_tq from debugfs backend

Message ID 1465152428-17299-7-git-send-email-sven@narfation.org (mailing list archive)
State Accepted, archived
Commit f266e1170dd16c46d82dd0581c608308caba3338
Delegated to: Simon Wunderlich
Headers

Commit Message

Sven Eckelmann June 5, 2016, 6:47 p.m. UTC
  The debugfs tables cannot be used by the alfred in network namespaces.
These have to use netlink. Thus the get_tq should be less tightly linked to
the debugfs tables to implement optional netlink support.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
 batadv_query.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)
  

Patch

diff --git a/batadv_query.c b/batadv_query.c
index 9082576..a893995 100644
--- a/batadv_query.c
+++ b/batadv_query.c
@@ -272,7 +272,8 @@  struct ether_addr *translate_mac(const char *mesh_iface,
 	return mac_result;
 }
 
-uint8_t get_tq(const char *mesh_iface, struct ether_addr *mac)
+static int get_tq_debugfs(const char *mesh_iface, struct ether_addr *mac,
+			  uint8_t *tq)
 {
 	enum {
 		orig_mac,
@@ -288,7 +289,7 @@  uint8_t get_tq(const char *mesh_iface, struct ether_addr *mac)
 	char *line = NULL;
 	char *input, *saveptr, *token;
 	int line_invalid;
-	uint8_t tq = 0;
+	bool found = false;
 
 	memcpy(&in_mac, mac, sizeof(in_mac));
 
@@ -297,7 +298,7 @@  uint8_t get_tq(const char *mesh_iface, struct ether_addr *mac)
 
 	f = fopen(full_path, "r");
 	if (!f)
-		goto out;
+		return -EOPNOTSUPP;
 
 	while (getline(&line, &len, f) != -1) {
 		line_invalid = 0;
@@ -338,7 +339,8 @@  uint8_t get_tq(const char *mesh_iface, struct ether_addr *mac)
 					line_invalid = 1;
 				} else {
 					token[strlen(token) - 1] = '\0';
-					tq = strtol(token, NULL, 10);
+					*tq = strtol(token, NULL, 10);
+					found = true;
 					goto out;
 				}
 				break;
@@ -353,5 +355,24 @@  out:
 	if (f)
 		fclose(f);
 	free(line);
+
+	if (found)
+		return 0;
+	else
+		return -ENOENT;
+}
+
+uint8_t get_tq(const char *mesh_iface, struct ether_addr *mac)
+{
+	struct ether_addr in_mac;
+	uint8_t tq = 0;
+
+	/* input mac has to be copied because it could be in the shared
+	 * ether_aton buffer
+	 */
+	memcpy(&in_mac, mac, sizeof(in_mac));
+
+	get_tq_debugfs(mesh_iface, &in_mac, &tq);
+
 	return tq;
 }