hostnamed: prefer more precise DMI info over ACPI OSPM info
(also: add comments about the used numbers) Fixes: #3930
This commit is contained in:
parent
f07529fe7d
commit
219bfe3872
|
@ -148,29 +148,70 @@ static bool valid_deployment(const char *deployment) {
|
|||
}
|
||||
|
||||
static const char* fallback_chassis(void) {
|
||||
int r;
|
||||
char *type;
|
||||
unsigned t;
|
||||
int v;
|
||||
int v, r;
|
||||
|
||||
v = detect_virtualization();
|
||||
|
||||
if (VIRTUALIZATION_IS_VM(v))
|
||||
return "vm";
|
||||
if (VIRTUALIZATION_IS_CONTAINER(v))
|
||||
return "container";
|
||||
|
||||
r = read_one_line_file("/sys/firmware/acpi/pm_profile", &type);
|
||||
r = read_one_line_file("/sys/class/dmi/id/chassis_type", &type);
|
||||
if (r < 0)
|
||||
goto try_dmi;
|
||||
goto try_acpi;
|
||||
|
||||
r = safe_atou(type, &t);
|
||||
free(type);
|
||||
if (r < 0)
|
||||
goto try_dmi;
|
||||
goto try_acpi;
|
||||
|
||||
/* We only list the really obvious cases here as the ACPI data
|
||||
* is not really super reliable.
|
||||
/* We only list the really obvious cases here. The DMI data is unreliable enough, so let's not do any
|
||||
additional guesswork on top of that.
|
||||
|
||||
See the SMBIOS Specification 3.0 section 7.4.1 for details about the values listed here:
|
||||
|
||||
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf
|
||||
*/
|
||||
|
||||
switch (t) {
|
||||
|
||||
case 0x3: /* Desktop */
|
||||
case 0x4: /* Low Profile Desktop */
|
||||
case 0x6: /* Mini Tower */
|
||||
case 0x7: /* Tower */
|
||||
return "desktop";
|
||||
|
||||
case 0x8: /* Portable */
|
||||
case 0x9: /* Laptop */
|
||||
case 0xA: /* Notebook */
|
||||
case 0xE: /* Sub Notebook */
|
||||
return "laptop";
|
||||
|
||||
case 0xB: /* Hand Held */
|
||||
return "handset";
|
||||
|
||||
case 0x11: /* Main Server Chassis */
|
||||
case 0x1C: /* Blade */
|
||||
case 0x1D: /* Blade Enclosure */
|
||||
return "server";
|
||||
|
||||
case 0x1E: /* Tablet */
|
||||
return "tablet";
|
||||
}
|
||||
|
||||
try_acpi:
|
||||
r = read_one_line_file("/sys/firmware/acpi/pm_profile", &type);
|
||||
if (r < 0)
|
||||
return NULL;
|
||||
|
||||
r = safe_atou(type, &t);
|
||||
free(type);
|
||||
if (r < 0)
|
||||
return NULL;
|
||||
|
||||
/* We only list the really obvious cases here as the ACPI data is not really super reliable.
|
||||
*
|
||||
* See the ACPI 5.0 Spec Section 5.2.9.1 for details:
|
||||
*
|
||||
|
@ -179,66 +220,20 @@ static const char* fallback_chassis(void) {
|
|||
|
||||
switch(t) {
|
||||
|
||||
case 1:
|
||||
case 3:
|
||||
case 6:
|
||||
case 1: /* Desktop */
|
||||
case 3: /* Workstation */
|
||||
case 6: /* Appliance PC */
|
||||
return "desktop";
|
||||
|
||||
case 2:
|
||||
case 2: /* Mobile */
|
||||
return "laptop";
|
||||
|
||||
case 4:
|
||||
case 5:
|
||||
case 7:
|
||||
case 4: /* Enterprise Server */
|
||||
case 5: /* SOHO Server */
|
||||
case 7: /* Performance Server */
|
||||
return "server";
|
||||
|
||||
case 8:
|
||||
return "tablet";
|
||||
}
|
||||
|
||||
try_dmi:
|
||||
r = read_one_line_file("/sys/class/dmi/id/chassis_type", &type);
|
||||
if (r < 0)
|
||||
return NULL;
|
||||
|
||||
r = safe_atou(type, &t);
|
||||
free(type);
|
||||
if (r < 0)
|
||||
return NULL;
|
||||
|
||||
/* We only list the really obvious cases here. The DMI data is
|
||||
unreliable enough, so let's not do any additional guesswork
|
||||
on top of that.
|
||||
|
||||
See the SMBIOS Specification 3.0 section 7.4.1 for
|
||||
details about the values listed here:
|
||||
|
||||
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf
|
||||
*/
|
||||
|
||||
switch (t) {
|
||||
|
||||
case 0x3:
|
||||
case 0x4:
|
||||
case 0x6:
|
||||
case 0x7:
|
||||
return "desktop";
|
||||
|
||||
case 0x8:
|
||||
case 0x9:
|
||||
case 0xA:
|
||||
case 0xE:
|
||||
return "laptop";
|
||||
|
||||
case 0xB:
|
||||
return "handset";
|
||||
|
||||
case 0x11:
|
||||
case 0x1C:
|
||||
case 0x1D:
|
||||
return "server";
|
||||
|
||||
case 0x1E:
|
||||
case 8: /* Tablet */
|
||||
return "tablet";
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue