]> git.ipfire.org Git - thirdparty/lldpd.git/blob - src/daemon/dmi.c
Separate daemon and client code. Provide a client library.
[thirdparty/lldpd.git] / src / daemon / dmi.c
1 /* -*- mode: c; c-file-style: "openbsd" -*- */
2 /*
3 * Copyright (c) 2009 Vincent Bernat <bernat@luffy.cx>
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
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
18 #define INCLUDE_LINUX_IF_H
19 #include "lldpd.h"
20 #include <unistd.h>
21
22 #ifdef ENABLE_LLDPMED
23 /* Fill in inventory stuff:
24 - hardware version: /sys/class/dmi/id/product_version
25 - firmware version: /sys/class/dmi/id/bios_version
26 - software version: `uname -r`
27 - serial number: /sys/class/dmi/id/product_serial
28 - manufacturer: /sys/class/dmi/id/sys_vendor
29 - model: /sys/class/dmi/id/product_name
30 - asset: /sys/class/dmi/id/chassis_asset_tag
31 */
32
33 #if __i386__ || __amd64__
34 char*
35 dmi_get(char *file)
36 {
37 int dmi, s;
38 char buffer[100];
39
40 if ((dmi = priv_open(file)) < 0) {
41 LLOG_DEBUG("cannot get DMI file %s", file);
42 return NULL;
43 }
44 memset(buffer, 0, sizeof(buffer));
45 if ((s = read(dmi, buffer, sizeof(buffer))) == -1) {
46 LLOG_DEBUG("cannot read DMI file %s", file);
47 close(dmi);
48 return NULL;
49 }
50 close(dmi);
51 buffer[sizeof(buffer) - 1] = '\0';
52 if ((s > 0) && (buffer[s-1] == '\n'))
53 buffer[s-1] = '\0';
54 if (strlen(buffer))
55 return strdup(buffer);
56 return NULL;
57 }
58
59 char*
60 dmi_hw()
61 {
62 return dmi_get(SYSFS_CLASS_DMI "product_version");
63 }
64
65 char*
66 dmi_fw()
67 {
68 return dmi_get(SYSFS_CLASS_DMI "bios_version");
69 }
70
71 char*
72 dmi_sn()
73 {
74 return dmi_get(SYSFS_CLASS_DMI "product_serial");
75 }
76
77 char*
78 dmi_manuf()
79 {
80 return dmi_get(SYSFS_CLASS_DMI "sys_vendor");
81 }
82
83 char*
84 dmi_model()
85 {
86 return dmi_get(SYSFS_CLASS_DMI "product_name");
87 }
88
89 char*
90 dmi_asset()
91 {
92 return dmi_get(SYSFS_CLASS_DMI "chassis_asset_tag");
93 }
94 #endif
95 #endif