Whamcloud - gitweb
LU-7353 utils: fix lctl usage messages 80/16980/3
authorAndreas Dilger <andreas.dilger@intel.com>
Wed, 28 Oct 2015 20:06:13 +0000 (14:06 -0600)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 11 Nov 2015 15:39:17 +0000 (15:39 +0000)
Fix the lctl usage message for sub-commands that need the LNet network
to be specified.  lctl::g_net_is_set() incorrectly recommended using
the "network" command to specify the LNet network, which is incorrect
when using lctl in command-line mode:

  # lctl peer_list
  You must run the 'network' command before 'peer_list'.
  # lctl network tcp0 peer_list
  # lctl --net tcp0 peer_list
  12345-192.168.20.1@tcp [1]192.168.40.147->mookie-gig:988 #15

Fix that to correctly recommend using the "--net" command when using
non-interactive mode, and to return an error if "network" is used in
non-interactive mode with extra arguments.

Replace mention of "portals" in help messages with "LNet".
Remove mention of obsolete elan, qsw, ra network types.

Improve the help message content for related subcommands.
Fix whitespace and command descriptions for related subcommands.

Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
Change-Id: Idf9bf663b16012ebc9f38566ecba9859a54cab07
Reviewed-on: http://review.whamcloud.com/16980
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lnet/utils/portals.c
lustre/utils/lctl.c

index c28d764..8778f81 100644 (file)
@@ -45,7 +45,8 @@
 unsigned int libcfs_debug;
 unsigned int libcfs_printk = D_CANTMASK;
 
-static int   g_net_set;
+static bool  g_net_interactive;
+static bool  g_net_set;
 static __u32 g_net;
 
 #define IOC_BUF_SIZE   8192
@@ -229,30 +230,40 @@ lnet_parse_nid(char *nid_str, lnet_process_id_t *id_ptr)
         return 0;
 }
 
-int g_net_is_set (char *cmd)
+static int g_net_is_set(char *cmd)
 {
-        if (g_net_set)
-                return 1;
+       if (g_net_set)
+               return 1;
 
-        if (cmd != NULL)
-                fprintf(stderr,
-                        "You must run the 'network' command before '%s'.\n",
-                        cmd);
-        return 0;
+       if (cmd != NULL) {
+               char *net;
+
+               if (g_net_interactive)
+                       net = "network";
+               else
+                       net = "--net";
+
+               fprintf(stderr,
+                       "You must run '%s <network>' command before '%s'\n",
+                       cmd, net);
+               return 0;
+       }
+
+       return 0;
 }
 
-int g_net_is_compatible (char *cmd, ...)
+static int g_net_is_compatible(char *cmd, ...)
 {
-        va_list       ap;
-        int           nal;
+       va_list ap;
+       int nal;
 
-        if (!g_net_is_set(cmd))
-                return 0;
+       if (!g_net_is_set(cmd))
+               return 0;
 
-        va_start(ap, cmd);
+       va_start(ap, cmd);
 
-        do {
-                nal = va_arg (ap, int);
+       do {
+               nal = va_arg(ap, int);
                 if (nal == LNET_NETTYP(g_net)) {
                         va_end (ap);
                         return 1;
@@ -266,11 +277,15 @@ int g_net_is_compatible (char *cmd, ...)
                          "Command %s not compatible with %s NAL\n",
                          cmd,
                          libcfs_lnd2str(LNET_NETTYP(g_net)));
+
         return 0;
 }
 
 int ptl_initialize(int argc, char **argv)
 {
+       if (argc > 1)
+               g_net_interactive = true;
+
         register_ioc_dev(LNET_DEV_ID, LNET_DEV_PATH,
                          LNET_DEV_MAJOR, LNET_DEV_MINOR);
         return 0;
@@ -279,65 +294,62 @@ int ptl_initialize(int argc, char **argv)
 
 int jt_ptl_network(int argc, char **argv)
 {
-        struct libcfs_ioctl_data data;
-        __u32                    net = LNET_NIDNET(LNET_NID_ANY);
-        int                      rc;
+       struct libcfs_ioctl_data data;
+       __u32 net = LNET_NIDNET(LNET_NID_ANY);
+       int rc;
 
-        if (argc < 2) {
-                fprintf(stderr, "usage: %s <net>|up|down\n", argv[0]);
-                return 0;
-        }
-
-        if (!strcmp(argv[1], "unconfigure") ||
-            !strcmp(argv[1], "down")) {
-                LIBCFS_IOC_INIT(data);
-                rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_UNCONFIGURE, &data);
+       if (argc != 2) {
+               fprintf(stderr, "usage: %s <net>|up|down\n", argv[0]);
+               return -1;
+       }
 
-                if (rc == 0) {
-                        printf ("LNET ready to unload\n");
-                        return 0;
-                }
+       if (!strcmp(argv[1], "unconfigure") || !strcmp(argv[1], "down")) {
+               LIBCFS_IOC_INIT(data);
+               rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_UNCONFIGURE, &data);
 
-                if (errno == EBUSY)
-                        fprintf(stderr, "LNET busy\n");
-                else
-                        fprintf(stderr, "LNET unconfigure error %d: %s\n",
-                                errno, strerror(errno));
-                return -1;
-        }
+               if (rc == 0) {
+                       printf("LNET ready to unload\n");
+                       return 0;
+               }
 
-        if (!strcmp(argv[1], "configure") ||
-            !strcmp(argv[1], "up")) {
-                LIBCFS_IOC_INIT(data);
-                rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_CONFIGURE, &data);
+               if (errno == EBUSY)
+                       fprintf(stderr, "LNET busy\n");
+               else
+                       fprintf(stderr, "LNET unconfigure error %d: %s\n",
+                               errno, strerror(errno));
+               return -1;
+       } else if (!strcmp(argv[1], "configure") || !strcmp(argv[1], "up")) {
+               LIBCFS_IOC_INIT(data);
+               rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_CONFIGURE, &data);
 
-                if (rc == 0) {
-                        printf ("LNET configured\n");
-                        return 0;
-                }
+               if (rc == 0) {
+                       printf("LNET configured\n");
+                       return 0;
+               }
 
-                fprintf(stderr, "LNET configure error %d: %s\n",
-                        errno, strerror(errno));
-                return -1;
-        }
+               fprintf(stderr, "LNET configure error %d: %s\n",
+                       errno, strerror(errno));
+               return -1;
+       }
 
