Anuket Project
Capabilities plugin HLD
Requirement
1.0 | Retrieval of SMBIOS data including: vendor, version, release date and BIOS revision | |
2.0 | Store data in plugin using static variable | |
3.0 | Plugin serves a simple server using libmicrohttpd on configurable port | |
4.0 | Return stored data on HTTP get request in json format | |
5.0 | Collection Interval should be configurable |
Overview
Retrieval of BIOS information is part of Platform Awareness of Service Assurance. The goal of this equivalence feature is to expose the BIOS feature/information to higher level management applications.
The System Management BIOS (SMBIOS) specification defines data structures/tables that can be used to read information stored in the BIOS.
The data is structures are categorized into types (DMI types), for example:
- BIOS information: 0
- System information: 1
- Cache information: 7
An example of the BIOS structure and initial information identified is shown below as an output using dmidecode:
Handle 0x0000, DMI type 0, 24 bytesBIOS InformationVendor: American Megatrends Inc.Version: F12Release Date: 01/29/2015Address: 0xF0000Runtime Size: 64 kBROM Size: 16384 kBCharacteristics:PCI is supportedBIOS is upgradeableBIOS shadowing is allowedBoot from CD is supportedSelectable boot is supportedBIOS ROM is socketedEDD is supported5.25"/1.2 MB floppy services are supported (int 13h)3.5"/720 kB floppy services are supported (int 13h)3.5"/2.88 MB floppy services are supported (int 13h)Print screen service is supported (int 5h)8042 keyboard services are supported (int 9h)Serial services are supported (int 14h)Printer services are supported (int 17h)ACPI is supportedUSB legacy is supportedBIOS boot specification is supportedTargeted content distribution is supportedUEFI is supportedBIOS Revision: 5.6
Click here for example of full SMBIOS decode output.
Types read by plugin
The plugin get information from pre-selected number of DMI types:
- BIOS - 0
- System - 1
- Baseboard - 2
- Processor - 4
- Cache - 7
- Physical Memory Array - 16
- Memory Device - 17
- IPMI Device - 38
- Onboard Devices Extended Information - 41
Design
Introduction
BIOS information and other SMBIOS structures are stored in DMI (Desktop Management Interface) table. Unfortunately, table’s content is not stored in human-readable format, thus it has to be decoded. Implementing a dedicated DMI decoder can be quite difficult and time-consuming, therefore it was decided to leverage one of existing tools. Since SMBIOS information cannot change without a reboot it is possible to read it just once and store it in plugin as static data. The purpose of Capabilities feature is to provide easy-to-use utility functions leveraging existing DMI decoder and extend collectd global variables with BIOS information. At first, the only DMI decoder will be dmidecode. The purpose of Capabilities feature is to provide static platform data to end-user leveraging existing DMI decoder. At first, the only source of data will be dmidecode.
Dmidecode utility
dmidecode is a standard Linux tool used for dumping a computer's DMI (SMBIOS) table contents in a human-readable format. It provides a description of a systems hardware components, as well as other useful pieces of information such as serial numbers and BIOS revision. Thanks to this table, you can retrieve information without having to probe for the actual hardware. While this is a good point in terms of report speed and safeness, this also makes the presented information possibly unreliable. dmidecode does not provide a library, thus the implementation will have to use popen system call. The command to read given type of DMI information has a syntax: 'dmidecode -t <type_num>'.
Libmicrohttpd
It is a small c library that make it possible to embed an HTTP server as part of another application. GNU Libmicrohttpd is free software and part of the GNU project. Capabilities plugin leverages the library to expose collected data through micro embedded webserver. The header content type is set to "application/json".
Plugin
The design of choice for plugin is hybrid solution using libmicrohttpd. Hybrid means that it both collects data and expose it to external users through simple httpd server. Plugin reads available static data at init phase and stores it in internal static structure. Plugin serves a simple server using libmicrohttpd on configurable port, it returns data in json format on every get request. Due to static nature of the data collected, there are no metrics or events to be sent from plugin.
Output formatting
The data is to be formatted using json for easier processing on client side. An example of returned data is shown below.
# curl 127.0.0.1:9104
{"BIOS":[{"BIOS Information":{"Vendor":"Intel Corporation","Version":"SE5C620.86B.00.01.0013.030920180427","Release Date":"03/09/2018","Address":"0xF0000","Runtime Size":"64 kB","ROM Size":"4096kB","Characteristics":["PCI is supported","PNP is supported","BIOS is upgradeable","BIOS shadowing is allowed","Boot from CD is supported","Selectable boot is supported","EDD is supported","5.25\"/1.2 MB floppy services are supported (int 13h)","3.5\"/720 kB floppy services are supported (int 13h)","3.5\"/2.88 MB floppy services are supported (int 13h)","Print screen service is supported (int 5h)","8042 keyboard services are supported (int 9h)","Serial services are supported (int 14h)","Printer services are supported (int 17h)","CGA/mono video services are supported (int 10h)","ACPI is supported","USB legacy is supported","LS-120 boot is supported","ATAPI Zip drive boot is supported","BIOS boot specification is supported","Function key-initiated network boot is supported","Targeted content distribution is supported","UEFI is supported"],"BIOS Revision":"0.0","Firmware Revision":"0.0"}}]}
Considerations
Configuration Considerations
<Plugin capabilities>
Host “localhost”
Port “9104”
</Plugin>
Configuration options include:
Host <hostname>
Optional. Bind to the given hostname. By default, the plugin will bind to the "any" address, i.e. accept packets sent to any of the hosts addresses. This option is supported only for libmicrohttpd newer than 0.9.0.
Port <port number>
Optional. Port the embedded webserver should listen on. If not provided, the default port number will be used (9104).
Deployment Considerations
API/GUI/CLI Considerations
Equivalence Considerations
Security Considerations
Alarms, events, statistics considerations
Redundancy Considerations
Performance Considerations
Not part of Telemetry so performance is Not Applicable.
Testing Consideration
Other Considerations
Impact
The following table outlines possible impact(s) the deployment of this deliverable may have on the current system.
Ref | System Impact Description | Recommendation / Comments |
1 | The plugin creates http micro server that listens on configured port. |
Key Assumptions
The following assumptions apply to the scope specified in this document.
Ref | Assumption | Status |
1 |
Key Exclusions
The following exclusions apply to the scope discussed in this document.
Ref | Exclusion | Status |
1 |
Key Dependencies
The following table outlines the key dependencies associated with this deliverable.
Ref | Dependency | Status |
1 | dmidecode | |
2 | libmicrohttpd | |
3 | jansson library |
Issues List
None.