]> git.ipfire.org Git - thirdparty/lldpd.git/blame - src/daemon/dmi-linux.c
build: run cross-platforms test on ubuntu-latest
[thirdparty/lldpd.git] / src / daemon / dmi-linux.c
CommitLineData
4b292b55 1/* -*- mode: c; c-file-style: "openbsd" -*- */
6e75df87
VB
2/*
3 * Copyright (c) 2009 Vincent Bernat <bernat@luffy.cx>
4 *
51434125 5 * Permission to use, copy, modify, and/or distribute this software for any
6e75df87
VB
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
6e75df87
VB
18#include "lldpd.h"
19#include <unistd.h>
20
21#ifdef ENABLE_LLDPMED
8b549648
VB
22/* Fill in inventory stuff:
23 - hardware version: /sys/class/dmi/id/product_version
24 - firmware version: /sys/class/dmi/id/bios_version
25 - software version: `uname -r`
26 - serial number: /sys/class/dmi/id/product_serial
27 - manufacturer: /sys/class/dmi/id/sys_vendor
28 - model: /sys/class/dmi/id/product_name
29 - asset: /sys/class/dmi/id/chassis_asset_tag
30*/
6e75df87 31
8b549648 32static char *
f540397c 33dmi_get(const char *file)
6e75df87
VB
34{
35 int dmi, s;
b0cb07f7 36 char buffer[100] = {};
6f8925be
VB
37
38 log_debug("localchassis", "DMI request for file %s", file);
6e75df87 39 if ((dmi = priv_open(file)) < 0) {
6f8925be 40 log_debug("localchassis", "cannot get DMI file %s", file);
6e75df87
VB
41 return NULL;
42 }
6e75df87 43 if ((s = read(dmi, buffer, sizeof(buffer))) == -1) {
6f8925be 44 log_debug("localchassis", "cannot read DMI file %s", file);
6e75df87
VB
45 close(dmi);
46 return NULL;
47 }
48 close(dmi);
49 buffer[sizeof(buffer) - 1] = '\0';
8b549648
VB
50 if ((s > 0) && (buffer[s - 1] == '\n')) buffer[s - 1] = '\0';
51 if (strlen(buffer)) return strdup(buffer);
6e75df87
VB
52 return NULL;
53}
54
8b549648 55char *
6e75df87
VB
56dmi_hw()
57{
58 return dmi_get(SYSFS_CLASS_DMI "product_version");
59}
60
8b549648 61char *
6e75df87
VB
62dmi_fw()
63{
64 return dmi_get(SYSFS_CLASS_DMI "bios_version");
65}
66
8b549648 67char *
6e75df87
VB
68dmi_sn()
69{
70 return dmi_get(SYSFS_CLASS_DMI "product_serial");
71}
72
8b549648 73char *
6e75df87
VB
74dmi_manuf()
75{
76 return dmi_get(SYSFS_CLASS_DMI "sys_vendor");
77}
78
8b549648 79char *
6e75df87
VB
80dmi_model()
81{
82 return dmi_get(SYSFS_CLASS_DMI "product_name");
83}
84
8b549648 85char *
6e75df87
VB
86dmi_asset()
87{
88 return dmi_get(SYSFS_CLASS_DMI "chassis_asset_tag");
89}
90#endif