-        net = libcfs_str2net(argv[1]);
-        if (net == LNET_NIDNET(LNET_NID_ANY)) {
-                fprintf(stderr, "Can't parse net %s\n", argv[1]);
-                return -1;
-        }
+       net = libcfs_str2net(argv[1]);
+       if (net == LNET_NIDNET(LNET_NID_ANY)) {
+               fprintf(stderr, "Can't parse net %s\n", argv[1]);
+               return -1;
+       }
 
-        if (LNET_NETTYP(net) == CIBLND    ||
-            LNET_NETTYP(net) == OPENIBLND ||
-            LNET_NETTYP(net) == IIBLND    ||
-            LNET_NETTYP(net) == VIBLND) {
-                fprintf(stderr, "Net %s obsoleted\n", libcfs_lnd2str(net));
-                return -1;
-        }
+       if (LNET_NETTYP(net) == QSWLND || LNET_NETTYP(net) == GMLND ||
+           LNET_NETTYP(net) == PTLLND || LNET_NETTYP(net) == CIBLND ||
+           LNET_NETTYP(net) == OPENIBLND || LNET_NETTYP(net) == IIBLND ||
+           LNET_NETTYP(net) == RALND || LNET_NETTYP(net) == VIBLND ||
+           LNET_NETTYP(net) == MXLND) {
+               fprintf(stderr, "Net %s obsoleted\n", libcfs_lnd2str(net));
+               return -1;
+       }
 
-        g_net_set = 1;
-        g_net = net;
-        return 0;
+       g_net_set = true;
+       g_net = net;
+       return 0;
 }
 
 int
@@ -652,23 +664,22 @@ jt_ptl_print_peers (int argc, char **argv)
         return 0;
 }
 
