smbios

package
v0.0.0-...-5fb8a3f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 30, 2024 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package smbios implements parsing of SMBIOS data structures. SMBIOS data is commonly populated by platform firmware to convey various metadata (including name, vendor, slots and serial numbers) about the platform to the operating system. The SMBIOS standard is maintained by DMTF and available at https://www.dmtf.org/sites/default/files/standards/documents/ DSP0134_3.6.0.pdf. The rest of this package just refers to it as "the standard".

Index

Constants

View Source
const UEFISpecificationSupported = 1 << 3

UEFISpecificationSupported is a bitmask for accessing the third bit, which displays the support of UEFI in the smbios structure. For more information check the SMBIOS documentation at Table 7.1.2.2 Bit 3.

Variables

This section is empty.

Functions

func UnmarshalStructureRaw

func UnmarshalStructureRaw(rawStruct Structure, target any) error

UnmarshalStructureRaw unmarshals a SMBIOS structure into a Go struct which has some constraints. The first two fields need to be a `uint16 handle` and a `StructureVersion Version` field. After that any number of fields may follow as long as they are either of type `string` (which will be looked up in the string table) or readable by binary.Read. To determine the structure version, the smbios_min_vers struct tag needs to be put on the first field of a newer structure version. The version implicitly starts with 2.0. The version determined is written to the second target struct field. Fields which do not have a fixed size need to be typed as a slice and tagged with smbios_repeat set to the name of the field containing the count. The count field itself needs to be some width of uint.

Types

type BIOSInformationRaw

type BIOSInformationRaw struct {
	Handle                                 uint16
	StructureVersion                       Version
	Vendor                                 string
	BIOSVersion                            string
	BIOSStartingAddressSegment             uint16
	BIOSReleaseDate                        string
	BIOSROMSize                            uint8
	BIOSCharacteristics                    uint64
	BIOSCharacteristicsExtensionByte1      uint8 `smbios_min_ver:"2.1"`
	BIOSCharacteristicsExtensionByte2      uint8 `smbios_min_ver:"2.2"`
	SystemBIOSMajorRelease                 uint8 `smbios_min_ver:"2.4"`
	SystemBIOSMinorRelease                 uint8
	EmbeddedControllerFirmwareMajorRelease uint8
	EmbeddedControllerFirmwareMinorRelease uint8
	ExtendedBIOSROMSize                    uint16 `smbios_min_ver:"3.1"`
}

BIOSInformationRaw contains decoded data from the BIOS Information structure (SMBIOS Type 0). See Table 6 in the specification for detailed documentation about the individual fields. Note that structure versions 2.1 and 2.2 are "invented" here as both characteristics extensions bytes were optional between 2.0 and 2.4.

func (*BIOSInformationRaw) ROMSizeBytes

func (rb *BIOSInformationRaw) ROMSizeBytes() uint64

ROMSizeBytes returns the ROM size in bytes

func (*BIOSInformationRaw) ReleaseDate

func (rb *BIOSInformationRaw) ReleaseDate() (time.Time, error)

ReleaseDate returns the release date of the BIOS as a time.Time value.

type BaseboardInformationRaw

type BaseboardInformationRaw struct {
	Handle                         uint16
	StructureVersion               Version
	Manufacturer                   string
	Product                        string
	Version                        string
	SerialNumber                   string
	AssetTag                       string `smbios_min_ver:"2.1"`
	FeatureFlags                   uint8
	LocationInChassis              string
	ChassisHandle                  uint16
	BoardType                      uint8
	NumberOfContainedObjectHandles uint8
	ContainedObjectHandles         []uint16 `smbios_repeat:"NumberOfContainedObjectHandles"`
}

BaseboardInformationRaw contains decoded data from the BIOS Information structure (SMBIOS Type 3). See Table 13 in the specification for detailed documentation about the individual fields.

type MemoryDeviceRaw

