Sasha,

I found this to not work completely for me:

09:23:20 > ./saquery NR  8
[EMAIL PROTECTED]:~/OpenIB/git-trees/root/sbin
09:23:26 > ./saquery NR  wopr3
[EMAIL PROTECTED]:~/OpenIB/git-trees/root/sbin
09:23:30 > ./saquery -N wopr3
NodeRecord dump:
                lid.....................0x8
                reserved................0x0
                base_version............0x1
                class_version...........0x1
                node_type...............Channel Adapter
                num_ports...............0x2
                sys_guid................0x0002c902002265ef
                node_guid...............0x0002c902002265ec
                port_guid...............0x0002c902002265ed
                partition_cap...........0x40
                device_id...............0x6282
                revision................0xA0
                port_num................0x1
                vendor_id...............0x2C9
                NodeDescription.........wopr3

I added the following patch.

diff --git a/infiniband-diags/src/saquery.c b/infiniband-diags/src/saquery.c
index 9863860..26cb0d8 100644
--- a/infiniband-diags/src/saquery.c
+++ b/infiniband-diags/src/saquery.c
@@ -1389,6 +1389,7 @@ main(int argc, char **argv)
                else {
                        query_type = q->query_type;
                        argc--;
+                       argv++;
                }
        }


And things work out.

09:23:34 > ./saquery NR  wopr3
NodeRecord dump:
                lid.....................0x8
                reserved................0x0
                base_version............0x1
                class_version...........0x1
                node_type...............Channel Adapter
                num_ports...............0x2
                sys_guid................0x0002c902002265ef
                node_guid...............0x0002c902002265ec
                port_guid...............0x0002c902002265ed
                partition_cap...........0x40
                device_id...............0x6282
                revision................0xA0
                port_num................0x1
                vendor_id...............0x2C9
                NodeDescription.........wopr3

Ira

On Wed, 9 Jan 2008 03:24:02 +0000
Sasha Khapyorsky <[EMAIL PROTECTED]> wrote:

> 
> This let to pass requested via command line SA attribute by name.
> Examples:
> 
>   saquery NodeRecord
>   saquery NR <lid>
> 
> Main motivation for this addition is that I cannot find appropriate free
> characters for adding new attributes (specifically PKeyTableRecord and
> SL2VLTableRecord - p, P, s, S are used already).
> 
> This preserves a command line options currently used for same
> purposes.
> 
> Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
> ---
>  infiniband-diags/src/saquery.c |   54 ++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 52 insertions(+), 2 deletions(-)
> 
> diff --git a/infiniband-diags/src/saquery.c b/infiniband-diags/src/saquery.c
> index 2017a86..9863860 100644
> --- a/infiniband-diags/src/saquery.c
> +++ b/infiniband-diags/src/saquery.c
> @@ -91,7 +91,6 @@ ib_net16_t         requested_lid = 0;
>  int                requested_lid_flag = 0;
>  ib_net64_t         requested_guid = 0;
>  int                requested_guid_flag = 0;
> -ib_net16_t         query_type = IB_MAD_ATTR_NODE_RECORD;
>  
>  /**
>   * Call back for the various record requests.
> @@ -1144,12 +1143,46 @@ clean_up(void)
>       osm_vendor_delete(&vendor);
>  }
>  
> +struct query_cmd {
> +     const char *name, *alias;
> +     ib_net16_t query_type;
> +     int (*handler)(const char *name, osm_bind_handle_t bind_handle,
> +                     char *from, char *to);
> +};
> +
> +static const struct query_cmd query_cmds[] = {
> +     { "ClassPortInfo", "CPI", IB_MAD_ATTR_CLASS_PORT_INFO, },
> +     { "NodeRecord", "NR", IB_MAD_ATTR_NODE_RECORD, },
> +     { "PortInfoRecord", "PIR", IB_MAD_ATTR_PORTINFO_RECORD, },
> +     { "InformInfoRecord", "IIR", IB_MAD_ATTR_INFORM_INFO_RECORD, },
> +     { "LinkRecord", "LR", IB_MAD_ATTR_LINK_RECORD, },
> +     { "ServiceRecord", "SR", IB_MAD_ATTR_SERVICE_RECORD, },
> +     { "PathRecord", "PR", IB_MAD_ATTR_PATH_RECORD, },
> +     { "MCMemberRecord", "MCMR", IB_MAD_ATTR_MCMEMBER_RECORD, },
> +     { 0 }
> +};
> +
> +static const struct query_cmd *find_query(const char *name)
> +{
> +     const struct query_cmd *q;
> +     unsigned len = strlen(name);
> +
> +     for (q = query_cmds; q->name; q++)
> +             if (!strncasecmp(name, q->name, len) ||
> +                 (q->alias && !strncasecmp(name, q->alias, len)))
> +                     return q;
> +
> +     return NULL;
> +}
> +
>  static void
>  usage(void)
>  {
> +     const struct query_cmd *q;
> +
>       fprintf(stderr, "Usage: %s [-h -d -p -N] [--list | -D] [-S -I -L -l -G"
>               " -O -U -c -s -g -m --src-to-dst <src:dst> --sgid-to-dgid 
> <src-dst> "
> -             "-C <ca_name> -P <ca_port> -t(imeout) <msec>] [<name> | <lid> | 
> <guid>]\n",
> +             "-C <ca_name> -P <ca_port> -t(imeout) <msec>] [query-name] 
> [<name> | <lid> | <guid>]\n",
>               argv0);
>       fprintf(stderr, "   Queries node records by default\n");
>       fprintf(stderr, "   -d enable debugging\n");
> @@ -1184,6 +1217,12 @@ usage(void)
>                               "response timeout (default %u msec)\n",
>                       DEFAULT_SA_TIMEOUT_MS);
>       fprintf(stderr, "   --node-name-map <node-name-map> specify a node name 
> map\n");
> +     fprintf(stderr, "\n   Supported query names (and aliases):\n");
> +     for (q = query_cmds; q->name; q++)
> +             fprintf(stderr, "      %s (%s)\n", q->name,
> +                     q->alias ? q->alias : "");
> +     fprintf(stderr, "\n");
> +
>       exit(-1);
>  }
>  
> @@ -1193,10 +1232,12 @@ main(int argc, char **argv)
>       int                ch = 0;
>       int                members = 0;
>       osm_bind_handle_t  bind_handle;
> +     const struct query_cmd *q;
>       char              *src = NULL;
>       char              *dst = NULL;
>       char              *sgid = NULL;
>       char              *dgid = NULL;
> +     ib_net16_t         query_type = 0;
>       ib_net16_t         src_lid;
>       ib_net16_t         dst_lid;
>       ib_api_status_t    status;
> @@ -1342,6 +1383,15 @@ main(int argc, char **argv)
>       argc -= optind;
>       argv += optind;
>  
> +     if (!query_type) {
> +             if (!argc || !(q = find_query(argv[0])))
> +                     query_type = IB_MAD_ATTR_NODE_RECORD;
> +             else {
> +                     query_type = q->query_type;
> +                     argc--;
> +             }
> +     }
> +
>       if (argc) {
>               if (node_print_desc == NAME_OF_LID) {
>                       requested_lid = (ib_net16_t)strtoul(argv[0], NULL, 0);
> -- 
> 1.5.4.rc2.38.gd6da3
_______________________________________________
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