From: Ira Weiny <[email protected]>
Date: Thu, 14 May 2009 17:23:22 -0700
Subject: [PATCH] iblinkinfo: convert to ibdiag_process_opts


Signed-off-by: Ira Weiny <[email protected]>
---
 infiniband-diags/src/iblinkinfo.c |  190 +++++++++++++-----------------------
 1 files changed, 69 insertions(+), 121 deletions(-)

diff --git a/infiniband-diags/src/iblinkinfo.c 
b/infiniband-diags/src/iblinkinfo.c
index d422a2a..ae6da27 100644
--- a/infiniband-diags/src/iblinkinfo.c
+++ b/infiniband-diags/src/iblinkinfo.c
@@ -51,12 +51,16 @@
 #include <complib/cl_nodenamemap.h>
 #include <infiniband/ibnetdisc.h>
 
-char *argv0 = "iblinkinfotest";
+#include "ibdiag_common.h"
 
 static char *node_name_map_file = NULL;
 static nn_map_t *node_name_map = NULL;
 
-static int timeout_ms = 500;
+static uint64_t guid = 0;
+static char *guid_str = NULL;
+static char *dr_path = NULL;
+static char *from = NULL;
+static int hops = 0;
 
 static int down_links_only = 0;
 static int line_mode = 0;
@@ -223,140 +227,84 @@ print_switch(ibnd_node_t *node, void *user_data)
        free(remap);
 }
 
-void
-usage(void)
+static int process_opt(void *context, int ch, char *optarg)
 {
-       fprintf(stderr,
-               "Usage: %s [-hclp -S <guid> -D <direct route> -C <ca_name> -P 
<ca_port>]\n"
-               "   Report link speed and connection for each port of each 
switch which is active\n"
-               "   -h This help message\n"
-               "   -S <guid> output only the node specified by guid\n"
-               "   -D <direct route> print only node specified by <direct 
route>\n"
-               "   -f <dr_path> specify node to start \"from\"\n"
-               "   -n <hops> Number of hops to include away from specified 
node\n"
-               "   -d print only down links\n"
-               "   -l (line mode) print all information for each link on each 
line\n"
-               "   -p print additional switch settings 
(PktLifeTime,HoqLife,VLStallCount)\n"
-
-
-               "   -t <timeout_ms> timeout for any single fabric query\n"
-               "   -s show progress during scan\n"
-               "   --node-name-map <map_file> use specified node name map\n"
-
-               "   -C <ca_name> use selected Channel Adaptor name for 
queries\n"
-               "   -P <ca_port> use selected channel adaptor port for 
queries\n"
-               "   -g print port guids instead of node guids\n"
-               "   --debug print debug messages\n"
-               "   -R (this option is obsolete and does nothing)\n"
-               ,
-                       argv0);
-       exit(-1);
+       switch (ch) {
+       case 1:
+               node_name_map_file = strdup(optarg);
+               break;
+       case 'S':
+               guid_str = optarg;
+               guid = (uint64_t)strtoull(guid_str, 0, 0);
+               break;
+       case 'D':
+               dr_path = strdup(optarg);
+               break;
+       case 'f':
+               from = strdup(optarg);
+               break;
+       case 'n':
+               hops = (int)strtol(optarg, NULL, 0);
+               break;
+       case 'd':
+               down_links_only = 1;
+               break;
+       case 'l':
+               line_mode = 1;
+               break;
+       case 'p':
+               add_sw_settings = 1;
+               break;
+       case 'g':
+               print_port_guids = 1;
+               break;
+       case 'R': /* nop */
+               break;
+       default:
+               return -1;
+       }
+
+       return 0;
 }
 