type MemoryDeviceRaw struct {
	Handle                                  uint16
	StructureVersion                        Version
	PhysicalMemoryArrayHandle               uint16 `smbios_min_ver:"2.1"`
	MemoryErrorInformationHandle            uint16
	TotalWidth                              uint16
	DataWidth                               uint16
	Size                                    uint16
	FormFactor                              uint8
	DeviceSet                               uint8
	DeviceLocator                           string
	BankLocator                             string
	MemoryType                              uint8
	TypeDetail                              uint16
	Speed                                   uint16 `smbios_min_ver:"2.3"`
	Manufacturer                            string
	SerialNumber                            string
	AssetTag                                string
	PartNumber                              string
	Attributes                              uint8  `smbios_min_ver:"2.6"`
	ExtendedSize                            uint32 `smbios_min_ver:"2.7"`
	ConfiguredMemorySpeed                   uint16
	MinimumVoltage                          uint16 `smbios_min_ver:"2.8"`
	MaximumVoltage                          uint16
	ConfiguredVoltage                       uint16
	MemoryTechnology                        uint8 `smbios_min_ver:"3.2"`
	MemoryOperatingModeCapability           uint16
	FirmwareVersion                         uint8
	ModuleManufacturerID                    uint16
	ModuleProductID                         uint16
	MemorySubsystemControllerManufacturerID uint16
	MemorySubsystemControllerProductID      uint16
	NonVolatileSize                         uint64
	VolatileSize                            uint64
	CacheSize                               uint64
	LogicalSize                             uint64
	ExtendedSpeed                           uint32 `smbios_min_ver:"3.3"`
	ExtendedConfiguredMemorySpeed           uint32
}

MemoryDeviceRaw contains decoded data from the BIOS Information structure (SMBIOS Type 17). See Table 76 in the specification for detailed documentation about the individual fields.

func (*MemoryDeviceRaw) SizeBytes

func (md *MemoryDeviceRaw) SizeBytes() (uint64, bool)

type Structure

type Structure struct {
	Type             uint8
	Handle           uint16
	FormattedSection []byte
	Strings          []string
}

type SystemInformationRaw

type SystemInformationRaw struct {
	Handle           uint16
	StructureVersion Version
	Manufacturer     string
	ProductName      string
	Version          string
	SerialNumber     string
	UUID             [16]byte `smbios_min_ver:"2.1"`
	WakeupType       uint8
	SKUNumber        string `smbios_min_ver:"2.4"`
	Family           string
}

SystemInformationRaw contains decoded data from the System Information structure (SMBIOS Type 1). See Table 10 in the specification for detailed documentation about the individual fields.

type SystemSlotPeerRaw

type SystemSlotPeerRaw struct {
	SegmentGroupNumber   uint16
	BusNumber            uint8
	DeviceFunctionNumber uint8
	DataBusWidth         uint8
}

type SystemSlotRaw

type SystemSlotRaw struct {
	Handle               uint16
	StructureVersion     Version
	SlotDesignation      string
	SlotType             uint8
	SlotDataBusWidth     uint8
	CurrentUsage         uint8
	SlotLength           uint8
	SlotID               uint16
	SlotCharacteristics1 uint8
	SlotCharacteristics2 uint8  `smbios_min_ver:"2.1"`
	SegmentGroupNumber   uint16 `smbios_min_ver:"2.6"`
	BusNumber            uint8
	DeviceFunctionNumber uint8
	DataBusWidth         uint8 `smbios_min_ver:"3.2"`
	PeerGroupingCount    uint8
	PeerGroups           []SystemSlotPeerRaw `smbios_repeat:"PeerGroupingCount"`
	SlotInformation      uint8               `smbios_min_ver:"3.4"`
	SlotPhysicalWidth    uint8
	SlotPitch            uint16
	SlotHeight           uint8 `smbios_min_ver:"3.5"`
}

SystemSlotRaw contains decoded data from the System Slot structure (SMBIOS Type 9). See Table 44 in the specification for detailed documentation about the individual fields.

type Table

type Table struct {
	BIOSInformationRaw       *BIOSInformationRaw
	SystemInformationRaw     *SystemInformationRaw
	BaseboardsInformationRaw []*BaseboardInformationRaw
	SystemSlotsRaw           []*SystemSlotRaw
	MemoryDevicesRaw         []*MemoryDeviceRaw

	Structures []Structure
}

Table represents a decoded SMBIOS table consisting of its structures. A few known structures are parsed if present, the rest is put into Structures unparsed.

func Unmarshal

func Unmarshal(table *bufio.Reader) (*Table, error)

type Version

type Version struct {
	Major uint8
	Minor uint8
}

Version contains a two-part version number consisting of a major and minor version. This is a common structure in SMBIOS.

func (*Version) AtLeast

func (v *Version) AtLeast(major, minor uint8) bool

AtLeast returns true if the version in v is at least the given version.

func (*Version) String

func (v *Version) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL