Lines Matching full:port
74 typedef struct Port Port; typedef
78 struct Port { struct
79 Port *next; argument
80 Port *remoteport; argument
103 Port *ports; argument
120 * Checks whether or not the port state is other than active.
121 * The "sw" argument is only relevant when the port is on a
123 * Returns 1 when port is not active and 0 when active.
124 * Base switch port 0 is considered always active.
126 static int is_port_inactive(Node * node, Port * port, Switch * sw) in is_port_inactive() argument
129 if (port->state != 4 && in is_port_inactive()
136 static int get_node(Node * node, Port * port, ib_portid_t * portid) in get_node() argument
138 void *pi = port->portinfo, *ni = node->nodeinfo, *nd = node->nodedesc; in get_node()
156 memset(pi, 0, sizeof(port->portinfo)); in get_node()
164 mad_decode_field(ni, IB_NODE_PORT_GUID_F, &port->portguid); in get_node()
165 mad_decode_field(ni, IB_NODE_LOCAL_PORT_F, &port->portnum); in get_node()
166 mad_decode_field(pi, IB_PORT_LID_F, &port->lid); in get_node()
167 mad_decode_field(pi, IB_PORT_LMC_F, &port->lmc); in get_node()
168 mad_decode_field(pi, IB_PORT_STATE_F, &port->state); in get_node()
196 DEBUG("portid %s: forward lid %d to port %d", in switch_lookup()
201 static int sameport(Port * a, Port * b) in sameport()
215 static void dump_endnode(int dump, char *prompt, Node * node, Port * port) in dump_endnode() argument
224 node->type == IB_NODE_SWITCH ? 0 : port->portnum); in dump_endnode()
235 node->type == IB_NODE_SWITCH ? 0 : port->portnum, port->lid, in dump_endnode()
236 port->lid + (1 << port->lmc) - 1, nodename); in dump_endnode()
241 static void dump_route(int dump, Node * node, int outport, Port * port) in dump_route() argument
253 outport, port->portguid, port->portnum); in dump_route()
255 fprintf(f, "[%d] -> %s port {0x%016" PRIx64 in dump_route()
259 port->portguid, port->portnum, port->lid, in dump_route()
260 port->lid + (1 << port->lmc) - 1, nodename); in dump_route()
268 Port *port, fromport, toport, nextport; in find_route() local
276 memset(&fromport,0,sizeof(Port)); in find_route()
277 memset(&toport,0,sizeof(Port)); in find_route()
278 memset(&nextport,0,sizeof(Port)); in find_route()
293 port = &fromport; in find_route()
294 portnum = port->portnum; in find_route()
296 dump_endnode(dump, "From", node, port); in find_route()
300 /* Need to print the port in badtbl */ in find_route()
307 if (is_port_inactive(node, port, &sw)) in find_route()
310 if (sameport(port, &toport)) in find_route()
321 IBWARN("can't reach port at %s", in find_route()
329 break; /* found SMA port */ in find_route()
337 if (!sameport(port, &fromport)) { in find_route()
339 ("can't continue: reached CA or router port %" in find_route()
340 PRIx64 ", lid %d", port->portguid, in find_route()
341 port->lid); in find_route()
355 IBWARN("can't reach port at %s", in find_route()
359 /* fix port num to be seen from the CA or router side */ in find_route()
369 /* needed to print the port in badtbl */ in find_route()
375 port = &nextport; in find_route()
376 if (is_port_inactive(&nextnode, port, &sw)) in find_route()
379 portnum = port->portnum; in find_route()
380 dump_route(dump, node, outport, port); in find_route()
387 dump_endnode(dump, "To", node, port); in find_route()
391 IBWARN("Bad port state found: node \"%s\" port %d state %d", in find_route()
392 clean_nodedesc(node->nodedesc), portnum, port->state); in find_route()
395 IBWARN("Bad out port state found: node \"%s\" outport %d state %d", in find_route()
396 clean_nodedesc(node->nodedesc), outport, port->state); in find_route()
433 static int get_port(Port * port, int portnum, ib_portid_t * portid) in get_port() argument
438 port->portnum = portnum; in get_port()
444 mad_decode_field(pi, IB_PORT_LID_F, &port->lid); in get_port()
445 mad_decode_field(pi, IB_PORT_LMC_F, &port->lmc); in get_port()
446 mad_decode_field(pi, IB_PORT_STATE_F, &port->state); in get_port()
447 mad_decode_field(pi, IB_PORT_PHYS_STATE_F, &port->physstate); in get_port()
450 portid2str(portid), portnum, port->lid, port->state, in get_port()
451 port->physstate); in get_port()
455 static void link_port(Port * port, Node * node) in link_port() argument
457 port->next = node->ports; in link_port()
458 node->ports = port; in link_port()
461 static int new_node(Node * node, Port * port, ib_portid_t * path, int dist) in new_node() argument
463 if (port->portguid == target_portguid) { in new_node()
465 link_port(port, node); in new_node()
466 dump_endnode(ibverbose, "found target", node, port); in new_node()
474 VERBOSE("insert dist %d node %p port %d lid %d", dist, node, in new_node()
475 port->portnum, port->lid); in new_node()
477 link_port(port, node); in new_node()
526 ": mlid 0x%x is forwarded to port %d", in switch_mclookup()
540 Port *port, *remoteport; in find_mcpath() local
551 if (!(port = calloc(1, sizeof(Port)))) in find_mcpath()
554 if (get_node(node, port, from) < 0) { in find_mcpath()
560 if ((r = new_node(node, port, from, 0)) > 0) { in find_mcpath()
587 map[port->portnum] = 1; in find_mcpath()
590 " lid %d port %d (leafport %d)", in find_mcpath()
591 node->nodeguid, port->lid, port->portnum, in find_mcpath()
595 /* if starting from a leaf port fix up port (up port) */ in find_mcpath()
614 if (!(port = calloc(1, sizeof(Port)))) in find_mcpath()
617 if (get_port(port, i, path) < 0) { in find_mcpath()
619 ("can't reach node %s port %d", in find_mcpath()
621 free(port); in find_mcpath()
625 if (port->physstate != 5) { /* LinkUP */ in find_mcpath()
626 free(port); in find_mcpath()
630 link_port(port, node); in find_mcpath()
634 free(port); in find_mcpath()
642 if (!(remoteport = calloc(1, sizeof(Port)))) in find_mcpath()
647 ("NodeInfo on %s port %d failed, skipping port", in find_mcpath()
657 remoteport->remoteport = port; in find_mcpath()
682 Port toport; in find_target_portguid()
685 IBWARN("can't find to port\n"); in find_target_portguid()
703 printf("From %s 0x%" PRIx64 " port %d lid %u-%u \"%s\"\n", in dump_mcpath()
730 printf("To %s 0x%" PRIx64 " port %d lid %u-%u \"%s\"\n", in dump_mcpath()
822 IBEXIT("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); in main()
830 IBEXIT("can't resolve source port %s", argv[0]); in main()
834 IBEXIT("can't resolve destination port %s", argv[1]); in main()
838 IBEXIT("cannot resolve lid for port \'%s\'", in main()
841 IBEXIT("cannot resolve lid for port \'%s\'", in main()
851 /* first find a direct path to the src port */ in main()
853 IBEXIT("can't find a route to the src port"); in main()