void print_node(ibnd_node_t * node, void *user_data) { int header_printed = 0; int p = 0; int startport = 1; int type = 0; int all_port_sup = 0; ib_portid_t portid = { 0 }; uint16_t cap_mask = 0; char *node_name = NULL; switch (node->type) { case IB_NODE_SWITCH: type = PRINT_SWITCH; break; case IB_NODE_CA: type = PRINT_CA; break; case IB_NODE_ROUTER: type = PRINT_ROUTER; break; } if ((type & node_type_to_print) == 0) return; if (node->type == IB_NODE_SWITCH && node->smaenhsp0) startport = 0; node_name = remap_node_name(node_name_map, node->guid, node->nodedesc); if (node->type == IB_NODE_SWITCH) { ib_portid_set(&portid, node->smalid, 0, 0); p = 0; } else { for (p = 1; p <= node->numports; p++) { if (node->ports[p]) { ib_portid_set(&portid, node->ports[p]->base_lid, 0, 0); break; } } } if ((query_cap_mask(&portid, node_name, p, &cap_mask) == 0) && (cap_mask & IB_PM_ALL_PORT_SELECT)) all_port_sup = 1; if (data_counters_only) { for (p = startport; p <= node->numports; p++) { if (node->ports[p]) { if (node->type == IB_NODE_SWITCH) ib_portid_set(&portid, node->smalid, 0, 0); else ib_portid_set(&portid, node->ports[p]->base_lid, 0, 0); print_data_cnts(&portid, cap_mask, node_name, node, p, &header_printed); summary.ports_checked++; if (!all_port_sup) clear_port(&portid, cap_mask, node_name, p); } } } else { if (all_port_sup) if (!print_errors(&portid, cap_mask, node_name, node, 0xFF, &header_printed)) { summary.ports_checked += node->numports; goto clear; } for (p = startport; p <= node->numports; p++) { if (node->ports[p]) { if (node->type == IB_NODE_SWITCH) ib_portid_set(&portid, node->smalid, 0, 0); else ib_portid_set(&portid, node->ports[p]->base_lid, 0, 0); print_errors(&portid, cap_mask, node_name, node, p, &header_printed); summary.ports_checked++; if (!all_port_sup) clear_port(&portid, cap_mask, node_name, p); } } } clear: summary.nodes_checked++; if (all_port_sup) clear_port(&portid, cap_mask, node_name, 0xFF); free(node_name); }
void gps_on() { clear_port(GPSON); notify_fix(false); }