Reduce diff lines between gre and gre6 help printing code.

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

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

Signed-off-by: Serhey Popovych <serhe.popov...@gmail.com>
---
 ip/link_gre.c  |   73 +++++++++++++++++++++++++------------------------------
 ip/link_gre6.c |   74 ++++++++++++++++++++++++++------------------------------
 2 files changed, 67 insertions(+), 80 deletions(-)

diff --git a/ip/link_gre.c b/ip/link_gre.c
index b2573a1..e972a10 100644
--- a/ip/link_gre.c
+++ b/ip/link_gre.c
@@ -23,34 +23,38 @@
 #include "ip_common.h"
 #include "tunnel.h"
 
-static void print_usage(FILE *f)
+static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE 
*f)
 {
        fprintf(f,
-               "Usage: ... { gre | gretap | erspan } [ remote ADDR ]\n"
-               "                            [ local ADDR ]\n"
-               "                            [ [i|o]seq ]\n"
-               "                            [ [i|o]key KEY ]\n"
-               "                            [ [i|o]csum ]\n"
-               "                            [ ttl TTL ]\n"
-               "                            [ tos TOS ]\n"
-               "                            [ [no]pmtudisc ]\n"
-               "                            [ [no]ignore-df ]\n"
-               "                            [ dev PHYS_DEV ]\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"
-               "                            [ external ]\n"
-               "                            [ fwmark MARK ]\n"
-               "                            [ erspan_ver version ]\n"
-               "                            [ erspan IDX ]\n"
-               "                            [ erspan_dir { ingress | egress } 
]\n"
-               "                            [ erspan_hwid hwid ]\n"
-               "                            [ external ]\n"
+               "Usage: ... %-9s [ remote ADDR ]\n",
+               lu->id
+       );
+       fprintf(f,
+               "                     [ local ADDR ]\n"
+               "                     [ [i|o]seq ]\n"
+               "                     [ [i|o]key KEY ]\n"
+               "                     [ [i|o]csum ]\n"
+               "                     [ ttl TTL ]\n"
+               "                     [ tos TOS ]\n"
+               "                     [ [no]pmtudisc ]\n"
+               "                     [ [no]ignore-df ]\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"
+               "                     [ erspan_ver version ]\n"
+               "                     [ erspan IDX ]\n"
+               "                     [ erspan_dir { ingress | egress } ]\n"
+               "                     [ erspan_hwid hwid ]\n"
                "\n"
+       );
+       fprintf(f,
                "Where: ADDR := { IP_ADDRESS | any }\n"
                "       TOS  := { NUMBER | inherit }\n"
                "       TTL  := { 1..255 | inherit }\n"
@@ -59,13 +63,6 @@ static void print_usage(FILE *f)
        );
 }
 
-static void usage(void) __attribute__((noreturn));
-static void usage(void)
-{
-       print_usage(stderr);
-       exit(-1);
-}
-
 static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
                         struct nlmsghdr *n)
 {
@@ -336,8 +333,10 @@ get_failed:
                        NEXT_ARG();
                        if (get_u16(&erspan_hwid, *argv, 0))
                                invarg("invalid erspan hwid\n", *argv);
-               } else
-                       usage();
+               } else {
+                       gre_print_help(lu, argc, argv, stderr);
+                       return -1;
+               }
                argc--; argv++;
        }
 
@@ -517,12 +516,6 @@ static void gre_print_opt(struct link_util *lu, FILE *f, 
struct rtattr *tb[])
                        IFLA_GRE_ENCAP_DPORT);
 }
 
-static void gre_print_help(struct link_util *lu, int argc, char **argv,
-                          FILE *f)
-{
-       print_usage(f);
-}
-
 struct link_util gre_link_util = {
        .id = "gre",
        .maxattr = IFLA_GRE_MAX,
diff --git a/ip/link_gre6.c b/ip/link_gre6.c
index 880b75d..1354f88 100644
--- a/ip/link_gre6.c
+++ b/ip/link_gre6.c
@@ -30,34 +30,39 @@
 
 #define DEFAULT_TNL_HOP_LIMIT  (64)
 
-static void print_usage(FILE *f)
+static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE 
*f)
 {
        fprintf(f,
-               "Usage: ... { ip6gre | ip6gretap | ip6erspan} [ remote ADDR ]\n"
-               "                                  [ local ADDR ]\n"
-               "                                  [ [i|o]seq ]\n"
-               "                                  [ [i|o]key KEY ]\n"
-               "                                  [ [i|o]csum ]\n"
-               "                                  [ hoplimit TTL ]\n"
-               "                                  [ encaplimit ELIM ]\n"
-               "                                  [ tclass TCLASS ]\n"
-               "                                  [ flowlabel FLOWLABEL ]\n"
-               "                                  [ dscp inherit ]\n"
-               "                                  [ fwmark MARK ]\n"
-               "                                  [ dev PHYS_DEV ]\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"
-               "                                  [ erspan_ver version ]\n"
-               "                                  [ erspan IDX ]\n"
-               "                                  [ erspan_dir { ingress | 
egress } ]\n"
-               "                                  [ erspan_hwid hwid ]\n"
-               "                                  [ external ]\n"
+               "Usage: ... %-9s [ remote ADDR ]\n",
+               lu->id
+       );
+       fprintf(f,
+               "                     [ local ADDR ]\n"
+               "                     [ [i|o]seq ]\n"
+               "                     [ [i|o]key KEY ]\n"
+               "                     [ [i|o]csum ]\n"
+               "                     [ hoplimit TTL ]\n"
+               "                     [ encaplimit ELIM ]\n"
+               "                     [ tclass TCLASS ]\n"
+               "                     [ flowlabel FLOWLABEL ]\n"
+               "                     [ dscp inherit ]\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"
+               "                     [ erspan_ver version ]\n"
+               "                     [ erspan IDX ]\n"
+               "                     [ erspan_dir { ingress | egress } ]\n"
+               "                     [ erspan_hwid hwid ]\n"
                "\n"
+       );
+       fprintf(f,
                "Where: ADDR      := IPV6_ADDRESS\n"
                "       TTL       := { 0..255 } (default=%d)\n"
                "       KEY       := { DOTTED_QUAD | NUMBER }\n"
@@ -69,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 gre_parse_opt(struct link_util *lu, int argc, char **argv,
                         struct nlmsghdr *n)
 {
@@ -384,8 +382,10 @@ get_failed:
                        NEXT_ARG();
                        if (get_u16(&erspan_hwid, *argv, 0))
                                invarg("invalid erspan hwid\n", *argv);
-               } else
-                       usage();
+               } else {
+                       gre_print_help(lu, argc, argv, stderr);
+                       return -1;
+               }
                argc--; argv++;
        }
 
@@ -584,12 +584,6 @@ static void gre_print_opt(struct link_util *lu, FILE *f, 
struct rtattr *tb[])
                        IFLA_GRE_ENCAP_DPORT);
 }
 
-static void gre_print_help(struct link_util *lu, int argc, char **argv,
-                          FILE *f)
-{
-       print_usage(f);
-}
-
 struct link_util ip6gre_link_util = {
        .id = "ip6gre",
        .maxattr = IFLA_GRE_MAX,
-- 
1.7.10.4

Reply via email to