lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri,  9 Feb 2018 08:58:42 +0200
From:   Serhey Popovych <serhe.popovych@...il.com>
To:     netdev@...r.kernel.org
Subject: [PATCH iproute2-next v3 3/3] iptnl/ip6tnl: Unify iptunnel_print_help()

Reduce diff lines between iptnl and ip6tnl help printing code.

Use @struct link_util ->id field to print correct link help: all callers
now pass this data structure to iptunnel_print_help().

Get rid of custom print_usage() and usage() functions and use
iptunnel_print_help() directly, return from function on "... type
<help|garbage>" instead of exit(2).

Signed-off-by: Serhey Popovych <serhe.popovych@...il.com>
---
 ip/link_ip6tnl.c |   45 ++++++++++++++--------------
 ip/link_iptnl.c  |   88 ++++++++++++++++++++++++++----------------------------
 2 files changed, 66 insertions(+), 67 deletions(-)

diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c
index 91d7d99..60c7451 100644
--- a/ip/link_ip6tnl.c
+++ b/ip/link_ip6tnl.c
@@ -29,20 +29,26 @@
 
 #define DEFAULT_TNL_HOP_LIMIT	(64)
 
-static void print_usage(FILE *f)
+static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv,
+				 FILE *f)
 {
+	const char *mode;
+
+	fprintf(f,
+		"Usage: ... %-6s [ remote ADDR ]\n",
+		lu->id
+	);
 	fprintf(f,
-		"Usage: ... ip6tnl [ mode { ip6ip6 | ipip6 | any } ]\n"
-		"                  [ remote ADDR ]\n"
 		"                  [ local ADDR ]\n"
-		"                  [ dev PHYS_DEV ]\n"
 		"                  [ encaplimit ELIM ]\n"
 		"                  [ hoplimit HLIM ]\n"
 		"                  [ tclass TCLASS ]\n"
 		"                  [ flowlabel FLOWLABEL ]\n"
 		"                  [ dscp inherit ]\n"
-		"                  [ fwmark MARK ]\n"
 		"                  [ [no]allow-localremote ]\n"
+		"                  [ dev PHYS_DEV ]\n"
+		"                  [ fwmark MARK ]\n"
+		"                  [ external ]\n"
 		"                  [ noencap ]\n"
 		"                  [ encap { fou | gue | none } ]\n"
 		"                  [ encap-sport PORT ]\n"
@@ -50,8 +56,14 @@ static void print_usage(FILE *f)
 		"                  [ [no]encap-csum ]\n"
 		"                  [ [no]encap-csum6 ]\n"
 		"                  [ [no]encap-remcsum ]\n"
-		"                  [ external ]\n"
-		"\n"
+	);
+	mode = "{ ip6ip6 | ipip6 | any }";
+	fprintf(f,
+		"                  [ mode %s ]\n"
+		"\n",
+		mode
+	);
+	fprintf(f,
 		"Where: ADDR      := IPV6_ADDRESS\n"
 		"       ELIM      := { none | 0..255 }(default=%d)\n"
 		"       HLIM      := 0..255 (default=%d)\n"
@@ -62,13 +74,6 @@ static void print_usage(FILE *f)
 	);
 }
 
-static void usage(void) __attribute__((noreturn));
-static void usage(void)
-{
-	print_usage(stderr);
-	exit(-1);
-}
-
 static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,
 			       struct nlmsghdr *n)
 {
@@ -304,8 +309,10 @@ get_failed:
 			encapflags &= ~TUNNEL_ENCAP_FLAG_REMCSUM;
 		} else if (strcmp(*argv, "external") == 0) {
 			metadata = 1;
-		} else
-			usage();
+		} else {
+			ip6tunnel_print_help(lu, argc, argv, stderr);
+			return -1;
+		}
 		argc--, argv++;
 	}
 
@@ -456,12 +463,6 @@ static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb
 			IFLA_IPTUN_ENCAP_DPORT);
 }
 
