int oib_get_hfi_names(char hfis[][UMAD_CA_NAME_LEN], int max) { int i; int caCount; int hfiCount = 0; char (*ca_names)[UMAD_CA_NAME_LEN]; ca_names = calloc(max, UMAD_CA_NAME_LEN * sizeof(char)); if (!ca_names) return 0; if ((caCount = umad_get_cas_names((void *)ca_names, max)) <= 0) { hfiCount = caCount; goto out; } for (i = 0; i < caCount; i++) { if (hfi_is_opa(ca_names[i])) { memcpy(hfis[hfiCount], ca_names[i], UMAD_CA_NAME_LEN); hfiCount++; } } out: free(ca_names); return hfiCount; }
/** * use libumad to discover IB ports */ static void init_ib_counter( ) { char names[20][UMAD_CA_NAME_LEN]; int n, i; char *ca_name; umad_ca_t ca; int r; int portnum; if ( umad_init( ) < 0 ) { fprintf( stderr, "can't init UMAD library\n" ); exit( 1 ); } if ( ( n = umad_get_cas_names( ( void * ) names, UMAD_CA_NAME_LEN ) ) < 0 ) { fprintf( stderr, "can't list IB device names\n" ); exit( 1 ); } for ( i = 0; i < n; i++ ) { ca_name = names[i]; if ( ( r = umad_get_ca( ca_name, &ca ) ) < 0 ) { fprintf( stderr, "can't read ca from IB device\n" ); exit( 1 ); } if ( !ca.node_type ) continue; /* port numbers are '1' based in OFED */ for ( portnum = 1; portnum <= ca.numports; portnum++ ) addIBPort( ca.ca_name, ca.ports[portnum] ); } }
int main(int argc, char *argv[]) { char names[UMAD_MAX_DEVICES][UMAD_CA_NAME_LEN]; int dev_port = -1; int list_only = 0, short_format = 0, list_ports = 0; int n, i; static char const str_opts[] = "dlspVhu"; static const struct option long_opts[] = { { "debug", 0, 0, 'd'}, { "list_of_cas", 0, 0, 'l'}, { "short", 0, 0, 's'}, { "port_list", 0, 0, 'p'}, { "Version", 0, 0, 'V'}, { "help", 0, 0, 'h'}, { "usage", 0, 0, 'u'}, { } }; argv0 = argv[0]; while (1) { int ch = getopt_long(argc, argv, str_opts, long_opts, NULL); if ( ch == -1 ) break; switch(ch) { case 'd': debug++; break; case 'l': list_only++; break; case 's': short_format++; break; case 'p': list_ports++; break; case 'V': fprintf(stderr, "%s %s\n", argv0, get_build_version() ); exit(-1); default: usage(); break; } } argc -= optind; argv += optind; if (argc > 1) dev_port = strtol(argv[1], 0, 0); if (umad_init() < 0) IBPANIC("can't init UMAD library"); if ((n = umad_get_cas_names(names, UMAD_MAX_DEVICES)) < 0) IBPANIC("can't list IB device names"); if (argc) { for (i = 0; i < n; i++) if (!strncmp(names[i], argv[0], sizeof names[i])) break; if (i >= n) IBPANIC("'%s' IB device can't be found", argv[0]); strncpy(names[i], argv[0], sizeof names[i]); n = 1; } if (list_ports) { if (ports_list(names, n) < 0) IBPANIC("can't list ports"); return 0; } if (!list_only && argc) { if (ca_stat(argv[0], dev_port, short_format) < 0) IBPANIC("stat of IB device '%s' failed", argv[0]); return 0; } for (i = 0; i < n; i++) { if (list_only) printf("%s\n", names[i]); else if (ca_stat(names[i], -1, short_format) < 0) IBPANIC("stat of IB device '%s' failed", names[i]); } return 0; }
int main(int argc, char *argv[]) { char names[UMAD_MAX_DEVICES][UMAD_CA_NAME_LEN]; int dev_port = -1; int n, i; const struct ibdiag_opt opts[] = { {"list_of_cas", 'l', 0, NULL, "list all IB devices"}, {"short", 's', 0, NULL, "short output"}, {"port_list", 'p', 0, NULL, "show port list"}, {0} }; char usage_args[] = "<ca_name> [portnum]"; const char *usage_examples[] = { "-l # list all IB devices", "mthca0 2 # stat port 2 of 'mthca0'", NULL }; ibdiag_process_opts(argc, argv, NULL, "CDeGKLPsty", opts, process_opt, usage_args, usage_examples); argc -= optind; argv += optind; if (argc > 1) dev_port = strtol(argv[1], 0, 0); if (umad_init() < 0) IBPANIC("can't init UMAD library"); if ((n = umad_get_cas_names(names, UMAD_MAX_DEVICES)) < 0) IBPANIC("can't list IB device names"); if (argc) { for (i = 0; i < n; i++) if (!strncmp(names[i], argv[0], sizeof names[i])) break; if (i >= n) IBPANIC("'%s' IB device can't be found", argv[0]); strncpy(names[0], argv[0], sizeof(names[0])-1); names[0][sizeof(names[0])-1] = '\0'; n = 1; } if (list_ports) { if (ports_list(names, n) < 0) IBPANIC("can't list ports"); return 0; } for (i = 0; i < n; i++) { if (list_only) printf("%s\n", names[i]); else if (ca_stat(names[i], dev_port, short_format) < 0) IBPANIC("stat of IB device '%s' failed", names[i]); } return 0; }