From: Ira Weiny <[email protected]> Date: Wed, 22 Apr 2009 17:12:58 -0700 Subject: [PATCH] Add ib_resolve_gid_via and make portid an out only parameter of ib_resolve_portid_str_via
Signed-off-by: Ira Weiny <[email protected]> --- libibmad/include/infiniband/mad.h | 4 ++++ libibmad/src/libibmad.map | 1 + libibmad/src/resolve.c | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 0 deletions(-) diff --git a/libibmad/include/infiniband/mad.h b/libibmad/include/infiniband/mad.h index bdf5158..ee004a9 100644 --- a/libibmad/include/infiniband/mad.h +++ b/libibmad/include/infiniband/mad.h @@ -724,6 +724,7 @@ enum MAD_DEST { IB_DEST_DRPATH, IB_DEST_GUID, IB_DEST_DRSLID, + IB_DEST_GID }; enum MAD_NODE_TYPE { @@ -912,6 +913,9 @@ MAD_EXPORT int ib_resolve_smlid_via(ib_portid_t * sm_id, int timeout, MAD_EXPORT int ib_resolve_guid_via(ib_portid_t * portid, uint64_t * guid, ib_portid_t * sm_id, int timeout, const struct ibmad_port *srcport); +MAD_EXPORT int ib_resolve_gid_via(ib_portid_t * portid, ibmad_gid_t gid, + ib_portid_t * sm_id, int timeout, + const struct ibmad_port *srcport); MAD_EXPORT int ib_resolve_portid_str_via(ib_portid_t * portid, char *addr_str, enum MAD_DEST dest, ib_portid_t * sm_id, const struct ibmad_port *srcport); diff --git a/libibmad/src/libibmad.map b/libibmad/src/libibmad.map index 7b49a4d..1462064 100644 --- a/libibmad/src/libibmad.map +++ b/libibmad/src/libibmad.map @@ -99,6 +99,7 @@ IBMAD_1.3 { ib_path_query_via; ib_resolve_smlid_via; ib_resolve_guid_via; + ib_resolve_gid_via; ib_resolve_portid_str_via; ib_resolve_self_via; mad_field_name; diff --git a/libibmad/src/resolve.c b/libibmad/src/resolve.c index 643c187..05b5602 100644 --- a/libibmad/src/resolve.c +++ b/libibmad/src/resolve.c @@ -70,6 +70,26 @@ int ib_resolve_smlid(ib_portid_t * sm_id, int timeout) return ib_resolve_smlid_via(sm_id, timeout, ibmp); } +int ib_resolve_gid_via(ib_portid_t * portid, ibmad_gid_t gid, + ib_portid_t * sm_id, int timeout, + const struct ibmad_port *srcport) +{ + ib_portid_t sm_portid; + char buf[IB_SA_DATA_SIZE] = { 0 }; + + if (!sm_id) { + sm_id = &sm_portid; + if (ib_resolve_smlid_via(sm_id, timeout, srcport) < 0) + return -1; + } + + if ((portid->lid = + ib_path_query_via(srcport, gid, gid, sm_id, buf)) < 0) + return -1; + + return 0; +} + int ib_resolve_guid_via(ib_portid_t * portid, uint64_t * guid, ib_portid_t * sm_id, int timeout, const struct ibmad_port *srcport) @@ -112,12 +132,15 @@ int ib_resolve_portid_str_via(ib_portid_t * portid, char *addr_str, enum MAD_DEST dest_type, ib_portid_t * sm_id, const struct ibmad_port *srcport) { + ibmad_gid_t gid; uint64_t guid; int lid; char *routepath; ib_portid_t selfportid = { 0 }; int selfport = 0; + memset(portid, 0, sizeof *portid); + switch (dest_type) { case IB_DEST_LID: lid = strtol(addr_str, 0, 0); @@ -152,6 +175,10 @@ int ib_resolve_portid_str_via(ib_portid_t * portid, char *addr_str, return -1; return 0; + case IB_DEST_GID: + if (inet_pton(AF_INET6, addr_str, &gid) <= 0) + return -1; + return ib_resolve_gid_via(portid, gid, sm_id, 0, srcport); default: IBWARN("bad dest_type %d", dest_type); } -- 1.5.4.5 _______________________________________________ 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
