Due to the fact there is no corresponding patch to the diags I assume this is 
something you want to support other uses of libibmad?

As this changes the API could you update libibmad.ver as well.

Ira

On Thu, 31 Jan 2013 01:43:42 -0500
Hal Rosenstock <[email protected]> wrote:

> Add ib_node_query_via routine similar to ib_path_query_via
> 
> Signed-off-by: Hal Rosenstock <[email protected]>
> ---
> diff --git a/include/infiniband/mad.h b/include/infiniband/mad.h
> index 0694dc4..02b2353 100644
> --- a/include/infiniband/mad.h
> +++ b/include/infiniband/mad.h
> @@ -65,6 +65,7 @@ BEGIN_C_DECLS
>  #define IB_PC_DATA_SZ                (IB_MAD_SIZE - IB_PC_DATA_OFFS)
>  #define IB_SA_MCM_RECSZ              53
>  #define IB_SA_PR_RECSZ               64
> +#define IB_SA_NR_RECSZ               108
>  #define IB_SA_GIR_RECSZ              72
>  #define IB_BM_DATA_OFFS              64
>  #define IB_BM_DATA_SZ                (IB_MAD_SIZE - IB_BM_DATA_OFFS)
> @@ -1519,6 +1542,9 @@ MAD_EXPORT int ib_path_query_via(const struct 
> ibmad_port *srcport,
>                                ibmad_gid_t srcgid, ibmad_gid_t destgid,
>                                ib_portid_t * sm_id, void *buf);
>       /* returns lid */
> +MAD_EXPORT int ib_node_query_via(const struct ibmad_port *srcport,
> +                              uint64_t guid, ib_portid_t * sm_id,
> +                              void *buf);
>  
>  /* resolve.c */
>  MAD_EXPORT int ib_resolve_smlid(ib_portid_t * sm_id, int timeout) DEPRECATED;
> diff --git a/src/libibmad.map b/src/libibmad.map
> index a4d4418..3f92885 100644
> --- a/src/libibmad.map
> +++ b/src/libibmad.map
> @@ -148,5 +148,6 @@ IBMAD_1.3 {
>               cc_config_status_via;
>               smp_mkey_get;
>               smp_mkey_set;
> +             ib_node_query_via;
>       local: *;
>  };
> diff --git a/src/sa.c b/src/sa.c
> index a9a93cc..352ed9f 100644
> --- a/src/sa.c
> +++ b/src/sa.c
> @@ -145,3 +145,47 @@ int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t 
> destgid, ib_portid_t * sm_id,
>  {
>       return ib_path_query_via(ibmp, srcgid, destgid, sm_id, buf);
>  }
> +
> +/* NodeRecord */
> +#define IB_NR_COMPMASK_LID                           (1ull<<0)
> +#define IB_NR_COMPMASK_RESERVED1                     (1ull<<1)
> +#define IB_NR_COMPMASK_BASEVERSION                   (1ull<<2)
> +#define IB_NR_COMPMASK_CLASSVERSION                  (1ull<<3)
> +#define IB_NR_COMPMASK_NODETYPE                              (1ull<<4)
> +#define IB_NR_COMPMASK_NUMPORTS                              (1ull<<5)
> +#define IB_NR_COMPMASK_SYSIMAGEGUID                  (1ull<<6)
> +#define IB_NR_COMPMASK_NODEGUID                              (1ull<<7)
> +#define IB_NR_COMPMASK_PORTGUID                              (1ull<<8)
> +#define IB_NR_COMPMASK_PARTCAP                               (1ull<<9)
> +#define IB_NR_COMPMASK_DEVID                         (1ull<<10)
> +#define IB_NR_COMPMASK_REV                           (1ull<<11)
> +#define IB_NR_COMPMASK_PORTNUM                               (1ull<<12)
> +#define IB_NR_COMPMASK_VENDID                                (1ull<<13)
> +#define IB_NR_COMPMASK_NODEDESC                              (1ull<<14)
> +
> +#define IB_NR_DEF_MASK IB_NR_COMPMASK_PORTGUID
> +
> +int ib_node_query_via(const struct ibmad_port *srcport, uint64_t guid,
> +                   ib_portid_t * sm_id, void *buf)
> +{
> +     ib_sa_call_t sa = { 0 };
> +     uint8_t *p;
> +
> +     memset(&sa, 0, sizeof sa);
> +     sa.method = IB_MAD_METHOD_GET;
> +     sa.attrid = IB_SA_ATTR_NODERECORD;
> +     sa.mask = IB_NR_DEF_MASK;
> +     sa.trid = mad_trid();
> +
> +     memset(buf, 0, IB_SA_NR_RECSZ);
> +
> +     mad_encode_field(buf, IB_SA_NR_PORT_GUID_F, &guid);
> +
> +     p = sa_rpc_call(srcport, buf, sm_id, &sa, 0);
> +     if (!p) {
> +             IBWARN("sa call node_query failed");
> +             return -1;
> +     }
> +
> +     return 0;
> +}
> --
> 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
Member of Technical Staff
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