@@ -167,4 +167,4 @@ static int gw_mode(char *mesh_iface, int argc, char **argv)
return res;
}
-COMMAND(gw_mode, "gw");
+COMMAND(gw_mode, "gw", COMMAND_FLAG_MESH_IFACE);
@@ -69,4 +69,4 @@ static int log_print(char *mesh_iface, int argc, char **argv)
return res;
}
-COMMAND_NAMED(log, "l", log_print);
+COMMAND_NAMED(log, "l", log_print, COMMAND_FLAG_MESH_IFACE);
@@ -143,4 +143,4 @@ static int loglevel(char *mesh_iface, int argc, char **argv)
return res;
}
-COMMAND(loglevel, "ll");
+COMMAND(loglevel, "ll", COMMAND_FLAG_MESH_IFACE);
@@ -169,12 +169,19 @@ int main(int argc, char **argv)
ret = routing_algo(mesh_iface, argc - 1, argv + 1);
- } else if (check_mesh_iface(mesh_iface) < 0) {
- fprintf(stderr, "Error - interface %s is not present or not a batman-adv interface\n", mesh_iface);
- exit(EXIT_FAILURE);
} else if ((cmd = find_command(argv[1]))) {
+ if (cmd->flags & COMMAND_FLAG_MESH_IFACE &&
+ check_mesh_iface(mesh_iface) < 0) {
+ fprintf(stderr, "Error - interface %s is not present or not a batman-adv interface\n", mesh_iface);
+ exit(EXIT_FAILURE);
+ }
+
ret = cmd->handler(mesh_iface, argc - 1, argv + 1);
} else {
+ if (check_mesh_iface(mesh_iface) < 0) {
+ fprintf(stderr, "Error - interface %s is not present or not a batman-adv interface\n", mesh_iface);
+ exit(EXIT_FAILURE);
+ }
for (i = 0; i < BATCTL_SETTINGS_NUM; i++) {
if ((strcmp(argv[1], batctl_settings[i].opt_long) != 0) &&
@@ -57,22 +57,28 @@ extern char module_ver_path[];
#define BATADV_PRINT_VID(vid) (vid & BATADV_VLAN_HAS_TAG ? \
(int)(vid & VLAN_VID_MASK) : -1)
+enum command_flags {
+ COMMAND_FLAG_MESH_IFACE = BIT(0),
+};
+
struct command {
const char *name;
const char *abbr;
int (*handler)(char *mesh_iface, int argc, char **argv);
+ uint32_t flags;
};
-#define COMMAND_NAMED(_name, _abbr, _handler) \
+#define COMMAND_NAMED(_name, _abbr, _handler, _flags) \
static const struct command command_ ## _name = { \
.name = (#_name), \
.abbr = _abbr, \
.handler = (_handler), \
+ .flags = (_flags), \
}; \
static const struct command *__command_ ## _name \
__attribute__((__used__)) __attribute__ ((__section__ ("__command"))) = &command_ ## _name
-#define COMMAND(_handler, _abbr) \
- COMMAND_NAMED(_handler, _abbr, _handler)
+#define COMMAND(_handler, _abbr, _flags) \
+ COMMAND_NAMED(_handler, _abbr, _handler, _flags)
#endif
@@ -345,4 +345,4 @@ static int ping(char *mesh_iface, int argc, char **argv)
return ret;
}
-COMMAND(ping, "p");
+COMMAND(ping, "p", COMMAND_FLAG_MESH_IFACE);
@@ -126,4 +126,4 @@ static int statistics(char *mesh_iface, int argc __maybe_unused,
return ret;
}
-COMMAND(statistics, "s");
+COMMAND(statistics, "s", COMMAND_FLAG_MESH_IFACE);
@@ -543,4 +543,4 @@ static int throughputmeter(char *mesh_iface, int argc, char **argv)
return ret;
}
-COMMAND(throughputmeter, "tp");
+COMMAND(throughputmeter, "tp", COMMAND_FLAG_MESH_IFACE);
@@ -231,4 +231,4 @@ static int traceroute(char *mesh_iface, int argc, char **argv)
return ret;
}
-COMMAND(traceroute, "tr");
+COMMAND(traceroute, "tr", COMMAND_FLAG_MESH_IFACE);
@@ -78,4 +78,4 @@ static int translate(char *mesh_iface, int argc, char **argv)
return ret;
}
-COMMAND(translate, "t");
+COMMAND(translate, "t", COMMAND_FLAG_MESH_IFACE);