From patchwork Sun Oct 21 22:54:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Eckelmann X-Patchwork-Id: 17521 X-Patchwork-Delegate: sw@simonwunderlich.de Return-Path: X-Original-To: patchwork@open-mesh.org Delivered-To: patchwork@open-mesh.org Received: from open-mesh.org (localhost [IPv6:::1]) by open-mesh.org (Postfix) with ESMTP id 5C553830AD; Mon, 22 Oct 2018 00:56:28 +0200 (CEST) Authentication-Results: open-mesh.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=narfation.org header.i=@narfation.org header.b="rFdOVbhI"; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=79.140.41.39; helo=v3-1039.vlinux.de; envelope-from=sven@narfation.org; receiver= Received: from v3-1039.vlinux.de (narfation.org [79.140.41.39]) by open-mesh.org (Postfix) with ESMTPS id 5C30181834 for ; Mon, 22 Oct 2018 00:56:01 +0200 (CEST) Received: from sven-desktop.home.narfation.org (p200300C593D704FD0000000000008096.dip0.t-ipconnect.de [IPv6:2003:c5:93d7:4fd::8096]) by v3-1039.vlinux.de (Postfix) with ESMTPSA id EB3841100D5; Mon, 22 Oct 2018 00:56:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=narfation.org; s=20121; t=1540162561; bh=HPXksWCmjqaPYwkqcIYgxgQLryzUYiHaFJnxGHM6HVc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rFdOVbhIxCEX3Rj4fPa1Cr7pwY3p+N6q8LQT8Irizjx+tPYRUQDazds3A32U5Bfcn uFOoAcE23WIt+t77jptrycE/KnQZU8g0CafnhlgYTF8eVrXuUOgQoJ8SyDZJzxL856 PDzx1AWlc8sZSmFIJ79wEBVAFbnJmy71yQxgHfY4= From: Sven Eckelmann To: b.a.t.m.a.n@lists.open-mesh.org Date: Mon, 22 Oct 2018 00:54:56 +0200 Message-Id: <20181021225524.8155-11-sven@narfation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181021225524.8155-1-sven@narfation.org> References: <20181021225524.8155-1-sven@narfation.org> MIME-Version: 1.0 Subject: [B.A.T.M.A.N.] [PATCH 10/38] batctl: Add per command flags X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking Errors-To: b.a.t.m.a.n-bounces@lists.open-mesh.org Sender: "B.A.T.M.A.N" 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 --- 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);