[ofa-general] [PATCH] infiniband-diags/smpquery: usage improvement
Sasha Khapyorsky
sashak at voltaire.com
Mon Jan 26 01:14:19 PST 2009
This makes usage of smpquery operations more user friendly - similar to
saquery each operation now has a shorter alias, string matching is case
insensitive and abbreviations are allowed for both operation name and
alias. And it is how this looks:
Usage: smpquery [options] <op> <dest dr_path|lid|guid> [op params]
Supported operations (and aliases, case insensitive):
NodeInfo (NI) <addr>
NodeDesc (ND) <addr>
PortInfo (PI) <addr> [<portnum>]
SwitchInfo (SI) <addr>
PKeyTable (PKeys) <addr> [<portnum>]
SL2VLTable (SL2VL) <addr> [<portnum>]
VLArbitration (VLArb) <addr> [<portnum>]
GUIDInfo (GI) <addr>
Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
infiniband-diags/src/smpquery.c | 32 +++++++++++++++++---------------
1 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/infiniband-diags/src/smpquery.c b/infiniband-diags/src/smpquery.c
index 7dcf888..44280e1 100644
--- a/infiniband-diags/src/smpquery.c
+++ b/infiniband-diags/src/smpquery.c
@@ -54,7 +54,7 @@
typedef char *(op_fn_t)(ib_portid_t *dest, char **argv, int argc);
typedef struct match_rec {
- char *name;
+ const char *name, *alias;
op_fn_t *fn;
unsigned opt_portnum;
} match_rec_t;
@@ -63,14 +63,14 @@ static op_fn_t node_desc, node_info, port_info, switch_info, pkey_table,
sl2vl_table, vlarb_table, guid_info;
static const match_rec_t match_tbl[] = {
- { "nodeinfo", node_info },
- { "nodedesc", node_desc },
- { "portinfo", port_info, 1 },
- { "switchinfo", switch_info },
- { "pkeys", pkey_table, 1 },
- { "sl2vl", sl2vl_table, 1 },
- { "vlarb", vlarb_table, 1 },
- { "guids", guid_info },
+ { "NodeInfo", "NI", node_info },
+ { "NodeDesc", "ND", node_desc },
+ { "PortInfo", "PI", port_info, 1 },
+ { "SwitchInfo", "SI", switch_info },
+ { "PKeyTable", "PKeys", pkey_table, 1 },
+ { "SL2VLTable", "SL2VL", sl2vl_table, 1 },
+ { "VLArbitration", "VLArb", vlarb_table, 1 },
+ { "GUIDInfo", "GI", guid_info },
{0}
};
@@ -373,14 +373,15 @@ guid_info(ib_portid_t *dest, char **argv, int argc)
return 0;
}
-static op_fn_t *
-match_op(char *name)
+static op_fn_t *match_op(char *name)
{
const match_rec_t *r;
+ unsigned len = strlen(name);
for (r = match_tbl; r->name; r++)
- if (!strcmp(r->name, name))
+ if (!strncasecmp(r->name, name, len) ||
+ (r->alias && !strncasecmp(r->alias, name, len)))
return r->fn;
- return 0;
+ return NULL;
}
static int process_opt(void *context, int ch, char *optarg)
@@ -422,10 +423,11 @@ int main(int argc, char **argv)
};
n = sprintf(usage_args, "<op> <dest dr_path|lid|guid> [op params]\n"
- "\nSupported ops:\n");
+ "\nSupported ops (and aliases, case insensitive):\n");
for (r = match_tbl ; r->name ; r++) {
n += snprintf(usage_args + n, sizeof(usage_args) - n,
- " %s <addr>%s\n", r->name,
+ " %s (%s) <addr>%s\n", r->name,
+ r->alias ? r->alias : "",
r->opt_portnum ? " [<portnum>]" : "");
if (n >= sizeof(usage_args))
exit(-1);
--
1.6.0.4.766.g6fc4a
More information about the general
mailing list