diff --git a/src/detection/board/board.h b/src/detection/board/board.h index 44ba5c8ab..64a8dd3a7 100644 --- a/src/detection/board/board.h +++ b/src/detection/board/board.h @@ -7,6 +7,7 @@ typedef struct FFBoardResult FFstrbuf name; FFstrbuf vendor; FFstrbuf version; + FFstrbuf serial; } FFBoardResult; const char* ffDetectBoard(FFBoardResult* board); diff --git a/src/detection/board/board_bsd.c b/src/detection/board/board_bsd.c index 871cf87aa..3fc5f9637 100644 --- a/src/detection/board/board_bsd.c +++ b/src/detection/board/board_bsd.c @@ -6,6 +6,8 @@ const char* ffDetectBoard(FFBoardResult* result) { ffSettingsGetFreeBSDKenv("smbios.planar.product", &result->name); ffCleanUpSmbiosValue(&result->name); + ffSettingsGetFreeBSDKenv("smbios.planar.serial", &result->serial); + ffCleanUpSmbiosValue(&result->serial); ffSettingsGetFreeBSDKenv("smbios.planar.maker", &result->vendor); ffCleanUpSmbiosValue(&result->vendor); ffSettingsGetFreeBSDKenv("smbios.planar.version", &result->version); diff --git a/src/detection/board/board_linux.c b/src/detection/board/board_linux.c index 1092b54ee..380db6c14 100644 --- a/src/detection/board/board_linux.c +++ b/src/detection/board/board_linux.c @@ -7,6 +7,7 @@ const char* ffDetectBoard(FFBoardResult* board) { ffGetSmbiosValue("/sys/devices/virtual/dmi/id/board_name", "/sys/class/dmi/id/board_name", &board->name); + ffGetSmbiosValue("/sys/devices/virtual/dmi/id/board_serial", "/sys/class/dmi/id/board_serial", &board->serial); ffGetSmbiosValue("/sys/devices/virtual/dmi/id/board_vendor", "/sys/class/dmi/id/board_vendor", &board->vendor); ffGetSmbiosValue("/sys/devices/virtual/dmi/id/board_version", "/sys/class/dmi/id/board_version", &board->version); return NULL; diff --git a/src/detection/board/board_windows.c b/src/detection/board/board_windows.c index 612064950..d16d4a905 100644 --- a/src/detection/board/board_windows.c +++ b/src/detection/board/board_windows.c @@ -28,6 +28,8 @@ const char* ffDetectBoard(FFBoardResult* board) ffStrbufSetStatic(&board->name, ffSmbiosLocateString(strings, data->Product)); ffCleanUpSmbiosValue(&board->name); + ffStrbufSetStatic(&board->serial, ffSmbiosLocateString(strings, data->SerialNumber)); + ffCleanUpSmbiosValue(&board->serial); ffStrbufSetStatic(&board->vendor, ffSmbiosLocateString(strings, data->Manufacturer)); ffCleanUpSmbiosValue(&board->vendor); ffStrbufSetStatic(&board->version, ffSmbiosLocateString(strings, data->Version)); diff --git a/src/modules/board/board.c b/src/modules/board/board.c index 0cb3bcfaa..81a663609 100644 --- a/src/modules/board/board.c +++ b/src/modules/board/board.c @@ -12,8 +12,9 @@ void ffPrintBoard(FFBoardOptions* options) ffStrbufInit(&result.name); ffStrbufInit(&result.vendor); ffStrbufInit(&result.version); - const char* error = ffDetectBoard(&result); + ffStrbufInit(&result.serial); + const char* error = ffDetectBoard(&result); if(error) { ffPrintError(FF_BOARD_MODULE_NAME, 0, &options->moduleArgs, "%s", error); @@ -40,6 +41,7 @@ void ffPrintBoard(FFBoardOptions* options) {FF_FORMAT_ARG_TYPE_STRBUF, &result.name}, {FF_FORMAT_ARG_TYPE_STRBUF, &result.vendor}, {FF_FORMAT_ARG_TYPE_STRBUF, &result.version}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result.serial}, }); } @@ -47,6 +49,7 @@ exit: ffStrbufDestroy(&result.name); ffStrbufDestroy(&result.vendor); ffStrbufDestroy(&result.version); + ffStrbufDestroy(&result.serial); } bool ffParseBoardCommandOptions(FFBoardOptions* options, const char* key, const char* value) @@ -90,6 +93,7 @@ void ffGenerateBoardJsonResult(FF_MAYBE_UNUSED FFBoardOptions* options, yyjson_m ffStrbufInit(&board.name); ffStrbufInit(&board.vendor); ffStrbufInit(&board.version); + ffStrbufInit(&board.serial); const char* error = ffDetectBoard(&board); @@ -109,11 +113,13 @@ void ffGenerateBoardJsonResult(FF_MAYBE_UNUSED FFBoardOptions* options, yyjson_m yyjson_mut_obj_add_strbuf(doc, obj, "name", &board.name); yyjson_mut_obj_add_strbuf(doc, obj, "vendor", &board.vendor); yyjson_mut_obj_add_strbuf(doc, obj, "version", &board.version); + yyjson_mut_obj_add_strbuf(doc, obj, "serial", &board.serial); exit: ffStrbufDestroy(&board.name); ffStrbufDestroy(&board.vendor); ffStrbufDestroy(&board.version); + ffStrbufDestroy(&board.serial); } void ffPrintBoardHelpFormat(void) @@ -121,7 +127,8 @@ void ffPrintBoardHelpFormat(void) ffPrintModuleFormatHelp(FF_BOARD_MODULE_NAME, "{1} ({3})", FF_BOARD_NUM_FORMAT_ARGS, (const char* []) { "board name", "board vendor", - "board version" + "board version", + "board serial number", }); } diff --git a/src/util/smbiosHelper.c b/src/util/smbiosHelper.c index 191750fef..6d505b49d 100644 --- a/src/util/smbiosHelper.c +++ b/src/util/smbiosHelper.c @@ -23,6 +23,7 @@ bool ffIsSmbiosValueSet(FFstrbuf* value) !ffStrbufIgnCaseEqualS(value, "Not Available") && !ffStrbufIgnCaseEqualS(value, "INVALID") && !ffStrbufIgnCaseEqualS(value, "Type1ProductConfigId") && + !ffStrbufIgnCaseEqualS(value, "No Enclosure") && !ffStrbufIgnCaseEqualS(value, "All Series") && !ffStrbufIgnCaseEqualS(value, "N/A") ;