Subject: Re: [IPROUTE]: Fix up "ip link" help text

From: Patrick McHardy <[email-masked]>
Date: Tue, 07 Oct 2008 23:02:17 +0200

Arkadiusz Miskiewicz wrote:
> Runtime dependand help doesn't look sane. Help should always show all possible 
> options/command while trying to use unsupported option should display error 
> message.
>   

That makes sense. But don't complain to me about the quality
of the error messages afterwards please :)

commit 8c6321466df9a452ac58e09d32edd6c5b4ea0d17
Author: Patrick McHardy <[email-masked]>
Date:   Tue Oct 7 23:00:59 2008 +0200

    [IPROUTE]: Fix up "ip link" help text
    
    Add help for "ip link add". Also fix up the "ip link set" help text:
    
    - the flags are not mutually exclusive as suggested by the current text,
      up/down states and on/off are mutually exclusive.
    
    - txqueuelen, name etc. have nothing to do with the flags and on/off states
      at all and are certainly not mutually exclusive, fix formatting and make
      it conform the other helptexts better.
    
    Signed-off-by: Patrick McHardy <[email-masked]>

diff --git a/ip/iplink.c b/ip/iplink.c
index 6e9ac71..781fbd2 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -41,19 +41,30 @@ static void usage(void) __attribute__((noreturn));
 
 void iplink_usage(void)
 {
-	fprintf(stderr, "Usage: ip link set DEVICE { up | down |\n");
-	fprintf(stderr, "	                     arp { on | off } |\n");
-	fprintf(stderr, "	                     dynamic { on | off } |\n");
-	fprintf(stderr, "	                     multicast { on | off } |\n");
-	fprintf(stderr, "	                     allmulticast { on | off } |\n");
-	fprintf(stderr, "	                     promisc { on | off } |\n");
-	fprintf(stderr, "	                     trailers { on | off } |\n");
-	fprintf(stderr, "	                     txqueuelen PACKETS |\n");
-	fprintf(stderr, "	                     name NEWNAME |\n");
-	fprintf(stderr, "	                     address LLADDR | broadcast LLADDR |\n");
-	fprintf(stderr, "	                     mtu MTU }\n");
-	fprintf(stderr, "	                     netns PID }\n");
+	fprintf(stderr, "Usage: ip link add [ name ] NAME\n");
+	fprintf(stderr, "                   [ link DEV ]\n");
+	fprintf(stderr, "                   [ txqueuelen PACKETS ]\n");
+	fprintf(stderr, "                   [ address LLADDR ]\n");
+	fprintf(stderr, "                   [ broadcast LLADDR ]\n");
+	fprintf(stderr, "                   [ mtu MTU ]\n");
+	fprintf(stderr, "                   type TYPE [ ARGS ]\n");
+	fprintf(stderr, "\n");
+	fprintf(stderr, "       ip link set DEVICE [ { up | down } ]\n");
+	fprintf(stderr, "	                  [ arp { on | off } ]\n");
+	fprintf(stderr, "	                  [ dynamic { on | off } ]\n");
+	fprintf(stderr, "	                  [ multicast { on | off } ]\n");
+	fprintf(stderr, "	                  [ allmulticast { on | off } ]\n");
+	fprintf(stderr, "	                  [ promisc { on | off } ]\n");
+	fprintf(stderr, "	                  [ trailers { on | off } ]\n");
+	fprintf(stderr, "	                  [ txqueuelen PACKETS ]\n");
+	fprintf(stderr, "	                  [ name NEWNAME ]\n");
+	fprintf(stderr, "	                  [ address LLADDR ]\n");
+	fprintf(stderr, "	                  [ broadcast LLADDR ]\n");
+	fprintf(stderr, "	                  [ mtu MTU ]\n");
+	fprintf(stderr, "	                  [ netns PID ]\n");
 	fprintf(stderr, "       ip link show [ DEVICE ]\n");
+	fprintf(stderr, "\n");
+	fprintf(stderr, "TYPE := { vlan | veth | dummy | ifb | macvlan }\n");
 	exit(-1);
 }