On 16:20 Thu 11 Dec , Ira Weiny wrote: > [snip...]
> diff --git a/infiniband-diags/libibnetdisc/test/iblinkinfotest.c > b/infiniband-diags/libibnetdisc/test/iblinkinfotest.c > new file mode 100644 > index 0000000..6e63f4a > --- /dev/null > +++ b/infiniband-diags/libibnetdisc/test/iblinkinfotest.c > @@ -0,0 +1,395 @@ > +/* > + * Copyright (c) 2004-2007 Voltaire Inc. All rights reserved. > + * Copyright (c) 2007 Xsigo Systems Inc. All rights reserved. > + * Copyright (c) 2008 Lawrence Livermore National Lab. All rights reserved. > + * > + * This software is available to you under a choice of one of two > + * licenses. You may choose to be licensed under the terms of the GNU > + * General Public License (GPL) Version 2, available from the file > + * COPYING in the main directory of this source tree, or the > + * OpenIB.org BSD license below: > + * > + * Redistribution and use in source and binary forms, with or > + * without modification, are permitted provided that the following > + * conditions are met: > + * > + * - Redistributions of source code must retain the above > + * copyright notice, this list of conditions and the following > + * disclaimer. > + * > + * - Redistributions in binary form must reproduce the above > + * copyright notice, this list of conditions and the following > + * disclaimer in the documentation and/or other materials > + * provided with the distribution. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND > + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS > + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN > + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN > + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > + * SOFTWARE. > + * > + */ > + > +#if HAVE_CONFIG_H > +# include <config.h> > +#endif /* HAVE_CONFIG_H */ > + > +#define _GNU_SOURCE > +#include <stdio.h> > +#include <stdlib.h> > +#include <unistd.h> > +#include <stdarg.h> > +#include <time.h> > +#include <string.h> > +#include <getopt.h> > +#include <errno.h> > +#include <inttypes.h> > + > +#include <infiniband/complib/cl_nodenamemap.h> > +#include <infiniband/ibnetdisc.h> > + > +char *argv0 = "iblinkinfotest"; > +static FILE *f; > + > +static char *node_name_map_file = NULL; > +static nn_map_t *node_name_map = NULL; > + > +static int timeout_ms = 500; > + > +static int debug = 0; > +#define DEBUG(str, args...) \ > + if (debug) fprintf(stderr, str, ##args) > + > +static int down_links_only = 0; > +static int line_mode = 0; > +static int add_sw_settings = 0; > +static int print_port_guids = 0; > + > +static unsigned int > +get_max(unsigned int num) > +{ > + unsigned int v = num; // 32-bit word to find the log base 2 of > + unsigned r = 0; // r will be lg(v) > + > + while (v >>= 1) // unroll for more speed... > + { > + r++; > + } > + > + return (1 << r); > +} > + > +void > +get_msg(char *width_msg, char *speed_msg, int msg_size, ibnd_port_t *port) > +{ > + int max_speed = 0; > + > + int max_width = get_max(port->info.link_width_supported > + & port->remoteport->info.link_width_supported); > + if ((max_width & port->info.link_width_active) == 0) { > + // we are not at the max supported width > + // print what we could be at. > + snprintf(width_msg, msg_size, "Could be %s", > + ibnd_linkwidth_str(max_width)); > + } > + > + max_speed = get_max(port->info.link_speed_supported > + & port->remoteport->info.link_speed_supported); > + if ((max_speed & port->info.link_speed_active) == 0) { > + // we are not at the max supported speed > + // print what we could be at. > + snprintf(speed_msg, msg_size, "Could be %s", > + ibnd_linkspeed_str(max_speed, 1)); > + } > +} > + > +void > +print_port(ibnd_node_t *node, ibnd_port_t *port) > +{ > + char remote_guid_str[256]; > + char remote_str[256]; > + char link_str[256]; > + char width_msg[256]; > + char speed_msg[256]; > + char ext_port_str[256]; > + > + if (!port) > + return; > + > + remote_guid_str[0] = '\0'; > + remote_str[0] = '\0'; > + link_str[0] = '\0'; > + width_msg[0] = '\0'; > + speed_msg[0] = '\0'; > + > + if (port->remoteport) { > + char remote_name_buf[256]; > + strncpy(remote_name_buf, port->remoteport->node->nodedesc, 256); > + > + if (port->remoteport->ext_portnum) > + snprintf(ext_port_str, 256, "%d", > port->remoteport->ext_portnum); > + else > + ext_port_str[0] = '\0'; > + > + get_msg(width_msg, speed_msg, 256, port); > + if (line_mode) { > + if (print_port_guids) { > + snprintf(remote_guid_str, 256, > + "0x%016lx ", > + port->remoteport->guid); Here and below, printing uint64_t as %lx generates warning on 32-bit machine. I would suggest to use portable string macros - PRIx64. Sasha _______________________________________________ general mailing list general@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general