summaryrefslogtreecommitdiffstats
path: root/src/hardware/dmidecode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hardware/dmidecode.c')
-rw-r--r--src/hardware/dmidecode.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/hardware/dmidecode.c b/src/hardware/dmidecode.c
index a171707..a4c1050 100644
--- a/src/hardware/dmidecode.c
+++ b/src/hardware/dmidecode.c
@@ -1177,6 +1177,10 @@ void init_dmi_chassis_struct(DmiChassis *chassis)
chassis->version = NULL;
chassis->has_lock = 0;
chassis->power_cords = 0;
+ chassis->asset_tag = NULL;
+ chassis->model = NULL;
+ chassis->product_name = NULL;
+ chassis->uuid = NULL;
}
/*
@@ -1218,6 +1222,30 @@ short check_dmi_chassis_attributes(DmiChassis *chassis)
goto done;
}
}
+ if (!chassis->asset_tag) {
+ if (!(chassis->asset_tag = strdup(""))) {
+ ret = -7;
+ goto done;
+ }
+ }
+ if (!chassis->model) {
+ if (!(chassis->model = strdup(""))) {
+ ret = -8;
+ goto done;
+ }
+ }
+ if (!chassis->product_name) {
+ if (!(chassis->product_name = strdup(""))) {
+ ret = -9;
+ goto done;
+ }
+ }
+ if (!chassis->uuid) {
+ if (!(chassis->uuid = strdup(""))) {
+ ret = -10;
+ goto done;
+ }
+ }
ret = 0;
@@ -1259,6 +1287,13 @@ short dmi_get_chassis(DmiChassis *chassis)
buf = NULL;
continue;
}
+ /* Asset Tag */
+ buf = copy_string_part_after_delim(buffer[i], "Asset Tag: ");
+ if (buf) {
+ chassis->asset_tag = buf;
+ buf = NULL;
+ continue;
+ }
/* Type */
buf = copy_string_part_after_delim(buffer[i], "Type: ");
if (buf) {
@@ -1309,6 +1344,36 @@ short dmi_get_chassis(DmiChassis *chassis)
}
}
+ free_2d_buffer(&buffer, &buffer_size);
+
+ /* get additional dmidecode output for chassis */
+ if (run_command("dmidecode -t 1", &buffer, &buffer_size) == 0
+ && buffer_size > 4) {
+ for (i = 0; i < buffer_size; i++) {
+ /* Model */
+ buf = copy_string_part_after_delim(buffer[i], "Version: ");
+ if (buf) {
+ chassis->model = buf;
+ buf = NULL;
+ continue;
+ }
+ /* Product Name */
+ buf = copy_string_part_after_delim(buffer[i], "Product Name: ");
+ if (buf) {
+ chassis->product_name = buf;
+ buf = NULL;
+ continue;
+ }
+ /* UUID */
+ buf = copy_string_part_after_delim(buffer[i], "UUID: ");
+ if (buf) {
+ chassis->uuid = buf;
+ buf = NULL;
+ continue;
+ }
+ }
+ }
+
/* fill in default attributes if needed */
if (check_dmi_chassis_attributes(chassis) != 0) {
ret = -4;
@@ -1339,6 +1404,31 @@ void dmi_free_chassis(DmiChassis *chassis)
chassis->sku_number = NULL;
free(chassis->version);
chassis->version = NULL;
+ free(chassis->asset_tag);
+ chassis->asset_tag = NULL;
+ free(chassis->model);
+ chassis->model = NULL;
+ free(chassis->product_name);
+ chassis->product_name = NULL;
+ free(chassis->uuid);
+ chassis->uuid = NULL;
+}
+
+char *dmi_get_chassis_tag(DmiChassis *chassis)
+{
+ char *ret;
+
+ if (strlen(chassis->asset_tag) > 0
+ && strcmp(chassis->asset_tag, "Not Specified") != 0) {
+ ret = chassis->asset_tag;
+ } else if (strlen(chassis->serial_number) > 0
+ && strcmp(chassis->serial_number, "Not Specified") != 0) {
+ ret = chassis->serial_number;
+ } else {
+ ret = "0";
+ }
+
+ return ret;
}