]> git.ipfire.org Git - thirdparty/lldpd.git/blob - src/dmi.c
14aa895bdb29cd0e476fa1648a64039fe81ce8fa
[thirdparty/lldpd.git] / src / dmi.c
1 /*
2 * Copyright (c) 2009 Vincent Bernat <bernat@luffy.cx>
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #define INCLUDE_LINUX_IF_H
18 #include "lldpd.h"
19 #include <unistd.h>
20
21 #ifdef ENABLE_LLDPMED
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 */
31
32 #if __i386__ || __amd64__
33 char*
34 dmi_get(char *file)
35 {
36 int dmi, s;
37 char buffer[100];
38
39 if ((dmi = priv_open(file)) < 0) {
40 LLOG_DEBUG("cannot get DMI file %s", file);
41 return NULL;
42 }
43 memset(buffer, 0, sizeof(buffer));
44 if ((s = read(dmi, buffer, sizeof(buffer))) == -1) {
45 LLOG_DEBUG("cannot read DMI file %s", file);
46 close(dmi);
47 return NULL;
48 }
49 close(dmi);
50 buffer[sizeof(buffer) - 1] = '\0';
51 if ((s > 0) && (buffer[s-1] == '\n'))
52 buffer[s-1] = '\0';
53 if (strlen(buffer))
54 return strdup(buffer);
55 return NULL;
56 }
57
58 char*
59 dmi_hw()
60 {
61 return dmi_get(SYSFS_CLASS_DMI "product_version");
62 }
63
64 char*
65 dmi_fw()
66 {
67 return dmi_get(SYSFS_CLASS_DMI "bios_version");
68 }
69
70 char*
71 dmi_sn()
72 {
73 return dmi_get(SYSFS_CLASS_DMI "product_serial");
74 }
75
76 char*
77 dmi_manuf()
78 {
79 return dmi_get(SYSFS_CLASS_DMI "sys_vendor");
80 }
81
82 char*
83 dmi_model()
84 {
85 return dmi_get(SYSFS_CLASS_DMI "product_name");
86 }
87
88 char*
89 dmi_asset()
90 {
91 return dmi_get(SYSFS_CLASS_DMI "chassis_asset_tag");
92 }
93 #endif
94 #endif