master
c 73 lines 2.17 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "../libnetdata.h"
4
5 #if defined(OS_FREEBSD)
6
7 int getsysctl_by_name(const char *name, void *ptr, size_t len) {
8 size_t nlen = len;
9
10 if (unlikely(sysctlbyname(name, ptr, &nlen, NULL, 0) == -1)) {
11 netdata_log_error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
12 return 1;
13 }
14 if (unlikely(nlen != len)) {
15 netdata_log_error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)len, (unsigned long)nlen);
16 return 1;
17 }
18 return 0;
19 }
20
21 int getsysctl_simple(const char *name, int *mib, size_t miblen, void *ptr, size_t len) {
22 size_t nlen = len;
23
24 if (unlikely(!mib[0]))
25 if (unlikely(getsysctl_mib(name, mib, miblen)))
26 return 1;
27
28 if (unlikely(sysctl(mib, miblen, ptr, &nlen, NULL, 0) == -1)) {
29 netdata_log_error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
30 return 1;
31 }
32 if (unlikely(nlen != len)) {
33 netdata_log_error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)len, (unsigned long)nlen);
34 return 1;
35 }
36
37 return 0;
38 }
39
40 int getsysctl(const char *name, int *mib, size_t miblen, void *ptr, size_t *len) {
41 size_t nlen = *len;
42
43 if (unlikely(!mib[0]))
44 if (unlikely(getsysctl_mib(name, mib, miblen)))
45 return 1;
46
47 if (unlikely(sysctl(mib, miblen, ptr, len, NULL, 0) == -1)) {
48 netdata_log_error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
49 return 1;
50 }
51 if (unlikely(ptr != NULL && nlen != *len)) {
52 netdata_log_error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)*len, (unsigned long)nlen);
53 return 1;
54 }
55
56 return 0;
57 }
58
59 int getsysctl_mib(const char *name, int *mib, size_t len) {
60 size_t nlen = len;
61
62 if (unlikely(sysctlnametomib(name, mib, &nlen) == -1)) {
63 netdata_log_error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
64 return 1;
65 }
66 if (unlikely(nlen != len)) {
67 netdata_log_error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)len, (unsigned long)nlen);
68 return 1;
69 }
70 return 0;
71 }
72
73 #endif