From: Sven Eckelmann <sven@narfation.org>
To: b.a.t.m.a.n@lists.open-mesh.org
Subject: [B.A.T.M.A.N.] [PATCH 10/38] batctl: Add per command flags
Date: Mon, 22 Oct 2018 00:54:56 +0200 [thread overview]
Message-ID: <20181021225524.8155-11-sven@narfation.org> (raw)
In-Reply-To: <20181021225524.8155-1-sven@narfation.org>
Some commands have different prerequists than other commands. Using flags
to specify them would allow batctl to use the same command structure for
the non-mesh_iface based command as for mesh_iface based commands.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
gw_mode.c | 2 +-
log.c | 2 +-
loglevel.c | 2 +-
main.c | 13 ++++++++++---
main.h | 12 +++++++++---
ping.c | 2 +-
statistics.c | 2 +-
throughputmeter.c | 2 +-
traceroute.c | 2 +-
translate.c | 2 +-
10 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/gw_mode.c b/gw_mode.c
index 884f38e..f07dc99 100644
--- a/gw_mode.c
+++ b/gw_mode.c
@@ -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);
diff --git a/log.c b/log.c
index 66594f6..585f1c9 100644
--- a/log.c
+++ b/log.c
@@ -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);
diff --git a/loglevel.c b/loglevel.c
index 3d9cf3a..06519e7 100644
--- a/loglevel.c
+++ b/loglevel.c
@@ -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);
diff --git a/main.c b/main.c
index 14f4774..dacfb12 100644
--- a/main.c
+++ b/main.c
@@ -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) &&
diff --git a/main.h b/main.h
index f7e2f64..c461d6b 100644
--- a/main.h
+++ b/main.h
@@ -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
diff --git a/ping.c b/ping.c
index a4a1851..2da49d4 100644
--- a/ping.c
+++ b/ping.c
@@ -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);
diff --git a/statistics.c b/statistics.c
index dea3ac1..cb6c1e8 100644
--- a/statistics.c
+++ b/statistics.c
@@ -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);
diff --git a/throughputmeter.c b/throughputmeter.c
index 372bfc4..e9e318c 100644
--- a/throughputmeter.c
+++ b/throughputmeter.c
@@ -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);
diff --git a/traceroute.c b/traceroute.c
index 5c55c7b..1352201 100644
--- a/traceroute.c
+++ b/traceroute.c
@@ -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);
diff --git a/translate.c b/translate.c
index ec6baaf..d2d34f5 100644
--- a/translate.c
+++ b/translate.c
@@ -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);
--
2.19.1
next prev parent reply other threads:[~2018-10-21 22:54 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-21 22:54 [B.A.T.M.A.N.] [PATCH 00/38] batctl: pre-netlink restructuring, part 1 Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 01/38] batctl: Drop unused define SOCKET_PATH_FMT Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 02/38] batctl: Use common code organization for statistics Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 03/38] batctl: Drop legacy vis_* related warning messages Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 04/38] batctl: Move loglevel command to separate file Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 05/38] batctl: Move log " Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 06/38] batctl: Move gw_mode " Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 07/38] batctl: Move routing_algo " Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 08/38] batctl: Rename tp_meter to throughputmeter Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 09/38] batctl: Introduce datastructure for subcommands Sven Eckelmann
2018-10-21 22:54 ` Sven Eckelmann [this message]
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 11/38] batctl: Use command structure for remaining subcommands Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 12/38] batctl: Use getopt to parse main options Sven Eckelmann
2018-10-21 22:54 ` [B.A.T.M.A.N.] [PATCH 13/38] batctl: Store usage line next to command Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 14/38] batctl: Prepare command infrastructure for shared functions Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 15/38] batctl: Add type to command to structure usage output Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 16/38] batctl: Convert debug table to command infrastructure Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 17/38] batctl: Convert sysfs settings " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 18/38] batctl: Move backbonetable debug table to own file Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 19/38] batctl: Move claimtable " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 20/38] batctl: Move dat_cache " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 21/38] batctl: Move gateways " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 22/38] batctl: Move mcast_flags " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 23/38] batctl: Move nc_nodes " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 24/38] batctl: Move neighbors " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 25/38] batctl: Move originators " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 26/38] batctl: Move transglobal " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 27/38] batctl: Move translocal " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 28/38] batctl: Move aggregation setting " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 29/38] batctl: Move bonding " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 30/38] batctl: Move bridge_loop_avoidance " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 31/38] batctl: Move distributed_arp_table " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 32/38] batctl: Move fragmentation " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 33/38] batctl: Move isolation_mark " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 34/38] batctl: Move multicast_mode " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 35/38] batctl: Move network_coding " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 36/38] batctl: Move orig_interval " Sven Eckelmann
2018-10-21 23:02 ` [B.A.T.M.A.N.] [PATCH v2 " Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 37/38] batctl: Use external netlink socket for debug tables Sven Eckelmann
2018-10-21 22:55 ` [B.A.T.M.A.N.] [PATCH 38/38] batctl: Add command to monitor for netlink events Sven Eckelmann
2018-10-22 16:42 ` [B.A.T.M.A.N.] [PATCH 00/38] batctl: pre-netlink restructuring, part 1 Sven Eckelmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181021225524.8155-11-sven@narfation.org \
--to=sven@narfation.org \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox