On Wed, 31 Aug 2011 08:26:53 -0700
Hal Rosenstock <[email protected]> wrote:

> 
> without changing libibumad umad_port_t structure
> 
> Signed-off-by: Hal Rosenstock <[email protected]>

Thanks applied,
Ira

> ---
> Changes since v1:
> Rebased to latest master
> 
>  src/ibstat.c |   70 
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 69 insertions(+), 1 deletions(-)
> 
> diff --git a/src/ibstat.c b/src/ibstat.c
> index 92fcd0f..ade5d7a 100644
> --- a/src/ibstat.c
> +++ b/src/ibstat.c
> @@ -1,5 +1,6 @@
>  /*
>   * Copyright (c) 2004-2009 Voltaire Inc.  All rights reserved.
> + * Copyright (c) 2011 Mellanox Technologies LTD.  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
> @@ -43,6 +44,10 @@
>  #include <stdlib.h>
>  #include <getopt.h>
>  #include <netinet/in.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +#include <errno.h>
>  
>  #include <infiniband/umad.h>
>  #include <infiniband/mad.h>
> @@ -96,6 +101,66 @@ static char *port_phy_state_str[] = {
>       "PhyTest"
>  };
>  
> +static int ret_code(void)
> +{
> +     int e = errno;
> +
> +     if (e > 0)
> +             return -e;
> +     return e;
> +}
> +
> +static int sys_read_string(char *dir_name, char *file_name, char *str,
> +                        int max_len)
> +{
> +     char path[256], *s;
> +     int fd, r;
> +
> +     snprintf(path, sizeof(path), "%s/%s", dir_name, file_name);
> +
> +     if ((fd = open(path, O_RDONLY)) < 0)
> +             return ret_code();
> +
> +     if ((r = read(fd, str, max_len)) < 0) {
> +             int e = errno;
> +             close(fd);
> +             errno = e;
> +             return ret_code();
> +     }
> +
> +     str[(r < max_len) ? r : max_len - 1] = 0;
> +
> +     if ((s = strrchr(str, '\n')))
> +             *s = 0;
> +
> +     close(fd);
> +     return 0;
> +}
> +
> +static int is_fdr10(umad_port_t *port)
> +{
> +     char port_dir[256];
> +     char rate[32];
> +     int len, fdr10 = 0;
> +     char *p;
> +
> +     len = snprintf(port_dir, sizeof(port_dir), "%s/%s/%s/%d",
> +                    SYS_INFINIBAND, port->ca_name, SYS_CA_PORTS_DIR,
> +                    port->portnum);
> +     if (len < 0 || len > sizeof(port_dir))
> +             goto done;
> +
> +     if (sys_read_string(port_dir, SYS_PORT_RATE, rate, sizeof(rate)) == 0) {
> +             if ((p = strchr(rate, ')'))) {
> +                     if (!strncasecmp(p - 5, "fdr10", 5))
> +                             fdr10 = 1;
> +             }
> +     }
> +
> +done:
> +     return fdr10;
> +}
> +
>  static int port_dump(umad_port_t * port, int alone)
>  {
>       char *pre = "";
> @@ -116,7 +181,10 @@ static int port_dump(umad_port_t * port, int alone)
>       printf("%sPhysical state: %s\n", pre,
>              (unsigned)port->phys_state <=
>              7 ? port_phy_state_str[port->phys_state] : "???");
> -     printf("%sRate: %d\n", pre, port->rate);
> +     if (is_fdr10(port))
> +             printf("%sRate: %d (FDR10)\n", pre, port->rate);
> +     else
> +             printf("%sRate: %d\n", pre, port->rate);
>       printf("%sBase lid: %d\n", pre, port->base_lid);
>       printf("%sLMC: %d\n", pre, port->lmc);
>       printf("%sSM lid: %d\n", pre, port->sm_lid);
> -- 
> 1.5.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Ira Weiny
Math Programmer/Computer Scientist
Lawrence Livermore National Lab
925-423-8008
[email protected]
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to