[ofa-general] Re: [PATCH] infiniband-diags/saquery: attribute names support

Sasha Khapyorsky sashak at voltaire.com
Wed Jan 9 09:57:29 PST 2008


Hi Ira,

On 09:25 Wed 09 Jan     , Ira Weiny wrote:
> Sasha,
> 
> I found this to not work completely for me:
> 
> 09:23:20 > ./saquery NR  8
> root at wopri:~/OpenIB/git-trees/root/sbin

Yes, this version of the patch was buggy (argv++ is missing, but I see -
you found this too :)). I will repost a fixed version.

Thanks for looking at this.

Sasha

> 09:23:26 > ./saquery NR  wopr3
> root at wopri:~/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 <sashak at voltaire.com> 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 <sashak at voltaire.com>
> > ---
> >  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



More information about the general mailing list