-int
-jt_ptl_add_peer (int argc, char **argv)
+int jt_ptl_add_peer(int argc, char **argv)
 {
-        struct libcfs_ioctl_data data;
-        lnet_nid_t               nid;
-        __u32                    ip = 0;
-        int                      port = 0;
-        int                      rc;
+       struct libcfs_ioctl_data data;
+       lnet_nid_t nid;
+       __u32 ip = 0;
+       int port = 0;
+       int rc;
 
        if (!g_net_is_compatible(argv[0], SOCKLND, GNILND, 0))
-                return -1;
+               return -1;
 
-        if (argc != 4) {
-               fprintf (stderr, "usage(tcp,ra,gni): %s nid ipaddr port\n",
-                         argv[0]);
-                return 0;
-        }
+       if (argc != 4) {
+               fprintf(stderr, "usage(tcp,gni): %s nid ipaddr port\n",
+                       argv[0]);
+               return 0;
+       }
 
         nid = libcfs_str2nid(argv[1]);
         if (nid == LNET_NID_ANY) {
index 23f7f58..aeed68f 100644 (file)
@@ -82,34 +82,35 @@ command_t cmdlist[] = {
 
        /* Network configuration commands */
        {"===== network config =====", jt_noop, 0, "network config"},
-        {"--net", jt_opt_net, 0,"run <command> after setting network to <net>\n"
-         "usage: --net <tcp/elan/o2ib/...> <command>"},
-        {"network", jt_ptl_network, 0, "configure LNET"
-         "usage: network up|down"},
-        {"net", jt_ptl_network, 0, "configure LNET"
-         "usage: net up|down"},
-        {"list_nids", jt_ptl_list_nids, 0, "list local NIDs"
-         "usage: list_nids [all]"},
-        {"which_nid", jt_ptl_which_nid, 0, "choose a NID"
-         "usage: which_nid NID [NID...]"},
+       {"--net", jt_opt_net, 0, "run <command> after selecting network <net>\n"
+        "usage: --net <tcp/o2ib/...> <command>"},
+       {"network", jt_ptl_network, 0, "configure LNET"
+        "usage: network up|down"},
+       {"net", jt_ptl_network, 0, "configure LNET"
+        "usage: net up|down"},
+       {"list_nids", jt_ptl_list_nids, 0, "list local NIDs"
+        "usage: list_nids [all]"},
+       {"which_nid", jt_ptl_which_nid, 0, "choose a NID"
+        "usage: which_nid NID [NID...]"},
        {"replace_nids", jt_replace_nids, 0,
         "replace primary NIDs for a device\n"
         "usage: replace_nids <device> <nid1>[,nid2,nid3]"},
-        {"interface_list", jt_ptl_print_interfaces,0,"print interface entries\n"
-         "usage: interface_list"},
-        {"peer_list", jt_ptl_print_peers, 0, "print peer entries\n"
-         "usage: peer_list"},
-        {"conn_list", jt_ptl_print_connections, 0,
-         "print all the connected remote nid\n"
-         "usage: conn_list"},
-        {"route_list", jt_ptl_print_routes, 0,
-         "print the portals routing table, same as show_route\n"
-         "usage: route_list"},
-        {"show_route", jt_ptl_print_routes, 0,
-         "print the portals routing table, same as route_list\n"
-         "usage: show_route"},
-        {"ping", jt_ptl_ping, 0, "Check LNET connectivity\n"
-         "usage: ping nid [timeout] [pid]"},
+       {"interface_list", jt_ptl_print_interfaces, 0,
+        "print network interface entries\n"
+        "usage: interface_list"},
+       {"peer_list", jt_ptl_print_peers, 0, "print peer LNet NIDs\n"
+        "usage: peer_list"},
+       {"conn_list", jt_ptl_print_connections, 0,
+        "print all the remote LNet connections\n"
+        "usage: conn_list"},
+       {"route_list", jt_ptl_print_routes, 0,
+        "print the LNet routing table, same as show_route\n"
+        "usage: route_list"},
+       {"show_route", jt_ptl_print_routes, 0,
+        "print the LNet routing table, same as route_list\n"
+        "usage: show_route"},
+       {"ping", jt_ptl_ping, 0, "Check LNET connectivity\n"
+        "usage: ping nid [timeout] [pid]"},
        {"net_drop_add", jt_ptl_drop_add, 0, "Add LNet drop rule\n"
         "usage: net_drop_add <-s | --source NID>\n"
         "                    <-d | --dest NID>\n"
@@ -269,10 +270,10 @@ command_t cmdlist[] = {
         "usage: nodemap_del <nodemap_name>"},
        {"nodemap_add_range", jt_nodemap_add_range, 0,
         "add a range to a nodemap\n"
-        "usage: nodemap_add_range <NID range>"},
+        "usage: nodemap_add_range <nid_range>"},
        {"nodemap_del_range", jt_nodemap_del_range, 0,
         "add a range to a nodemap\n"
-        "usage: nodemap_del_range <NID range>"},
+        "usage: nodemap_del_range <nid_range>"},
        {"nodemap_modify", jt_nodemap_modify, 0,
         "modify a nodemap parameters"
         "usage: nodemap_modify nodemap_name param value"},
@@ -322,30 +323,29 @@ command_t cmdlist[] = {
          "disable writes to the underlying device\n"},
         {"notransno", jt_obd_no_transno, 0,
          "disable sending of committed-transno updates\n"},
-        {"add_uuid", jt_lcfg_add_uuid, 0, "associate a UUID with a nid\n"
-         "usage: add_uuid <uuid> <nid>"},
-        {"del_uuid", jt_lcfg_del_uuid, 0, "delete a UUID association\n"
-         "usage: del_uuid <uuid>"},
-        {"add_peer", jt_ptl_add_peer, 0, "add an peer entry\n"
-         "usage: add_peer <nid> <host> <port>"},
-        {"del_peer", jt_ptl_del_peer, 0, "remove an peer entry\n"
-         "usage: del_peer [<nid>] [<ipaddr|pid>]"},
-        {"add_conn ", jt_lcfg_add_conn, 0,
-         "usage: add_conn <conn_uuid> [priority]\n"},
-        {"del_conn ", jt_lcfg_del_conn, 0,
-         "usage: del_conn <conn_uuid> \n"},
-        {"disconnect", jt_ptl_disconnect, 0, "disconnect from a remote nid\n"
-         "usage: disconnect [<nid>]"},
-        {"push", jt_ptl_push_connection, 0, "flush connection to a remote nid\n"
-         "usage: push [<nid>]"},
-        {"mynid", jt_ptl_mynid, 0, "inform the socknal of the local nid. "
-         "The nid defaults to hostname for tcp networks and is automatically "
-         "setup for elan/myrinet networks.\n"
-         "usage: mynid [<nid>]"},
-        {"fail", jt_ptl_fail_nid, 0, "fail/restore communications.\n"
-         "Omitting the count means indefinitely, 0 means restore, "
-         "otherwise fail 'count' messages.\n"
-         "usage: fail nid|_all_ [count]"},
+       {"add_uuid", jt_lcfg_add_uuid, 0, "associate a UUID with a NID\n"
+        "usage: add_uuid <uuid> <nid>"},
+       {"del_uuid", jt_lcfg_del_uuid, 0, "delete a UUID association\n"
+        "usage: del_uuid <uuid>"},
+       {"add_peer", jt_ptl_add_peer, 0, "add an peer entry\n"
+        "usage: add_peer <nid> <host> <port>"},
+       {"del_peer", jt_ptl_del_peer, 0, "remove an peer entry\n"
+        "usage: del_peer [<nid>] [<ipaddr|pid>]"},
+       {"add_conn ", jt_lcfg_add_conn, 0,
+        "usage: add_conn <conn_uuid> [priority]\n"},
+       {"del_conn ", jt_lcfg_del_conn, 0,
+        "usage: del_conn <conn_uuid>"},
+       {"disconnect", jt_ptl_disconnect, 0, "disconnect from a remote NID\n"
+        "usage: disconnect [<nid>]"},
+       {"push", jt_ptl_push_connection, 0, "flush connection to a remote NID\n"
+        "usage: push [<nid>]"},
+       {"mynid", jt_ptl_mynid, 0, "inform the LND of the local NID. "
+        "The NID defaults to hostname for TCP networks.\n"
+        "usage: mynid [<nid>]"},
+       {"fail", jt_ptl_fail_nid, 0, "fail/restore network communications\n"
+        "Omitting the count means indefinitely, 0 means restore, "
+        "otherwise fail 'count' messages.\n"
+        "usage: fail nid|_all_ [count]"},
 
         /*Test commands for echo client*/
         {"test_create", jt_obd_test_create, 0,
@@ -467,13 +467,13 @@ command_t cmdlist[] = {
        {"del_interface", jt_ptl_del_interface, 0, "del interface entry\n"
         "usage: del_interface [ip]"},
        {"add_route", jt_ptl_add_route, 0,
-        "add an entry to the portals routing table\n"
+        "add an entry to the LNet routing table\n"
         "usage: add_route <gateway> [<hops> [<priority>]]"},
        {"del_route", jt_ptl_del_route, 0,
-        "delete route via gateway to targets from the portals routing table\n"
+        "delete route via gateway to targets from the LNet routing table\n"
         "usage: del_route <gateway> [<target>] [<target>]"},
        {"set_route", jt_ptl_notify_router, 0,
-        "enable/disable routes via gateway in the portals routing table\n"
+        "enable/disable routes via gateway in the LNet routing table\n"
         "usage: set_route <gateway> <up/down> [<time>]"},
 
        { 0, 0, 0, NULL }
@@ -485,7 +485,8 @@ int lctl_main(int argc, char **argv)
 
         setlinebuf(stdout);
 
-        ptl_initialize(argc, argv);
+       if (ptl_initialize(argc, argv) < 0)
+               exit(1);
         if (obd_initialize(argc, argv) < 0)
                 exit(2);
         if (dbg_initialize(argc, argv) < 0)