]> git.ipfire.org Git - thirdparty/lldpd.git/blob - src/daemon/dmi-freebsd.c
Be more defensive when parsing PRETTY_NAME out of os-release
[thirdparty/lldpd.git] / src / daemon / dmi-freebsd.c
1 /* -*- mode: c; c-file-style: "openbsd" -*- */
2 /*
3 * Copyright (c) 2012 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 #include "lldpd.h"
19 #include <unistd.h>
20 #include <kenv.h>
21
22 #ifdef ENABLE_LLDPMED
23 /* Fill in inventory stuff:
24 - hardware version: smbios.system.version
25 - firmware version: smbios.bios.version
26 - software version: `uname -r`
27 - serial number: smbios.system.serial
28 - manufacturer: smbios.system.maker
29 - model: smbios.system.product
30 - asset: smbios.chassis.tag
31 */
32
33 static char *
34 dmi_get(char *file)
35 {
36 char buffer[100] = {};
37
38 log_debug("localchassis", "DMI request for %s", file);
39 if (kenv(KENV_GET, file, buffer, sizeof(buffer) - 1) == -1) {
40 log_debug("localchassis", "cannot get %s", file);
41 return NULL;
42 }
43 if (strlen(buffer)) return strdup(buffer);
44 return NULL;
45 }
46
47 char *
48 dmi_hw()
49 {
50 return dmi_get("smbios.system.version");
51 }
52
53 char *
54 dmi_fw()
55 {
56 return dmi_get("smbios.bios.version");
57 }
58
59 char *
60 dmi_sn()
61 {
62 return dmi_get("smbios.system.serial");
63 }
64
65 char *
66 dmi_manuf()
67 {
68 return dmi_get("smbios.system.maker");
69 }
70
71 char *
72 dmi_model()
73 {
74 return dmi_get("smibios.system.product");
75 }
76
77 char *
78 dmi_asset()
79 {
80 return dmi_get("smibios.chassis.tag");
81 }
82 #endif