From: Ira Weiny <[email protected]> Date: Thu, 13 Aug 2009 19:54:00 -0700 Subject: [PATCH] libibnetdisc: make all fields of ibnd_port_t public
Signed-off-by: Ira Weiny <[email protected]> --- .../libibnetdisc/include/infiniband/ibnetdisc.h | 15 ++-- infiniband-diags/libibnetdisc/src/ibnetdisc.c | 87 ++++++++++---------- infiniband-diags/libibnetdisc/src/internal.h | 11 +-- 3 files changed, 52 insertions(+), 61 deletions(-) diff --git a/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h b/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h index e7f5f6a..4a57855 100644 --- a/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h +++ b/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h @@ -40,7 +40,7 @@ struct ib_fabric; /* forward declare */ struct chassis; /* forward declare */ -struct port; /* forward declare */ +struct ibnd_port; /* forward declare */ /** ========================================================================= * Node @@ -67,7 +67,7 @@ typedef struct ibnd_node { char nodedesc[IB_SMP_DATA_SIZE]; - struct port **ports; /* in order array of port pointers + struct ibnd_port **ports; /* in order array of port pointers the size of this array is info.numports + 1 items MAY BE NULL! (ie 0 == switches only) */ @@ -89,17 +89,20 @@ typedef struct ibnd_node { /** ========================================================================= * Port */ -typedef struct port { +typedef struct ibnd_port { uint64_t guid; int portnum; - int ext_portnum; /* optional if != 0 external port num */ - ibnd_node_t *node; /* node this port belongs to */ - struct port *remoteport; /* null if SMA, or does not exist */ + int ext_portnum; /* optional if != 0 external port num */ + ibnd_node_t *node; /* node this port belongs to */ + struct ibnd_port *remoteport; /* null if SMA, or does not exist */ /* quick cache of info below */ uint16_t base_lid; uint8_t lmc; /* use libibmad decoder functions for info */ uint8_t info[IB_SMP_DATA_SIZE]; + + /* internal use only */ + struct ibnd_port *htnext; } ibnd_port_t; /** ========================================================================= diff --git a/infiniband-diags/libibnetdisc/src/ibnetdisc.c b/infiniband-diags/libibnetdisc/src/ibnetdisc.c index b883d4a..1fc964c 100644 --- a/infiniband-diags/libibnetdisc/src/ibnetdisc.c +++ b/infiniband-diags/libibnetdisc/src/ibnetdisc.c @@ -67,28 +67,28 @@ void decode_port_info(ibnd_port_t * port) } static int get_port_info(struct ibmad_port *ibmad_port, - struct ibnd_fabric *fabric, struct ibnd_port *port, + struct ibnd_fabric *fabric, ibnd_port_t * port, int portnum, ib_portid_t * portid) { char width[64], speed[64]; int iwidth; int ispeed; - port->port.portnum = portnum; - iwidth = mad_get_field(port->port.info, 0, IB_PORT_LINK_WIDTH_ACTIVE_F); - ispeed = mad_get_field(port->port.info, 0, IB_PORT_LINK_SPEED_ACTIVE_F); + port->portnum = portnum; + iwidth = mad_get_field(port->info, 0, IB_PORT_LINK_WIDTH_ACTIVE_F); + ispeed = mad_get_field(port->info, 0, IB_PORT_LINK_SPEED_ACTIVE_F); - if (!smp_query_via(port->port.info, portid, IB_ATTR_PORT_INFO, + if (!smp_query_via(port->info, portid, IB_ATTR_PORT_INFO, portnum, 0, ibmad_port)) return -1; - decode_port_info(&(port->port)); + decode_port_info(port); IBND_DEBUG ("portid %s portnum %d: base lid %d state %d physstate %d %s %s\n", - portid2str(portid), portnum, port->port.base_lid, - mad_get_field(port->port.info, 0, IB_PORT_STATE_F), - mad_get_field(port->port.info, 0, IB_PORT_PHYS_STATE_F), + portid2str(portid), portnum, port->base_lid, + mad_get_field(port->info, 0, IB_PORT_STATE_F), + mad_get_field(port->info, 0, IB_PORT_PHYS_STATE_F), mad_dump_val(IB_PORT_LINK_WIDTH_ACTIVE_F, width, 64, &iwidth), mad_dump_val(IB_PORT_LINK_SPEED_ACTIVE_F, speed, 64, &ispeed)); return 0; @@ -117,11 +117,10 @@ static int query_node_info(struct ibmad_port *ibmad_port, * Returns 0 if non switch node is found, 1 if switch is found, -1 if error. */ static int query_node(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric, - ibnd_node_t * node, struct ibnd_port *iport, + ibnd_node_t * node, ibnd_port_t * port, ib_portid_t * portid) { int rc = 0; - ibnd_port_t *port = &(iport->port); void *nd = node->nodedesc; if ((rc = query_node_info(ibmad_port, fabric, node, portid)) != 0) @@ -202,7 +201,7 @@ static int extend_dpath(struct ibmad_port *ibmad_port, struct ibnd_fabric *f, } static void dump_endnode(ib_portid_t * path, char *prompt, - ibnd_node_t * node, struct ibnd_port *port) + ibnd_node_t * node, ibnd_port_t * port) { char type[64]; if (!show_progress) @@ -212,10 +211,9 @@ static void dump_endnode(ib_portid_t * path, char *prompt, printf("%s -> %s %s {%016" PRIx64 "} portnum %d base lid %d-%d\"%s\"\n", portid2str(path), prompt, type, node->guid, - node->type == IB_NODE_SWITCH ? 0 : port->port.portnum, - port->port.base_lid, - port->port.base_lid + (1 << port->port.lmc) - 1, - node->nodedesc); + node->type == IB_NODE_SWITCH ? 0 : port->portnum, + port->base_lid, + port->base_lid + (1 << port->lmc) - 1, node->nodedesc); } static ibnd_node_t *find_existing_node(struct ibnd_fabric *fabric, @@ -294,7 +292,7 @@ ibnd_node_t *ibnd_update_node(struct ibmad_port * ibmad_port, /* update all the port info's */ for (p = 1; p >= node->numports; p++) { - get_port_info(ibmad_port, f, CONV_PORT_INTERNAL(node->ports[p]), + get_port_info(ibmad_port, f, node->ports[p], p, &(node->path_portid)); } @@ -363,10 +361,9 @@ static void add_to_nodeguid_hash(ibnd_node_t * node, ibnd_node_t * hash[]) hash[hash_idx] = node; } -static void add_to_portguid_hash(struct ibnd_port *port, - struct ibnd_port *hash[]) +static void add_to_portguid_hash(ibnd_port_t * port, ibnd_port_t * hash[]) { - int hash_idx = HASHGUID(port->port.guid) % HTSZ; + int hash_idx = HASHGUID(port->guid) % HTSZ; port->htnext = hash[hash_idx]; hash[hash_idx] = port; @@ -429,19 +426,19 @@ static ibnd_node_t *create_node(struct ibnd_fabric *fabric, } static struct ibnd_port *find_existing_port_node(ibnd_node_t * node, - struct ibnd_port *port) + ibnd_port_t * port) { - if (port->port.portnum > node->numports || node->ports == NULL) + if (port->portnum > node->numports || node->ports == NULL) return (NULL); - return (CONV_PORT_INTERNAL(node->ports[port->port.portnum])); + return (node->ports[port->portnum]); } static struct ibnd_port *add_port_to_node(struct ibnd_fabric *fabric, ibnd_node_t * node, - struct ibnd_port *temp) + ibnd_port_t * temp) { - struct ibnd_port *port; + ibnd_port_t *port; if (node->ports == NULL) { node->ports = calloc(sizeof(*node->ports), node->numports + 1); @@ -458,40 +455,40 @@ static struct ibnd_port *add_port_to_node(struct ibnd_fabric *fabric, } memcpy(port, temp, sizeof(*port)); - port->port.node = (ibnd_node_t *) node; - port->port.ext_portnum = 0; + port->node = (ibnd_node_t *) node; + port->ext_portnum = 0; - node->ports[temp->port.portnum] = (ibnd_port_t *) port; + node->ports[temp->portnum] = (ibnd_port_t *) port; add_to_portguid_hash(port, fabric->portstbl); return port; } -static void link_ports(ibnd_node_t * node, struct ibnd_port *port, - ibnd_node_t * remotenode, struct ibnd_port *remoteport) +static void link_ports(ibnd_node_t * node, ibnd_port_t * port, + ibnd_node_t * remotenode, ibnd_port_t * remoteport) { IBND_DEBUG("linking: 0x%" PRIx64 " %p->%p:%u and 0x%" PRIx64 - " %p->%p:%u\n", node->guid, node, port, port->port.portnum, + " %p->%p:%u\n", node->guid, node, port, port->portnum, remotenode->guid, remotenode, remoteport, - remoteport->port.portnum); - if (port->port.remoteport) - port->port.remoteport->remoteport = NULL; - if (remoteport->port.remoteport) - remoteport->port.remoteport->remoteport = NULL; - port->port.remoteport = (ibnd_port_t *) remoteport; - remoteport->port.remoteport = (ibnd_port_t *) port; + remoteport->portnum); + if (port->remoteport) + port->remoteport->remoteport = NULL; + if (remoteport->remoteport) + remoteport->remoteport->remoteport = NULL; + port->remoteport = (ibnd_port_t *) remoteport; + remoteport->remoteport = (ibnd_port_t *) port; } static int get_remote_node(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric, ibnd_node_t * node, - struct ibnd_port *port, ib_portid_t * path, + ibnd_port_t * port, ib_portid_t * path, int portnum, int dist) { int rc = 0; ibnd_node_t node_buf; - struct ibnd_port port_buf; + ibnd_port_t port_buf; ibnd_node_t *remotenode, *oldnode; - struct ibnd_port *remoteport, *oldport; + ibnd_port_t *remoteport, *oldport; memset(&node_buf, 0, sizeof(node_buf)); memset(&port_buf, 0, sizeof(port_buf)); @@ -499,7 +496,7 @@ static int get_remote_node(struct ibmad_port *ibmad_port, IBND_DEBUG("handle node %p port %p:%d dist %d\n", node, port, portnum, dist); - if (mad_get_field(port->port.info, 0, IB_PORT_PHYS_STATE_F) + if (mad_get_field(port->info, 0, IB_PORT_PHYS_STATE_F) != IB_PORT_PHYS_STATE_LINKUP) return 1; /* positive == non-fatal error */ @@ -548,9 +545,9 @@ ibnd_fabric_t *ibnd_discover_fabric(struct ibmad_port * ibmad_port, struct ibnd_fabric *fabric = NULL; ib_portid_t my_portid = { 0 }; ibnd_node_t node_buf; - struct ibnd_port port_buf; + ibnd_port_t port_buf; ibnd_node_t *node; - struct ibnd_port *port; + ibnd_port_t *port; int i; int dist = 0; ib_portid_t *path; @@ -638,7 +635,7 @@ ibnd_fabric_t *ibnd_discover_fabric(struct ibmad_port * ibmad_port, /* If switch, set port GUID to node port GUID */ if (node->type == IB_NODE_SWITCH) { - port->port.guid = + port->guid = mad_get_field64(node->info, 0, IB_NODE_PORT_GUID_F); } diff --git a/infiniband-diags/libibnetdisc/src/internal.h b/infiniband-diags/libibnetdisc/src/internal.h index 449bd70..f06d2c3 100644 --- a/infiniband-diags/libibnetdisc/src/internal.h +++ b/infiniband-diags/libibnetdisc/src/internal.h @@ -49,15 +49,6 @@ #define IBND_ERROR(fmt, ...) \ fprintf(stderr, "%s:%u; " fmt, __FILE__, __LINE__, ## __VA_ARGS__) -struct ibnd_port { - /* This member MUST BE FIRST */ - ibnd_port_t port; - - /* internal use only */ - struct ibnd_port *htnext; -}; -#define CONV_PORT_INTERNAL(port) ((struct ibnd_port *)port) - /* HASH table defines */ #define HASHGUID(guid) ((uint32_t)(((uint32_t)(guid) * 101) ^ ((uint32_t)((guid) >> 32) * 103))) #define HTSZ 137 @@ -68,7 +59,7 @@ struct ibnd_fabric { /* internal use only */ ibnd_node_t *nodestbl[HTSZ]; - struct ibnd_port *portstbl[HTSZ]; + ibnd_port_t *portstbl[HTSZ]; ibnd_node_t *nodesdist[MAXHOPS + 1]; ibnd_chassis_t *first_chassis; ibnd_chassis_t *current_chassis; -- 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