-static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv,
-				 FILE *f)
-{
-	print_usage(f);
-}
-
 struct link_util ip6tnl_link_util = {
 	.id = "ip6tnl",
 	.maxattr = IFLA_IPTUN_MAX,
diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c
index 3e653b7..84117ac 100644
--- a/ip/link_iptnl.c
+++ b/ip/link_iptnl.c
@@ -24,49 +24,51 @@
 #include "ip_common.h"
 #include "tunnel.h"
 
-static void print_usage(FILE *f, int sit)
+static void iptunnel_print_help(struct link_util *lu, int argc, char **argv,
+				FILE *f)
 {
-	const char *type = sit ? "sit " : "ipip";
+	const char *mode;
 
 	fprintf(f,
-		"Usage: ... %s [ remote ADDR ]\n"
-		"                [ local ADDR ]\n"
-		"                [ ttl TTL ]\n"
-		"                [ tos TOS ]\n"
-		"                [ [no]pmtudisc ]\n"
-		"                [ dev PHYS_DEV ]\n"
-		"                [ 6rd-prefix ADDR ]\n"
-		"                [ 6rd-relay_prefix ADDR ]\n"
-		"                [ 6rd-reset ]\n"
-		"                [ noencap ]\n"
-		"                [ encap { fou | gue | none } ]\n"
-		"                [ encap-sport PORT ]\n"
-		"                [ encap-dport PORT ]\n"
-		"                [ [no]encap-csum ]\n"
-		"                [ [no]encap-csum6 ]\n"
-		"                [ [no]encap-remcsum ]\n",
-		type
+		"Usage: ... %-6s [ remote ADDR ]\n",
+		lu->id
+	);
+	fprintf(f,
+		"                  [ local ADDR ]\n"
+		"                  [ ttl TTL ]\n"
+		"                  [ tos TOS ]\n"
+		"                  [ [no]pmtudisc ]\n"
+		"                  [ 6rd-prefix ADDR ]\n"
+		"                  [ 6rd-relay_prefix ADDR ]\n"
+		"                  [ 6rd-reset ]\n"
+		"                  [ dev PHYS_DEV ]\n"
+		"                  [ fwmark MARK ]\n"
+		"                  [ external ]\n"
+		"                  [ noencap ]\n"
+		"                  [ encap { fou | gue | none } ]\n"
+		"                  [ encap-sport PORT ]\n"
+		"                  [ encap-dport PORT ]\n"
+		"                  [ [no]encap-csum ]\n"
+		"                  [ [no]encap-csum6 ]\n"
+		"                  [ [no]encap-remcsum ]\n"
 	);
-	if (sit) {
-		fprintf(f, "          [ mode { ip6ip | ipip | mplsip | any } ]\n");
-		fprintf(f, "          [ isatap ]\n");
+	if (strcmp(lu->id, "sit") == 0) {
+		mode = "{ ip6ip | ipip | mplsip | any } ]\n"
+		"                  [ isatap";
 	} else {
-		fprintf(f, "          [ mode { ipip | mplsip | any } ]\n");
+		mode = "{ ipip | mplsip | any }";
 	}
-	fprintf(f, "                [ external ]\n");
-	fprintf(f, "                [ fwmark MARK ]\n");
-	fprintf(f, "\n");
-	fprintf(f, "Where: ADDR := { IP_ADDRESS | any }\n");
-	fprintf(f, "       TOS  := { NUMBER | inherit }\n");
-	fprintf(f, "       TTL  := { 1..255 | inherit }\n");
-	fprintf(f, "       MARK := { 0x0..0xffffffff }\n");
-}
-
-static void usage(int sit) __attribute__((noreturn));
-static void usage(int sit)
-{
-	print_usage(stderr, sit);
-	exit(-1);
+	fprintf(f,
+		"                  [ mode %s ]\n"
+		"\n",
+		mode
+	);
+	fprintf(f,
+		"Where: ADDR := { IP_ADDRESS | any }\n"
+		"       TOS  := { NUMBER | inherit }\n"
+		"       TTL  := { 1..255 | inherit }\n"
+		"       MARK := { 0x0..0xffffffff }\n"
+	);
 }
 
 static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,
@@ -313,8 +315,10 @@ get_failed:
 			NEXT_ARG();
 			if (get_u32(&fwmark, *argv, 0))
 				invarg("invalid fwmark\n", *argv);
-		} else
-			usage(strcmp(lu->id, "sit") == 0);
+		} else {
+			iptunnel_print_help(lu, argc, argv, stderr);
+			return -1;
+		}
 		argc--, argv++;
 	}
 
@@ -483,12 +487,6 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[
 			IFLA_IPTUN_ENCAP_DPORT);
 }
 
-static void iptunnel_print_help(struct link_util *lu, int argc, char **argv,
-	FILE *f)
-{
-	print_usage(f, strcmp(lu->id, "sit") == 0);
-}
-
 struct link_util ipip_link_util = {
 	.id = "ipip",
 	.maxattr = IFLA_IPTUN_MAX,
-- 
1.7.10.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