int topo_fmri_fru(topo_hdl_t *thp, nvlist_t *nvl, nvlist_t **fru, int *err) { char *uuid = NULL; struct rsrc r; if (thp->th_uuid == NULL) { if ((uuid = topo_snap_hold(thp, NULL, err)) == NULL) return (set_error(thp, *err, err, "topo_fmri_fru", NULL)); } r.rs_flag = 1; r.rs_err = 0; r.rs_priv = nvl; r.rs_fprop = fru; if (topo_fmri_invoke(thp, nvl, get_prop, &r, err) < 0) { if (uuid != NULL) { topo_hdl_strfree(thp, uuid); topo_snap_release(thp); } return (set_error(thp, *err, err, "topo_fmri_fru", NULL)); } if (uuid != NULL) { topo_hdl_strfree(thp, uuid); topo_snap_release(thp); } return (0); }
int update_configuration_from_topo(diskmon_t *diskp) { int err; topo_hdl_t *thp; topo_walk_t *twp; char *uuid; if ((thp = topo_open(TOPO_VERSION, NULL, &err)) == NULL) { return (TOPO_OPEN_ERROR); } if ((uuid = topo_snap_hold(thp, NULL, &err)) == NULL) { topo_close(thp); return (TOPO_SNAP_ERROR); } if ((twp = topo_walk_init(thp, FM_FMRI_SCHEME_HC, gather_topo_cfg, diskp, &err)) == NULL) { topo_snap_release(thp); topo_hdl_strfree(thp, uuid); topo_close(thp); return (err ? TOPO_WALK_INIT_ERROR : TOPO_SUCCESS); } topo_hdl_strfree(thp, uuid); if (topo_walk_step(twp, TOPO_WALK_CHILD) == TOPO_WALK_ERR) { topo_walk_fini(twp); topo_snap_release(thp); topo_close(thp); return (TOPO_WALK_ERROR); } topo_walk_fini(twp); topo_snap_release(thp); topo_close(thp); return (TOPO_SUCCESS); }
int main(int argc, char *argv[]) { topo_hdl_t *thp = NULL; char *uuid = NULL; int c, err = 0; g_pname = argv[0]; while (optind < argc) { while ((c = getopt(argc, argv, optstr)) != -1) { switch (c) { case 'b': opt_b++; break; case 'C': (void) atexit(abort); break; case 'd': opt_d++; break; case 'e': opt_e++; break; case 'm': opt_m = optarg; break; case 'P': pcnt++; break; case 'p': opt_p++; break; case 'V': opt_V++; break; case 'R': opt_R = optarg; break; case 's': opt_s = optarg; break; case 'S': opt_S++; break; case 't': opt_t++; break; case 'x': opt_x++; break; default: return (usage(stderr)); } } if (optind < argc) { if (g_fmri != NULL) { (void) fprintf(stderr, "%s: illegal argument " "-- %s\n", g_pname, argv[optind]); return (FMTOPO_EXIT_USAGE); } else { g_fmri = argv[optind++]; } } } if (pcnt > 0) get_pargs(argc, argv); if ((thp = topo_open(TOPO_VERSION, opt_R, &err)) == NULL) { (void) fprintf(stderr, "%s: failed to open topology tree: %s\n", g_pname, topo_strerror(err)); return (fmtopo_exit(thp, uuid, FMTOPO_EXIT_ERROR)); } if (opt_d) topo_debug_set(thp, "module", "stderr"); if ((uuid = topo_snap_hold(thp, NULL, &err)) == NULL) { (void) fprintf(stderr, "%s: failed to snapshot topology: %s\n", g_pname, topo_strerror(err)); return (fmtopo_exit(thp, uuid, FMTOPO_EXIT_ERROR)); } else if (err != 0) { (void) fprintf(stderr, "%s: topology snapshot incomplete\n", g_pname); } if (opt_x) { if (opt_b) { (void) fprintf(stderr, "%s: -b and -x cannot be specified together\n", g_pname); return (fmtopo_exit(thp, uuid, FMTOPO_EXIT_USAGE)); } err = 0; if (topo_xml_print(thp, stdout, opt_s, &err) < 0) (void) fprintf(stderr, "%s: failed to print xml " "formatted topology:%s", g_pname, topo_strerror(err)); return (fmtopo_exit(thp, uuid, err ? FMTOPO_EXIT_ERROR : FMTOPO_EXIT_SUCCESS)); } if (opt_t || walk_topo(thp, uuid) < 0) { if (g_fmri != NULL) /* * Try getting some useful information */ print_fmri(thp, uuid); return (fmtopo_exit(thp, uuid, FMTOPO_EXIT_ERROR)); } return (fmtopo_exit(thp, uuid, FMTOPO_EXIT_SUCCESS)); }
/*ARGSUSED*/ int do_prominfo(int opt_v, char *progname, int opt_l, int opt_p) { smbios_hdl_t *shp; smbios_system_t sys; smbios_bios_t bios; smbios_ipmi_t ipmi; smbios_info_t info; topo_hdl_t *thp; char *uuid; const char *s; id_t id; int err; if ((shp = smbios_open(NULL, SMB_VERSION, 0, &err)) == NULL) { (void) fprintf(stderr, gettext("%s: failed to open SMBIOS: %s\n"), progname, smbios_errmsg(err)); return (1); } if ((id = smbios_info_system(shp, &sys)) != SMB_ERR && smbios_info_common(shp, id, &info) != SMB_ERR) { (void) printf(gettext("System Configuration: %s %s\n"), info.smbi_manufacturer, info.smbi_product); } else { (void) fprintf(stderr, gettext("%s: failed to get system info: %s\n"), progname, smbios_errmsg(smbios_errno(shp))); } if (smbios_info_bios(shp, &bios) != SMB_ERR) { (void) printf(gettext("BIOS Configuration: %s %s %s\n"), bios.smbb_vendor, bios.smbb_version, bios.smbb_reldate); } else { (void) fprintf(stderr, gettext("%s: failed to get bios info: %s\n"), progname, smbios_errmsg(smbios_errno(shp))); } if (smbios_info_ipmi(shp, &ipmi) != SMB_ERR) { if ((s = smbios_ipmi_type_desc(ipmi.smbip_type)) == NULL) s = gettext("Unknown"); (void) printf(gettext("BMC Configuration: IPMI %u.%u (%s)\n"), ipmi.smbip_vers.smbv_major, ipmi.smbip_vers.smbv_minor, s); } /* * Silently swallow all libtopo and libpcidb related errors. */ uuid = NULL; if ((thp = topo_open(TOPO_VERSION, NULL, &err)) != NULL) { if ((uuid = topo_snap_hold(thp, NULL, &err)) == NULL) { topo_close(thp); thp = NULL; } } prt_php = pcidb_open(PCIDB_VERSION); (void) printf(gettext( "\n==== Processor Sockets ====================================\n")); (void) printf(gettext("\n%-32s %s"), "Version", "Location Tag"); (void) printf(gettext( "\n-------------------------------- --------------------------\n")); (void) smbios_iter(shp, do_procs, NULL); (void) printf(gettext( "\n==== Memory Device Sockets ================================\n")); (void) printf(gettext("\n%-11s %-6s %-3s %-19s %s"), "Type", "Status", "Set", "Device Locator", "Bank Locator"); (void) printf(gettext( "\n----------- ------ --- ------------------- ----------------\n")); (void) smbios_iter(shp, do_memdevs, NULL); (void) printf(gettext( "\n==== On-Board Devices =====================================\n")); (void) smbios_iter(shp, do_obdevs, NULL); (void) printf(gettext( "\n==== Upgradeable Slots ====================================\n")); (void) printf(gettext("\n%-3s %-9s %-16s %s"), "ID", "Status", "Type", "Description"); (void) printf(gettext( "\n--- --------- ---------------- ----------------------------\n")); (void) smbios_iter(shp, do_slots, thp); smbios_close(shp); topo_hdl_strfree(thp, uuid); if (thp != NULL) { topo_snap_release(thp); topo_close(thp); } pcidb_close(prt_php); return (0); }