+
 int
 main(int argc, char **argv)
 {
+
        int rc = 0;
-       char *ca = 0;
-       int ca_port = 0;
        ibnd_fabric_t *fabric = NULL;
-       uint64_t guid = 0;
-       char *guid_str = NULL;
-       char *dr_path = NULL;
-       char *from = NULL;
-       int hops = 0;
-       ib_portid_t port_id = {0};
-
        struct ibmad_port *ibmad_port;
+       ib_portid_t port_id = {0};
        int mgmt_classes[3] = {IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS};
 
-       static char const str_opts[] = "S:D:n:C:P:t:sldgphuf:R";
-       static const struct option long_opts[] = {
-               { "S", 1, 0, 'S'},
-               { "D", 1, 0, 'D'},
-               { "num-hops", 1, 0, 'n'},
-               { "down-links-only", 0, 0, 'd'},
-               { "line-mode", 0, 0, 'l'},
-               { "ca-name", 1, 0, 'C'},
-               { "ca-port", 1, 0, 'P'},
-               { "timeout", 1, 0, 't'},
-               { "show", 0, 0, 's'},
-               { "print-port-guids", 0, 0, 'g'},
-               { "print-additional", 0, 0, 'p'},
-               { "help", 0, 0, 'h'},
-               { "usage", 0, 0, 'u'},
-               { "node-name-map", 1, 0, 1},
-               { "debug", 0, 0, 2},
-               { "compat", 0, 0, 3},
-               { "from", 1, 0, 'f'},
-               { "R", 0, 0, 'R'},
+       const struct ibdiag_opt opts[] = {
+               { "node-name-map", 1, 1, "<file>", "node name map file" },
+               { "switch", 'S', 1, "<switch_guid>", "query only <switch_guid> 
(hex format)"},
+               { "Direct", 'D', 1, "<dr_path>", "query only node specified by 
<dr_path>"},
+               { "from", 'f', 1, "<from>", "specify node to start \"<from>\""},
+               { "hops", 'n', 1, "<hops>", "Number of hops to include away 
from specified node"},
+               { "down", 'd', 0, NULL, "print only down links"},
+               { "line", 'l', 0, NULL, "(line mode) print all information for 
each link on a single line"},
+               { "additional", 'p', 0, NULL, "print additional switch settings 
(PktLifeTime, HoqLife, VLStallCount)"},
+               { "portguids", 'g', 0, NULL, "print port guids instead of node 
guids"},
+               { "GNDN", 'R', 0, NULL, "(This option is obsolete and does 
nothing)"},
                { 0 }
        };
+       char usage_args[] = "";
+
+       ibdiag_process_opts(argc, argv, "sDLG", "SDfndlpgR", opts, process_opt,
+                           usage_args, NULL);
 
-       argv0 = argv[0];
-
-       while (1) {
-               int ch = getopt_long(argc, argv, str_opts, long_opts, NULL);
-               if ( ch == -1 )
-                       break;
-               switch(ch) {
-               case 1:
-                       node_name_map_file = strdup(optarg);
-                       break;
-               case 2:
-                       ibnd_debug(1);
-                       break;
-               case 'f':
-                       from = strdup(optarg);
-                       break;
-               case 'C':
-                       ca = strdup(optarg);
-                       break;
-               case 'P':
-                       ca_port = strtoul(optarg, 0, 0);
-                       break;
-               case 'D':
-                       dr_path = strdup(optarg);
-                       break;
-               case 'n':
-                       hops = (int)strtol(optarg, NULL, 0);
-                       break;
-               case 'd':
-                       down_links_only = 1;
-                       break;
-               case 'l':
-                       line_mode = 1;
-                       break;
-               case 't':
-                       timeout_ms = strtoul(optarg, 0, 0);
-                       break;
-               case 's':
-                       ibnd_show_progress(1);
-                       break;
-               case 'g':
-                       print_port_guids = 1;
-                       break;
-               case 'S':
-                       guid_str = optarg;
-                       guid = (uint64_t)strtoull(guid_str, 0, 0);
-                       break;
-               case 'p':
-                       add_sw_settings = 1;
-                       break;
-               case 'R':
-                       /* GNDN */
-                       break;
-               default:
-                       usage();
-                       break;
-               }
-       }
        argc -= optind;
        argv += optind;
 
-       ibmad_port = mad_rpc_open_port(ca, ca_port, mgmt_classes, 3);
+       if (ibverbose)
+               ibnd_debug(1);
+
+       ibmad_port = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3);
        if (!ibmad_port) {
-               fprintf(stderr, "Failed to open %s port %d", ca, ca_port);
+               fprintf(stderr, "Failed to open %s port %d", ibd_ca, 
ibd_ca_port);
                exit(1);
        }
 
@@ -365,7 +313,7 @@ main(int argc, char **argv)
        if (from) {
                /* only scan part of the fabric */
                str2drpath(&(port_id.drpath), from, 0, 0);
-               if ((fabric = ibnd_discover_fabric(ibmad_port, timeout_ms, 
&port_id, hops)) == NULL) {
+               if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, 
&port_id, hops)) == NULL) {
                        fprintf(stderr, "discover failed\n");
                        rc = 1;
                        goto close_port;
@@ -375,7 +323,7 @@ main(int argc, char **argv)
                if (ib_resolve_portid_str_via(&port_id, guid_str, IB_DEST_GUID,
                                NULL, ibmad_port) >= 0) {
                        if ((fabric = ibnd_discover_fabric(ibmad_port,
-                                       timeout_ms, &port_id, 1)) == NULL)
+                                       ibd_timeout, &port_id, 1)) == NULL)
                                IBWARN("Single node discover failed; attempting 
full scan\n");
                } else
                        IBWARN("Failed to resolve %s; attempting full scan\n",
@@ -383,7 +331,7 @@ main(int argc, char **argv)
        }
 
        if (!fabric) /* do a full scan */
-               if ((fabric = ibnd_discover_fabric(ibmad_port, timeout_ms, 
NULL, -1)) == NULL) {
+               if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, 
NULL, -1)) == NULL) {
                        fprintf(stderr, "discover failed\n");
                        rc = 1;
                        goto close_port;
-- 
1.5.4.5

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to