Repository navigation
Releases: sdnvx/opendmi-ng
Releases · sdnvx/opendmi-ng
Release list
v0.6.1
v0.6.0
Added
- Add
--no-pageroption to CLI - SMBIOS 3.10: LPDDR6 memory devices, InfiniBand and GPU controller onboard devices, disabled and unmapped flags of memory devices
- Lint rules
memory-device.attributesandmemory-device.disabled <opendmi/trace.h>withdmi_trace_*()macros, which raise a standard error and return the value of the failuredmi_attributes_walk(),dmi_attribute_walk(),dmi_fields_decode_into(),dmi_fields_encode_from(),dmi_fields_release(),dmi_attributes_unlink(),dmi_entity_is_*(),dmi_is_open(),dmi_string_set_bytes(),dmi_string_from_bytes(),DMI_NAME_FUNCTION()andDMI_ATTRIBUTE_FLAG_OWNED- Field parameters
fromandbeforefor the bits a version of the specification defines, andpresentof field groups - Manual pages of the rest of the public API, and links to them on the website and in the reference
- Tests of the argument checks of the library, of filters and of Base64 encoding
Changed
- Rename error codes after one scheme,
DMI_ERROR_<SUBJECT>[_<DETAIL>]_<CONDITION>, e.g.DMI_ERROR_ARGUMENT_NULLandDMI_ERROR_FILE_OPEN_FAILED, remove the unused ones and renumber them - Report errors through the error codes everywhere: check the pointer arguments of the API at run time rather than with assertions or silently, and report the errors of vectors, checksums and version formatting rather than in
errno;dmi_vector_initialize()takes a context, anddmi_checksum_calc()returns the checksum through a pointer - Raise the errors of missing arguments against the context at hand, e.g. the one of a filter, a registry, a check in progress, a decoder, an encoder or the buffer of a reader, rather than nowhere, and take what stands for no value silently: a
nullptrresource indmi_resource_string(), anullptrname indmi_vendor_detect()and anullptrdestination of no bytes in the functions of readers - Unify the names of the API:
dmi_vector_init()anddmi_registry_iter_init()to*_initialize(), anddmi_locale_init()todmi_locale_setup()enum dmi_context_statustoenum dmi_registry_status, the Acer and Dell*_tof entries to*_entry_t, andseverityof lint rules toreader_severity- type 42 after its structure,
dmi_mgmt_controller_t:DMI_TYPE_ID_MGMT_CONTROLLER,DMI_TYPE(mgmt_controller),dmi_mgmt_controller_spec, codemgmt-controllerand lint rulemgmt-controller.records ifaceandaddrin the names of types, functions and macros, e.g.dmi_ipmi_iface_type_t,dmi_mgmt_iface_type_t,dmi_bis_real_mode_addr_tandDMI_MAC_ADDR_LENGTH- the types of members after the members, in the same words:
dmi_ipmi_intr_trigger_mode_t,dmi_ipmi_iface_type_t,dmi_hpe_drive_form_factor_t,dmi_memory_device_type_details_t,dmi_memory_array_use_t,dmi_tpm_device_chars_tanddmi_firmware_inventory_chars_t, with their values and names, anddmi_mgmt_nhi_characteristic_ttodmi_mgmt_nhi_char_t, after its values - members after the codes they are exported as, in full words, e.g.
interface_type,start_address,specification_version,interrupt_number,architecture,characteristicsanduse, andprocessor_classof Apple processor types toclazz, since its codeclassis a keyword of C++
- Export codes in full words:
start-address,end-address,array-address,array-address-handle,device-address,table-area-address,interface-typeandinterface-data, and the vendor of TPM devices asvendor - Spell the codes of name sets, which their names are translated under, in full words and in the singular, e.g.
cache-associativity,ipmi-address-type,intel-vpro-cpu-capabilityandslot-feature-exrather thancache-assoc,ipmi-addr-type,intel-vpro-cpu-capsandslot-features-ex - Allocate the strings which structures spell in their own bytes rather than keeping them in buffers of the structures, so that a structure no longer points into itself;
vendor_idof TPM devices is replaced byvendor_raw - Remove the internal functions from the public headers and the shared library
- Take physical addresses as
uint64_t, so that addresses above 4 GiB reach 32-bit systems intact - SMBIOS 3.10: read the rank of memory devices as five bits, and describe the OK memory error type as unmapped memory devices too
- Free the arrays of fields and of linked structures in the library, and tell the optional fields of HP/HPE, Intel and Dell structures by their groups, leaving the groups a structure does not hold out of canonical encoding
- Tell the structures carrying additional information by
DMI_REGISTRY_STATUS_OVERLAIDwhen anonymizing, save dumps through a temporary file, and check length and checksum of entry points found by scanning memory - Default
listto raw output when stdout is not a terminal, drop the banner ofmodules -randtypes -r, and quote YAML values and keys a YAML 1.1 parser would misread - Build without
-Werrorand AddressSanitizer unlessENABLE_WERRORandENABLE_ASANare set, asbuild.shand CI do, take optimization from the flags of the build type,-O2for release builds, drop the warnings suppressed for Clang, and run the tests of the release and debug builds on Linux in CI under AddressSanitizer and LeakSanitizer, which the project itself enables in debug builds only - Keep internal headers next to their sources, take the sources by directories in CMake, make
regress.pyandreindex-data.pyreport failures in their exit status, and resolvebuild.sh -brelative to the current directory - Document lifetime of error descriptors and of strings returned before
dmi_set_locale(), and the errors the manual pages of streams, fields, attribute walks, lint checks and file wrappers left out
Fixed
- Fix SMBIOS 2.1 entry points of 30 bytes and IPMI device information of 16 bytes rejected, additional information counting entries which failed to decode and failing without entries, chassis contained elements shorter than three bytes lost, and BCD values truncated when encoding
- Fix crashes and out-of-bounds accesses on a failed registry insertion, boolean attributes without a name for the value,
dmi_code_lookup_rev()with no code, variant attributes without variants,dmi_field_get()with no member, modules without a code, an empty list of types indmi_registry_resolve_any(), fields wider than 8 bytes,dmi_lint_issue()without a format,dmi_string_from_bytes()without a buffer, anddmi_buffer_at()on a buffer which has never held data - Fix sizes which overflow:
dmi_buffer_resize()hanging on a length close toSIZE_MAX, anddmi_buffer_write(),dmi_writer_skip_ex()and the writers of ranges without a length writing wherever the sum of the offset and the length wraps around to - Fix missing or wrong errors: filters not reporting exhausted memory,
dmi_registry_create()anddmi_filter_add_module()not checking their arguments,dmi_asprintf()leaving the result undefined,dmi_alloc_array()not detecting overflow,dmi_date_parse()accepting empty parts,dmi_vendor_detect()not ignoring surrounding whitespace,dmi_base64_decode()accepting characters which are not of the alphabet and padding anywhere but at the end,dmi_string_set_bytes()taking missing bytes for no text, anddmi_encoder_finish()aborting once the writer has been moved back over the header - Fix
dmi_set_locale()keeping the caller's pointer, failing where the library has no translations for the new locale and not looking for them again where it has, the strings of the locale of the environment used for a locale without translations, anddmi_type_name()naming type numbers out of range OEM-specific - Fix memory leaks and invalid frees on error paths, and undefined behaviour and overflows in printing sizes and the module list, case conversion, copying device memory on AArch64 and mapping files
- Fix output failures, e.g.
export -o /dev/full, exiting without an error message, out-of-memory errors reported twice, the pager mishandling early quits, signals and its command line, the log file left locked, dumps to devices and pipes refused, and XML write failures reported as internal errors on NetBSD - Fix the stack frame of
dmi_lint()too large for the kernel module, and number overflow not detected in it (opendmi-sysfs) - Fix coverage builds,
build.sh distcleanable to delete the source tree, and the Python module not building - Fix links to manual pages shown with a section suffix, and the filter example of the registry (website/reference)
Security
- Escape control characters of firmware strings in text output instead of passing them to the terminal
- Reject SMBIOS tables larger than 16 MiB, dump files which are not regular files or too large, and Windows tables longer than the returned data
v0.5.1
Added
- Add
dmidecode-to-bin.pyscript rebuilding binary dumps fromdmidecode -uoutput - Name subclasses and protocols of USB mass storage devices and hubs in HP/HPE USB device correlation records
- Add
no_stringsto structure signatures, which tells the structures carrying no strings - Name radio button bit of Acer communication functions, the way the Acer WMI driver of Linux names it
- Name kinds of Acer devices: the webcam, the audio, the wireless network and the Bluetooth adapters the PCI and USB IDs of the data corpus tell, and the other kinds found in it by their values
- Add Cisco module, which decodes PCI slot buses (type 201) and PCI adapter information (type 202) of Cisco UCS servers, and
DMI_VENDOR_CISCO - Decode AMI FireWire GUID (type 139), whose data identifies the board and is replaced when the table is anonymized
- Decode Intel platform information (type 148), which the reference code of Intel Bay Trail platforms gives
- Decode Dell device bays of 11 bytes, e.g. of Latitude E6230, which refer to two more strings
- Decode Intel ASF information (type 129), which names the Alert Standard Format support of Intel platforms
- Add
DMI_ATTRIBUTE_FLAG_OPENfor enumerations which name some of the values only, whose other valuesvalue.invalid-enumdoes not report - Add processor signature of HP/HPE CPU microcode patches, with the base family put back on AMD platforms the way dmidecode does
- Add string at offset 0x09 of HP/HPE other ROM information, whose meaning is not established
- Decode capabilities of the processor, of the Management Engine, of the TPM and of the BIOS in Intel vPro information, as the Intel AMT implementation guide gives them, and the memory controller hub of its older layout
- Decode wireless network controller of Intel vPro information, in whose place the firmware of HP laptops gives the host bridge
- Decode OEM capabilities of Intel AMT information and the terminal emulation of Serial over LAN, as the Intel AMT implementation guide gives them
- Name error codes and the test working state of Intel Management Engine firmware, the way coreboot names them
- Add
is_reportedto interfaces of Intel Management Engine interface information, which tells the interfaces whose registers are all zeroes
Changed
- Take HP servers naming no generation for G6, the way dmidecode does
- Show fields of HP/HPE trusted module status only when the structure holds them and they apply
- Hide A0 and A2 bay counts and names of HP/HPE drive backplanes from Gen10 Plus onwards
- Split CPLD version of HP/HPE risers into the version and the
B.release flag - Replace the vector of tokens of Dell token references, type 1, with an array of
token_countelements - Tell Intel Management Engine interface information and Silicon View Technology milestones by their signatures
- Show fields of HP/HPE ProLiant information and server system ID only when the structure holds them
- Show fields of HP/HPE 64-bit CRU information for the records of the
$CRUsignature only - Show physical slot of HP/HPE device correlation records for peer bifurcated devices only
- Enable Lenovo module by the vendor of the system too, the way dmidecode tells Lenovo systems
- Require 12 bytes of Dell BIOS flags, the way the Dell SMBIOS WMI driver of Linux does
- Show redundant ROM version of HP/HPE other ROM information only when the redundant ROM is installed, up to Gen11, and the OEM ROM image only when named, the way dmidecode does
- Show x2APIC ID of HP/HPE processor specific information in the x2APIC mode only
- Show board number of HP/HPE DIMM location records for memory boards only, fields of the Innovation Engine up to Gen11 only, and the DIMM index only when the structure holds it
- Show PCI location of HP/HPE device correlation records only when the structure holds it
- Check controller manufacturer ID of HP/HPE DIMM location records as a JEDEC code
- Stop checking parent handle of HP/HPE device correlation records against the device correlation records, which is not documented
- Replace
flags_1,flags_2andflags_3of Intel vPro information withcpu_capabilities,me_capabilitiesandbios_capabilities, and split the PCI bus out oflpc_devfnandgbe_devfn - Replace
oem_capabilitiesof Intel AMT information withoem_capabilities_1,terminal,oem_capabilities_3andoem_capabilities_4 - Make error code of Intel Management Engine interface information a
dmi_intel_me_error_t, unspecified asDMI_INTEL_ME_ERROR_UNSPEC - Hide registers of Intel Management Engine interfaces which are not reported, and take the state of the firmware as unknown when the first one is not
Fixed
- Fix passphrase state of HP/HPE DIMM configuration read from bit 0 only
- Fix HP/HPE interleave set health 0xFF shown as unspecified instead of reserved
- Fix chip of HP/HPE trusted modules told by the whole identifier word instead of its low byte
- Fix Intel firmware version and Management Engine interface information kept by Dell at their own types decoded as Dell structures or left undecoded
- Fix Dell token references, type 1, of 20 bytes rejected as too short
- Fix structures of other vendors at type 222 decoded as Intel Silicon View Technology milestones
- Fix structures of 7 bytes of ThinkPads decoded as Lenovo machine type model
- Fix number of the communication function key of Acer hotkey functions of 15 bytes lost
- Fix zero SKU of Intel Management Engine firmware reported as an invalid value
- Fix YAML and JSON export describing structures by their type number instead of the specification decoding them
- Fix structures no specification matches named after a specification of their type
- Fix handles of Dell device names not checked against the types they refer to
- Fix structures of type 211 of other lengths than 13 bytes, e.g. of Dell Studio 1555, decoded as Dell infrared ports
- Fix JEDEC codes copied from the SPD, which carry a parity bit in the number of continuation codes, reported by
value.jep106as leading to bank 129
v0.5.0
Added
- Add
ENABLE_ASANbuild option - Add CI workflow for Intel macOS
- Add
lintcommand checking SMBIOS data against the specification rules - Add
dmi_lintAPI and lint rules registry - Add lint rules for structures, strings, values, references, additional information entries and data quality
- Add lint rules of structure types to their specifications
- Add
targets,minimumandmaximumattribute parameters for lint rules - Add
dmi_reader_mark(),dmi_reader_rewind()anddmi_reader_skip_ex()functions - Add
dmi_buffer_tfor SMBIOS data ownership - Add
dmi_writer_t,dmi_decoder_tanddmi_encoder_tAPIs - Add
dmi_entity_buffer()anddmi_entity_offset()functions - Add declarative structure layouts (
dmi_field_t) withdmi_fields_decode()anddmi_fields_encode()functions - Add
dmi_entity_encode()function - Migrate nearly all decoders to declarative structure layouts
- Add basic C++ API
- Add SysFS module skeleton
- Add binary, variant and vector (
DMI_FIELD_VECTOR,DMI_ATTRIBUTE_VECTOR) attributes - Add string properties support, including linking
- Add
DMI_ATTRIBUTE_FLAG_IPandDMI_ATTRIBUTE_FLAG_PRIVATEflags - Add
dmi_string_set()anddmi_string_is_placeholder()functions - Add missing
*_name()functions for enumerations - Add processor upgrade value 0xFF of SMBIOS 3.8
- Add platform detection (
dmi_platform_t,dmi_get_platform(),dmi_set_platform()) - Add AMD, Honor, Huawei and Unisys vendors
- Add family and generation detection of HP/HPE servers
- Add platform conditions for extension modules, generation ranges of structure specifications and structure relocations
- Add automatic enabling of platform extension modules (
DMI_CONTEXT_FLAG_AUTO_MODULES) and--no-auto-modulesoption - Add
DMI_MODULE_FLAG_YIELDmodule flag andDMI_VENDOR_ANYplatform condition - Add
dmi_filter_add_module()function - Add structure specification signatures (
dmi_signature_t) for structures of different layouts sharing a type number - Add extension module groups (
dmi_module_group_t) andgroup-assoc.memberlint rule - Add
dmi_anonymize()function and--anonymizeoption ofdumpcommand - Add
-O/--overlayglobal option to apply additional information entries - Add Boot Integrity Services (BIS) entry point decoder
- Add processor additional information decoder
- Add management controller host interface data and protocol records decoding (DSP0270)
- Add processor ID decoding for x86 and Arm processors
- Add decoding of all system event log fields, including access method address
- Add
intelmodule with Intel MEI (219), vPro (131), AMT (130), SVT (222) and firmware version information (221) decoders - Add Intel RSD processor CPUID and physical device mapping decoders
- Add
intel-rsd-cabled-pcie.start-laneandintel-rsd-cabled-pcie.cable-countlint rules - Add Dell indexed IO, calling interface, protected area, BIOS flags (177) and hotkeys (178) decoders
- Enable
dellmodule for Unisys ES servers and Dell systems with firmware of other vendors - Add Sun extended processor, port, memory array, memory device and PCIe root complex decoders
- Add HP/HPE server structures decoders
- Add Lenovo ThinkVantage Technologies (131) and OEM data (135, 140) decoders
- Add Acer hotkey functions (170) decoder
- Add Apple firmware volume (128), memory SPD data (130), processor type (131), processor bus speed (132), platform feature (133) and SMC version (134) decoders
- Add decoders of structures reverse-engineered from the data corpus
- Show TPM device vendor ID and TPM firmware version according to the TPM version
- Show Intel RSD network card and HP/HPE NIC MAC addresses
- Show nested structures, string properties and additional information entries in all output formats
- Show firmware inventory versions and identifiers according to their formats
- Show management device thresholds in component units
- Show IPMI SMBus target addresses as numbers
- Show vendor- and product-specific boot status data
- Add ICU4C resources for en_US and ru_RU locales
- Translate names, units, values, messages and command line help
- Add manual pages for the command line tool and all of its commands
- Add manual pages for buffer, reader, writer, decoder and encoder APIs
- Add manual pages for
dmi_destroy(),dmi_set_logger()anddmi_log_message() - Add manual pages for entity types and complete manual pages containing only synopsis
- Add raised errors description to library manual pages
- Add lint rules description to
lintcommand manual page - Document all members of entity types
- Add Getting started, Behind the scenes and File formats parts, legal notice, manual pages, extension modules list and module structure specifications to the reference manual
- Add project website with schemas of exported documents
- Add tests for the buffer, writer, decoder, encoder and field engine
- Add tests for decoders of BIS entry point, system boot, system event log, TPM device, management device threshold, additional information and Intel RSD structures
- Extend data corpus from 90 to 248 dumps
Changed
- Identify structure types by
dmi_type_tobjects instead of type numbers (dmi_type_id_t) - Take structure types in
dmi_entity_info(),dmi_entity_data(), registry lookups and attributetargets - Return structure type from
dmi_entity_type(), adddmi_entity_type_id(),dmi_registry_lookup_first_id()anddmi_registry_resolve_id()functions - Rename
typefield ofdmi_entity_ttotype_idand C++dmi::typeenumeration todmi::type_id - Rename
dmi_targets()macro todmi_types() - Replace
overwriteargument ofdmi_save()withdmi_save_flags_tflags - Rename
dmi_stream_ttodmi_reader_t, replacedmi_stream_decode*()anddmi_stream_read*()withdmi_decoder_get*() - Hold SMBIOS data in context buffers instead of backend-allocated memory
- Take buffer and offset in
dmi_entity_create()instead of data pointer - Replace
dmi_entity_reader()withdmi_decoder_initialize() - Rename
dmi_entity_stop()anddmi_entity_incomplete()todmi_decoder_stop()anddmi_decoder_incomplete() - Rename
dmi_file_get()anddmi_memory_get()todmi_file_load()anddmi_memory_load() - Rename
dmi_version_format_ttodmi_firmware_version_format_t - Rename
dmi_system_log_header_fmt_ttodmi_system_log_header_format_t - Rename misspelled identifiers and attribute codes
- Rename
vendorfield ofdmi_platform_tanddmi_platform_match_ttofirmware_vendor - Rename Intel RSD module to
intel-rsdand move its headers to<opendmi/entity/intel-rsd/> - Rename Intel RSD FPGA fields, attribute codes and name sets
- Replace AMI type 221 (
ami-221) with Intel firmware version information - Replace measurement unit strings with
dmi_unit_tenumeration - Replace error message table with
dmi_error_namesname set - Remove decoding-only unions and unused compatibility macros
- Move internal definitions from
<opendmi/defs.h>to a private header - Split structure type sources into specification, value names, handlers and lint rules
- Link attribute references before calling link handlers
- Report all broken references and malformed structures instead of stopping at the first one
- Treat broken references as link failures, fatal only in strict mode
- Stop decoding on memory exhaustion in relaxed mode
- Add structure handle and expected length to minimum length errors
- Increase error queue depth from 32 to 64 entries
- Keep additional information values, boot status data, management controller data as
dmi_binary_t - Keep raw portable battery manufacture date and design capacity
- Report oversized memory modules with
memory-controller.module-sizelint rule - Take DMI context instead of logging handler in logging macros
- Enable platform extension modules in the tool by default
- Match
--moduleand--all-modulesfilters regardless of module state - Lowercase command line argument names
- Unify capitalization of attribute names
- Show end of mapped address ranges as the last byte
- Rename slot type 0x0B to "Proprietary memory card slot"
- Show arrays nested in structures in all output formats
- Write numbers and booleans in JSON output as JSON numbers and booleans
- Serialize measurement units by their codes in XML output
- Move XML namespace and schema identifiers to
https://opendmi.org/schemas/ - Add
xsi:schemaLocationattribute and UTC time to XML documents - Require ICU4C internationalization component
Fixed
- Fix structure names of signature-matched types in
lintcommand reports - Fix
lint --list-rulesrequiring SMBIOS data and ignoring--producer - Fix
explaincommand requiring SMBIOS data and rejecting type numbers - Fix
--prettyoption ofexportcommand having no effect - Fix broken escape sequence in
lintcommand output - Fix garbled text and code size in reference manual PDF
- Fix
dmi_reader_seek()rejecting the end of the range - Fix ICU4C initialization
- Fix indentation of nested structures and flags in text output
- Remove trailing spaces in text output
- Fix portable battery manufacture date dropped on malformed date string
- Fix name of string property value attribute
- Fix false errors on memory device references to handle 0x0000
- Fix crash on memory controller referring to undecoded memory module
- Fix structure version of structures shorter than minimum length
- Fix handling of additional information entries shorter than their header
- Fix decoding of additional information values longer than 32 bytes
- Fix mapped address range sizes one kilobyte or byte short
- Fix unknown values taken for unspecified in physical memory arrays and firmware inventories
- Fix unknown memory error addresses and resolutions shown as values
- Fix memory controller maximum memory size o...
v0.4.1
Added
- Add
DMI_SIZE_MAXconstant for unknowndmi_size_tvalues - Add structure type attribute to chassis contained elements
- Add decoding of processor voltage and supported voltages
- Add
dmi_checksum_calc()function - Add shared library versioning (SOVERSION)
- Add CMake package configuration and
pkg-configfile forlibopendmi
Changed
- Rename
dmi_checksum()function todmi_checksum_test() - Rename
entry_sizefield of context state toentry_data_size - Export only public API symbols from shared library
Fixed
- Represent reserved minimum and maximum counts of chassis elements as unknown values
- Show unknown firmware image size in firmware inventory information as unknown
- Fix handle attribute code of group associations items
- Keep table area size specified in the entry point instead of overwriting it with the size of data provided by backend
- Fix compatibility with dmidecode dump files
- Fix entry point version, revision and length decoding
- Fix installation of
libopendmiheaders and manual pages - Fix missing
opendmimanual pages - Fix conflicting names of static and DLL import libraries with MSVC
- Fix compatibility of public headers with C11 and C17
- Do not install CMocka along with OpenDMI
v0.4.0
Added
- Add Intel RSD FPGA information decoder #88
- Add tests for module handling functions
- Add tests for context handling functions
- Add tests for entry point handling functions
- Add tests for registry handling functions
- Add tests for stream handling functions
- Add tests for entity handling functions
- Add tests for management controller information decoder
- Add tests for IPMI device information decoder
- Add tests for firmware inventory information decoder
- Add tests for Intel RSD FPGA information decoder
- Add entity type conflicts check to
dmi_add_extension() - Add
dmi_has_extension()function - Add tests for command line options parser
- Add tests for command line commands, including check for duplicate option names
- Add support for filtering entities by module
- Add
-M/--all-modulesoption totypescommand and entity filter - Add test coverage support for CLI
- Add CI workflows for FreeBSD and NetBSD
- Add tests for output formats
- Add tests for processor information decoder
- Add tests for firmware information decoder
- Add check for duplicate attribute codes to module tests
- Add
dmi_processor_status_name()function - Add
dmi_attribute_get_count()function - Add UTF-8 validation to JSON output
- Add
DMI_ERROR_INVALID_DUMPerror code - Add tests for file utilities
- Add tests for loading of corrupted dumps
- Add tests for output format iterators
- Add module tests for static library
- Add
dmi_module_next()function for iteration over built-in and registered modules - Add
dmi_stream_has()function - Add
dmi_entity_stop()anddmi_entity_incomplete()functions for decoders of extended structures - Add
DMI_ENTITY_STATE_INCOMPLETEentity state for structures, which end in the middle of a set of fields - Add
DMI_ENTITY_STATE_PARTIALentity state for structures of older specification versions - Add compile-time size checks for value unions
- Add tests for portable battery information decoder
- Add
-V/--verboseoption toshowcommand to show structure versions and states, overriding-q/--quietand vice versa - Add structure states to XML, JSON and YAML output
- Add
dmi_entity_state_namesname set - Use
lessas default pager on POSIX systems ifPAGERenvironment variable is not set - Use pager for
show,list,explain,entryandmodulescommands
Changed
- Replace
--log=<file>option with--log-file=<file>,-l/--logoption now takes no argument - Rename short form of
--dumpoption inshowandexportcommands from-uto-D - Rename
-a/--alloption oflintcommand to-A/--all-checks - Make argument of
-m/--moduleoption mandatory intypescommand and entity filter - Accept option arguments starting with dash, as
getopt()does - Reject unexpected arguments of commands
- Migrate management controller information decoder to stream API
- Fetch CMocka from release tarball instead of Git repository
- Copy library DLL next to CLI executable on Windows
- Split CI workflow for Linux and macOS into separate workflows
- Change type of string index argument of
dmi_entity_string_ex()tosize_t - Replace nested
statusstructure indmi_processor_twithis_populatedandstatusfields - Write YAML strings, dates, versions and enumeration values as quoted scalars without tags
- Report files, which are not SMBIOS dumps, with a descriptive error message
- Share iteration over arrays, flags and strings between output formats
- Replace
dmi_moduleslist with staticdmi_builtin_modulesarray, built-in modules are no longer registered by constructors - Make
dmi_module_register()returnbooland reject modules with duplicate codes - Write flags of value sets in XML output as
flagelements withnameattribute - Migrate cache, firmware, portable battery, system boot, system event log, chassis, baseboard, processor and memory device information decoders to stream API
- Decode only completely present fields of incomplete sets of fields, and mark such structures as incomplete
- Use common handling of structures extended in newer specification versions in all decoders
- Use the type of raw value for all bit fields of value unions
- Pass output options (mode, raw data dump and pretty output) to output format handlers and entity printing functions
- Remove raw SMBIOS data structures of decoders migrated to stream API
- Use
nullptrinstead ofNULLin documentation
Fixed
- Fix SMBIOS 3.x revision number decoding
- Fix SMBIOS 2.1 maximum entity size decoding
- Fix headers fileset in
libopendmi - Fix
dmi_registry_iter_init()return value - Fix signed numbers handling in
dmi_attribute_format_decimal() - Fix potential use-after-free in
dmi_close() - Fix handling of CR/LF in dump files on Windows
- Fix entity length check in
dmi_entity_create() - Fix memory leak in
dmi_entity_decode_strings() - Fix
dmi_registry_get()behavior on invalid handles - Fix error queue overflow handling in
dmi_error_slot_get() - Fix legacy entry point SMBIOS version decoding
- Fix buffer overrun errors in chassis information decoder
- Fix buffer overrun errors in baseboard information decoder
- Fix cache installed size decoding
- Fix memory device extended size and rank decoding
- Fix memory array extended capacity decoding
- Fix temperature probe accuracy decoding
- Fix voltage probe min/max/nominal values, tolerance, resolution and accuracy decoding
- Fix current probe min/max/nominal values, tolerance, resolution and accuracy decoding
- Fix IPMI device address type decoding
- Fix firmware inventory ID format decoding
- Fix Intel RSD processor CPUID entity specification
- Fix format-truncation warning on GCC 16 #112
- Fix UUID decoding test on big-endian architectures
- Fix command line arguments counting in
dmi_option_parse() - Fix handling of optional arguments with short options
- Fix
dmi_option_find_long()behavior on long-only options - Fix segmentation fault on
-m/-Scommand line options - Fix conflict of
-uoption with entity filter inshowandexportcommands - Fix conflict of
-a/--alloptions with entity filter inlintcommand - Fix unterminated long option names in
lintcommand - Fix missing error message on unknown type in
-t/--typeoption - Fix log file opening error handling
- Fix exit codes of command line tool on output errors
- Fix incomplete writes handling in
dmi_dump_save()andexportcommand - Fix redundant zero-length calls in
dmi_file_read()anddmi_file_write() - Fix crash of
entrycommand on missing entry point data - Fix raw output of
typesandmodulescommands when pager is used - Fix terminal state after interrupting pager with Ctrl-C
- Fix double handle close on pager start errors on Windows
- Fix termination on unknown terminal type
- Fix out-of-bounds read on empty SMBIOS table area
- Fix stack overflow on long date strings in
dmi_date_parse() - Fix address type and logging target in FreeBSD and NetBSD backends
- Fix session memory leaks in JSON, YAML and XML output formats
- Fix whole SMBIOS table rejection on a single malformed structure in non-strict mode
- Fix hang and crashes in output formats on structures with more than 255 strings
- Fix unclosed tags in XML output on string output errors
- Fix missing socket status and version in processor information
- Fix duplicate
error-correctionattribute code in memory controller information - Fix terminal color detection, which never enabled colored log messages and disabled colored output
- Fix reading of array counters narrower than
size_tin output formats - Fix false flags in output of sets with 32 or more bits
- Fix invalid UTF-8 in JSON output, invalid bytes are now replaced with U+FFFD #94
- Fix missing firmware features in SMBIOS 2.0 firmware information
- Fix missing extended firmware features in SMBIOS 2.1 to 2.3 firmware information
- Fix invalid UTF-8 and control characters in XML output #94
- Fix YAML values being read as numbers, booleans or dates (e.g. serial number
00000000or version2.10) - Fix reading of empty files on platforms, where zero-sized allocation fails
- Fix whole SMBIOS table rejection on a structure with invalid length in non-strict mode
- Fix structure count of truncated SMBIOS tables
- Fix missing extension modules when linking with static library
- Fix invalid element names in XML output for flags with codes starting with a digit (e.g.
5v) - Fix name of Intel RSD cabled PCIe port information structure
- Fix wrong bit field layout of value unions with MinGW, which made all flags reported as set on Windows
- Fix minimum length of portable battery information
- Fix level of firmware information with two characteristics extension bytes
- Fix cache handles of SMBIOS 2.0 processor information
- Fix bogus rack type and height in chassis information with incomplete SMBIOS 3.9 fields
- Fix
dmi_stream_skip()not updating remaining size - Fix unchecked decoding results of system information and Dell revisions structures
- Fix decoding failures of structures with incomplete optional fields, completely present fields are decoded now
- Fix ignored
-q/--quietoption ofshowcommand, meta-data and handle references are now hidden - Fix raw color escape sequences shown by
lesspager,LESSenvironment variable now defaults toFRX - Fix missing colors in pager output of
showcommand
v0.3.2
Added
- Add
dmi_stream_skip()anddmi_stream_remaining()functions - Add memory module size checks on controller linking
Changed
- Enable linking on show command
- Relaxed linking of memory controllers information
- Normalize firmware language information structure layout
- Migrate firware language information decoder to stream API
- Migrate memory channel information decoder to stream API
- Migrate memory controller information decoder to stream API
- Migrate memory module information decoder to stream API
- Migrate onboard devices information decoder to stream API
- Migrate string property decoder to stream API
Fixed
- Fix build & and CI on Windows #110
- Fix memory module installed/enabled size decoding
- Fix memory module bank count decoding
v0.3.1
Added
- Add additional information structure decoding #76
- Add firmware inventory components linking #70
- Add
--dumpoption toshowandexportcommands - Add regression test script #93
Changed
- Migrate firmware inventory information decoder to stream API
- Refactor logging engine
Fixed
- Fix firmware inventory version decoding
- Fix issues found by PVS-Studio
- Fix linking of ICU4C artifacts #79
v0.3.0
Added
- Add Windows backend #99
- Add NetBSD backend #97
- Add pager support on Windows
- Add
explaincommand implementation - Add Intel RSD Network card information decoder #81
- Add Intel RSD PCIe information decoder #82
- Add Intel RSD Storage device information decoder #84
- Add Intel RSD TPM information decoder #85
- Add Intel RSD TXT information decoder #86
- Add Intel RSD Memory device information decoder #87
- Add Intel RSD Cabled PCIe port information decoder #89
- Add registry status flags support
- Add
dmi_pci_class_t,dmi_pci_slot_t,dmi_pci_vendor_id_t,dmi_pci_device_id_ttypes for PCI identifiers - Add
--compileroption tobuild.sh - Add new manual pages:
dmi_base64_decode(),dmi_base64_encode()dmi_entity_create(),dmi_entity_destroy()dmi_entity_decode(),dmi_entity_link()dmi_entity_data(),dmi_entity_info()dmi_entity_handle(),dmi_entity_type(),dmi_entity_name()dmi_entity_string(),dmi_entity_string_ex()dmi_error_message()dmi_error_get_first(),dmi_error_get_last()dmi_error_peek_first(),dmi_error_peek_last()dmi_error_raise(),dmi_error_raise_ex()dmi_error_clear()dmi_file_lock(),dmi_file_unlock()dmi_file_seek(),dmi_file_tell(),dmi_file_stat()dmi_file_read(),dmi_file_write()dmi_file_close()dmi_stream_initialize()dmi_stream_decode(),dmi_stream_decode_at()dmi_stream_decode_bcd(),dmi_stream_decode_bcd_at()dmi_stream_decode_str(),dmi_stream_decode_str_at()dmi_stream_decode_uuid(),dmi_stream_decode_uuid_at()dmi_stream_is_done()dmi_stream_read(),dmi_stream_read_at()dmi_stream_read_data(),dmi_stream_read_data_at()dmi_stream_seek()dmi_stream_reset()dmi_uuid_decode(),dmi_uuid_encode()dmi_version_format(),dmi_version_format_ex()
- Compress manual pages after creation
Changed
- Disable
--no-sysfsoption on non-Linux systems - Disable
--pathoption on Windows systems
Fixed
v0.2.3
Added
- Add memory channel device linking #73
- Add colorization of boolean values
- Add YAML schema validation on regression tests
Changed
- Migrate out-of-band remote access decoder to stream API
- Migrate system configuration options decoder to stream API
- Migrate system reset information decoder to stream API
- Migrate system information decoder to stream API
- Migrate temperature/voltage/current probe decoders to stream API
- Migrate TPM device characteristics decoder to stream API
Fixed
- Fix binary strings output in YAML export
- Fix unknown entity level output in YAML export
- Fix address attributes display format #66
- Fix
entrycommand exit code - Fix table area address display format