diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_ide_smart.c | 90 | ||||
-rw-r--r-- | plugins/check_ping.c | 4 | ||||
-rw-r--r-- | plugins/check_swap.c | 8 | ||||
-rw-r--r-- | plugins/check_swap.d/check_swap.h | 5 | ||||
-rw-r--r-- | plugins/check_swap.d/swap.c | 102 |
5 files changed, 110 insertions, 99 deletions
diff --git a/plugins/check_ide_smart.c b/plugins/check_ide_smart.c index 9640ef70..16fe3d01 100644 --- a/plugins/check_ide_smart.c +++ b/plugins/check_ide_smart.c | |||
@@ -56,7 +56,6 @@ void print_usage(void); | |||
56 | # include <sys/device.h> | 56 | # include <sys/device.h> |
57 | # include <sys/param.h> | 57 | # include <sys/param.h> |
58 | # include <sys/sysctl.h> | 58 | # include <sys/sysctl.h> |
59 | # include <sys/videoio.h> /* for __u8 and friends */ | ||
60 | # include <sys/scsiio.h> | 59 | # include <sys/scsiio.h> |
61 | # include <sys/ataio.h> | 60 | # include <sys/ataio.h> |
62 | # include <dev/ata/atareg.h> | 61 | # include <dev/ata/atareg.h> |
@@ -79,48 +78,47 @@ void print_usage(void); | |||
79 | #define UNKNOWN -1 | 78 | #define UNKNOWN -1 |
80 | 79 | ||
81 | typedef struct threshold_s { | 80 | typedef struct threshold_s { |
82 | __u8 id; | 81 | uint8_t id; |
83 | __u8 threshold; | 82 | uint8_t threshold; |
84 | __u8 reserved[10]; | 83 | uint8_t reserved[10]; |
85 | } __attribute__((packed)) threshold_t; | 84 | } __attribute__((packed)) threshold_t; |
86 | 85 | ||
87 | typedef struct thresholds_s { | 86 | typedef struct thresholds_s { |
88 | __u16 revision; | 87 | uint16_t revision; |
89 | threshold_t thresholds[NR_ATTRIBUTES]; | 88 | threshold_t thresholds[NR_ATTRIBUTES]; |
90 | __u8 reserved[18]; | 89 | uint8_t reserved[18]; |
91 | __u8 vendor[131]; | 90 | uint8_t vendor[131]; |
92 | __u8 checksum; | 91 | uint8_t checksum; |
93 | } __attribute__((packed)) thresholds_t; | 92 | } __attribute__((packed)) thresholds_t; |
94 | 93 | ||
95 | typedef struct value_s { | 94 | typedef struct value_s { |
96 | __u8 id; | 95 | uint8_t id; |
97 | __u16 status; | 96 | uint16_t status; |
98 | __u8 value; | 97 | uint8_t value; |
99 | __u8 vendor[8]; | 98 | uint8_t vendor[8]; |
100 | } __attribute__((packed)) value_t; | 99 | } __attribute__((packed)) value_t; |
101 | 100 | ||
102 | typedef struct values_s { | 101 | typedef struct values_s { |
103 | __u16 revision; | 102 | uint16_t revision; |
104 | value_t values[NR_ATTRIBUTES]; | 103 | value_t values[NR_ATTRIBUTES]; |
105 | __u8 offline_status; | 104 | uint8_t offline_status; |
106 | __u8 vendor1; | 105 | uint8_t vendor1; |
107 | __u16 offline_timeout; | 106 | uint16_t offline_timeout; |
108 | __u8 vendor2; | 107 | uint8_t vendor2; |
109 | __u8 offline_capability; | 108 | uint8_t offline_capability; |
110 | __u16 smart_capability; | 109 | uint16_t smart_capability; |
111 | __u8 reserved[16]; | 110 | uint8_t reserved[16]; |
112 | __u8 vendor[125]; | 111 | uint8_t vendor[125]; |
113 | __u8 checksum; | 112 | uint8_t checksum; |
114 | } __attribute__((packed)) values_t; | 113 | } __attribute__((packed)) values_t; |
115 | 114 | ||
116 | static struct { | 115 | static struct { |
117 | __u8 value; | 116 | uint8_t value; |
118 | char *text; | 117 | char *text; |
119 | } offline_status_text[] = {{0x00, "NeverStarted"}, {0x02, "Completed"}, {0x04, "Suspended"}, | 118 | } offline_status_text[] = {{0x00, "NeverStarted"}, {0x02, "Completed"}, {0x04, "Suspended"}, {0x05, "Aborted"}, {0x06, "Failed"}, {0, 0}}; |
120 | {0x05, "Aborted"}, {0x06, "Failed"}, {0, 0}}; | ||
121 | 119 | ||
122 | static struct { | 120 | static struct { |
123 | __u8 value; | 121 | uint8_t value; |
124 | char *text; | 122 | char *text; |
125 | } smart_command[] = {{SMART_ENABLE, "SMART_ENABLE"}, | 123 | } smart_command[] = {{SMART_ENABLE, "SMART_ENABLE"}, |
126 | {SMART_DISABLE, "SMART_DISABLE"}, | 124 | {SMART_DISABLE, "SMART_DISABLE"}, |
@@ -140,7 +138,7 @@ static int smart_read_values(int, values_t *); | |||
140 | static int nagios(values_t *, thresholds_t *); | 138 | static int nagios(values_t *, thresholds_t *); |
141 | static void print_value(value_t *, threshold_t *); | 139 | static void print_value(value_t *, threshold_t *); |
142 | static void print_values(values_t *, thresholds_t *); | 140 | static void print_values(values_t *, thresholds_t *); |
143 | static int smart_cmd_simple(int, enum SmartCommand, __u8, bool); | 141 | static int smart_cmd_simple(int, enum SmartCommand, uint8_t, bool); |
144 | static int smart_read_thresholds(int, thresholds_t *); | 142 | static int smart_read_thresholds(int, thresholds_t *); |
145 | static bool verbose = false; | 143 | static bool verbose = false; |
146 | 144 | ||
@@ -175,8 +173,9 @@ int main(int argc, char *argv[]) { | |||
175 | 173 | ||
176 | o = getopt_long(argc, argv, "+d:iq10nhVv", longopts, &longindex); | 174 | o = getopt_long(argc, argv, "+d:iq10nhVv", longopts, &longindex); |
177 | 175 | ||
178 | if (o == -1 || o == EOF || o == 1) | 176 | if (o == -1 || o == EOF || o == 1) { |
179 | break; | 177 | break; |
178 | } | ||
180 | 179 | ||
181 | switch (o) { | 180 | switch (o) { |
182 | case 'd': | 181 | case 'd': |
@@ -234,8 +233,9 @@ int main(int argc, char *argv[]) { | |||
234 | smart_read_values(fd, &values); | 233 | smart_read_values(fd, &values); |
235 | smart_read_thresholds(fd, &thresholds); | 234 | smart_read_thresholds(fd, &thresholds); |
236 | retval = nagios(&values, &thresholds); | 235 | retval = nagios(&values, &thresholds); |
237 | if (verbose) | 236 | if (verbose) { |
238 | print_values(&values, &thresholds); | 237 | print_values(&values, &thresholds); |
238 | } | ||
239 | 239 | ||
240 | close(fd); | 240 | close(fd); |
241 | return retval; | 241 | return retval; |
@@ -254,7 +254,7 @@ char *get_offline_text(int status) { | |||
254 | int smart_read_values(int fd, values_t *values) { | 254 | int smart_read_values(int fd, values_t *values) { |
255 | #ifdef __linux__ | 255 | #ifdef __linux__ |
256 | int e; | 256 | int e; |
257 | __u8 args[4 + 512]; | 257 | uint8_t args[4 + 512]; |
258 | args[0] = WIN_SMART; | 258 | args[0] = WIN_SMART; |
259 | args[1] = 0; | 259 | args[1] = 0; |
260 | args[2] = SMART_READ_VALUES; | 260 | args[2] = SMART_READ_VALUES; |
@@ -282,8 +282,9 @@ int smart_read_values(int fd, values_t *values) { | |||
282 | req.cylinder = WDSMART_CYL; | 282 | req.cylinder = WDSMART_CYL; |
283 | 283 | ||
284 | if (ioctl(fd, ATAIOCCOMMAND, &req) == 0) { | 284 | if (ioctl(fd, ATAIOCCOMMAND, &req) == 0) { |
285 | if (req.retsts != ATACMD_OK) | 285 | if (req.retsts != ATACMD_OK) { |
286 | errno = ENODEV; | 286 | errno = ENODEV; |
287 | } | ||
287 | } | 288 | } |
288 | 289 | ||
289 | if (errno != 0) { | 290 | if (errno != 0) { |
@@ -370,22 +371,24 @@ void print_values(values_t *p, thresholds_t *t) { | |||
370 | p->smart_capability & 1 ? "SaveOnStandBy" : "", p->smart_capability & 2 ? "AutoSave" : ""); | 371 | p->smart_capability & 1 ? "SaveOnStandBy" : "", p->smart_capability & 2 ? "AutoSave" : ""); |
371 | } | 372 | } |
372 | 373 | ||
373 | int smart_cmd_simple(int fd, enum SmartCommand command, __u8 val0, bool show_error) { | 374 | int smart_cmd_simple(int fd, enum SmartCommand command, uint8_t val0, bool show_error) { |
374 | int e = STATE_UNKNOWN; | 375 | int e = STATE_UNKNOWN; |
375 | #ifdef __linux__ | 376 | #ifdef __linux__ |
376 | __u8 args[4]; | 377 | uint8_t args[4]; |
377 | args[0] = WIN_SMART; | 378 | args[0] = WIN_SMART; |
378 | args[1] = val0; | 379 | args[1] = val0; |
379 | args[2] = smart_command[command].value; | 380 | args[2] = smart_command[command].value; |
380 | args[3] = 0; | 381 | args[3] = 0; |
381 | if (ioctl(fd, HDIO_DRIVE_CMD, &args)) { | 382 | if (ioctl(fd, HDIO_DRIVE_CMD, &args)) { |
382 | e = STATE_CRITICAL; | 383 | e = STATE_CRITICAL; |
383 | if (show_error) | 384 | if (show_error) { |
384 | printf(_("CRITICAL - %s: %s\n"), smart_command[command].text, strerror(errno)); | 385 | printf(_("CRITICAL - %s: %s\n"), smart_command[command].text, strerror(errno)); |
386 | } | ||
385 | } else { | 387 | } else { |
386 | e = STATE_OK; | 388 | e = STATE_OK; |
387 | if (show_error) | 389 | if (show_error) { |
388 | printf(_("OK - Command sent (%s)\n"), smart_command[command].text); | 390 | printf(_("OK - Command sent (%s)\n"), smart_command[command].text); |
391 | } | ||
389 | } | 392 | } |
390 | 393 | ||
391 | #endif /* __linux__ */ | 394 | #endif /* __linux__ */ |
@@ -401,20 +404,24 @@ int smart_cmd_simple(int fd, enum SmartCommand command, __u8 val0, bool show_err | |||
401 | req.sec_count = val0; | 404 | req.sec_count = val0; |
402 | 405 | ||
403 | if (ioctl(fd, ATAIOCCOMMAND, &req) == 0) { | 406 | if (ioctl(fd, ATAIOCCOMMAND, &req) == 0) { |
404 | if (req.retsts != ATACMD_OK) | 407 | if (req.retsts != ATACMD_OK) { |
405 | errno = ENODEV; | 408 | errno = ENODEV; |
406 | if (req.cylinder != WDSMART_CYL) | 409 | } |
410 | if (req.cylinder != WDSMART_CYL) { | ||
407 | errno = ENODEV; | 411 | errno = ENODEV; |
412 | } | ||
408 | } | 413 | } |
409 | 414 | ||
410 | if (errno != 0) { | 415 | if (errno != 0) { |
411 | e = STATE_CRITICAL; | 416 | e = STATE_CRITICAL; |
412 | if (show_error) | 417 | if (show_error) { |
413 | printf(_("CRITICAL - %s: %s\n"), smart_command[command].text, strerror(errno)); | 418 | printf(_("CRITICAL - %s: %s\n"), smart_command[command].text, strerror(errno)); |
419 | } | ||
414 | } else { | 420 | } else { |
415 | e = STATE_OK; | 421 | e = STATE_OK; |
416 | if (show_error) | 422 | if (show_error) { |
417 | printf(_("OK - Command sent (%s)\n"), smart_command[command].text); | 423 | printf(_("OK - Command sent (%s)\n"), smart_command[command].text); |
424 | } | ||
418 | } | 425 | } |
419 | 426 | ||
420 | #endif /* __NetBSD__ */ | 427 | #endif /* __NetBSD__ */ |
@@ -424,7 +431,7 @@ int smart_cmd_simple(int fd, enum SmartCommand command, __u8 val0, bool show_err | |||
424 | int smart_read_thresholds(int fd, thresholds_t *thresholds) { | 431 | int smart_read_thresholds(int fd, thresholds_t *thresholds) { |
425 | #ifdef __linux__ | 432 | #ifdef __linux__ |
426 | int e; | 433 | int e; |
427 | __u8 args[4 + 512]; | 434 | uint8_t args[4 + 512]; |
428 | args[0] = WIN_SMART; | 435 | args[0] = WIN_SMART; |
429 | args[1] = 0; | 436 | args[1] = 0; |
430 | args[2] = SMART_READ_THRESHOLDS; | 437 | args[2] = SMART_READ_THRESHOLDS; |
@@ -452,8 +459,9 @@ int smart_read_thresholds(int fd, thresholds_t *thresholds) { | |||
452 | req.cylinder = WDSMART_CYL; | 459 | req.cylinder = WDSMART_CYL; |
453 | 460 | ||
454 | if (ioctl(fd, ATAIOCCOMMAND, &req) == 0) { | 461 | if (ioctl(fd, ATAIOCCOMMAND, &req) == 0) { |
455 | if (req.retsts != ATACMD_OK) | 462 | if (req.retsts != ATACMD_OK) { |
456 | errno = ENODEV; | 463 | errno = ENODEV; |
464 | } | ||
457 | } | 465 | } |
458 | 466 | ||
459 | if (errno != 0) { | 467 | if (errno != 0) { |
diff --git a/plugins/check_ping.c b/plugins/check_ping.c index 940b9475..6bcdeaad 100644 --- a/plugins/check_ping.c +++ b/plugins/check_ping.c | |||
@@ -116,10 +116,10 @@ int main(int argc, char **argv) { | |||
116 | # ifdef PING_HAS_TIMEOUT | 116 | # ifdef PING_HAS_TIMEOUT |
117 | xasprintf(&cmd, rawcmd, timeout_interval, config.max_packets, config.addresses[i]); | 117 | xasprintf(&cmd, rawcmd, timeout_interval, config.max_packets, config.addresses[i]); |
118 | # else | 118 | # else |
119 | xasprintf(&cmd, rawcmd, config.max_packets, addresses[i]); | 119 | xasprintf(&cmd, rawcmd, config.max_packets, config.addresses[i]); |
120 | # endif | 120 | # endif |
121 | #else | 121 | #else |
122 | xasprintf(&cmd, rawcmd, addresses[i], config.max_packets); | 122 | xasprintf(&cmd, rawcmd, config.addresses[i], config.max_packets); |
123 | #endif | 123 | #endif |
124 | 124 | ||
125 | if (verbose >= 2) { | 125 | if (verbose >= 2) { |
diff --git a/plugins/check_swap.c b/plugins/check_swap.c index cb95949a..435a104e 100644 --- a/plugins/check_swap.c +++ b/plugins/check_swap.c | |||
@@ -90,6 +90,14 @@ int main(int argc, char **argv) { | |||
90 | exit(STATE_UNKNOWN); | 90 | exit(STATE_UNKNOWN); |
91 | } | 91 | } |
92 | 92 | ||
93 | if (verbose) { | ||
94 | printf("Swap retrieval result:\n" | ||
95 | "\tFree: %llu\n" | ||
96 | "\tUsed: %llu\n" | ||
97 | "\tTotal: %llu\n", | ||
98 | data.metrics.free, data.metrics.used, data.metrics.total); | ||
99 | } | ||
100 | |||
93 | double percent_used; | 101 | double percent_used; |
94 | mp_check overall = mp_check_init(); | 102 | mp_check overall = mp_check_init(); |
95 | if (config.output_format_is_set) { | 103 | if (config.output_format_is_set) { |
diff --git a/plugins/check_swap.d/check_swap.h b/plugins/check_swap.d/check_swap.h index 1000fc9e..da08d65a 100644 --- a/plugins/check_swap.d/check_swap.h +++ b/plugins/check_swap.d/check_swap.h | |||
@@ -1,7 +1,8 @@ | |||
1 | #pragma once | 1 | #pragma once |
2 | 2 | ||
3 | #include "../common.h" | 3 | #include "../common.h" |
4 | #include "output.h" | 4 | #include "../../lib/output.h" |
5 | #include "../../lib/states.h" | ||
5 | 6 | ||
6 | #ifndef SWAP_CONVERSION | 7 | #ifndef SWAP_CONVERSION |
7 | # define SWAP_CONVERSION 1 | 8 | # define SWAP_CONVERSION 1 |
@@ -26,7 +27,7 @@ typedef struct { | |||
26 | 27 | ||
27 | typedef struct { | 28 | typedef struct { |
28 | bool allswaps; | 29 | bool allswaps; |
29 | int no_swap_state; | 30 | mp_state_enum no_swap_state; |
30 | bool warn_is_set; | 31 | bool warn_is_set; |
31 | check_swap_threshold warn; | 32 | check_swap_threshold warn; |
32 | bool crit_is_set; | 33 | bool crit_is_set; |
diff --git a/plugins/check_swap.d/swap.c b/plugins/check_swap.d/swap.c index 180d5037..634f80d9 100644 --- a/plugins/check_swap.d/swap.c +++ b/plugins/check_swap.d/swap.c | |||
@@ -68,7 +68,7 @@ swap_result getSwapFromProcMeminfo(char proc_meminfo[]) { | |||
68 | FILE *meminfo_file_ptr; | 68 | FILE *meminfo_file_ptr; |
69 | meminfo_file_ptr = fopen(proc_meminfo, "r"); | 69 | meminfo_file_ptr = fopen(proc_meminfo, "r"); |
70 | 70 | ||
71 | swap_result result = {0}; | 71 | swap_result result = {}; |
72 | result.errorcode = STATE_UNKNOWN; | 72 | result.errorcode = STATE_UNKNOWN; |
73 | 73 | ||
74 | if (meminfo_file_ptr == NULL) { | 74 | if (meminfo_file_ptr == NULL) { |
@@ -78,83 +78,71 @@ swap_result getSwapFromProcMeminfo(char proc_meminfo[]) { | |||
78 | return result; | 78 | return result; |
79 | } | 79 | } |
80 | 80 | ||
81 | uint64_t swap_total = 0; | 81 | unsigned long swap_total = 0; |
82 | uint64_t swap_used = 0; | 82 | unsigned long swap_used = 0; |
83 | uint64_t swap_free = 0; | 83 | unsigned long swap_free = 0; |
84 | 84 | ||
85 | bool found_total = false; | 85 | bool found_total = false; |
86 | bool found_used = false; | ||
87 | bool found_free = false; | 86 | bool found_free = false; |
88 | 87 | ||
89 | char input_buffer[MAX_INPUT_BUFFER]; | 88 | char input_buffer[MAX_INPUT_BUFFER]; |
90 | char str[32]; | 89 | char str[32]; |
91 | 90 | ||
92 | while (fgets(input_buffer, MAX_INPUT_BUFFER - 1, meminfo_file_ptr)) { | 91 | while (fgets(input_buffer, MAX_INPUT_BUFFER - 1, meminfo_file_ptr)) { |
93 | uint64_t tmp_KB = 0; | ||
94 | 92 | ||
95 | /* | 93 | /* |
96 | * The following sscanf call looks for a line looking like: "Swap: 123 | 94 | * The following sscanf call looks for a line looking like: "Swap: 123 |
97 | * 123 123" On which kind of system this format exists, I can not say, | 95 | * 123 123" which exists on NetBSD (at least), |
98 | * but I wanted to document this for people who are not adapt with | 96 | * The unit should be Bytes |
99 | * sscanf anymore, like me | ||
100 | * Also the units used here are unclear and probably wrong | ||
101 | */ | 97 | */ |
102 | if (sscanf(input_buffer, "%*[S]%*[w]%*[a]%*[p]%*[:] %lu %lu %lu", &swap_total, &swap_used, &swap_free) == 3) { | 98 | if (sscanf(input_buffer, "%*[S]%*[w]%*[a]%*[p]%*[:] %lu %lu %lu", &swap_total, &swap_used, &swap_free) == 3) { |
103 | |||
104 | result.metrics.total += swap_total; | ||
105 | result.metrics.used += swap_used; | ||
106 | result.metrics.free += swap_free; | ||
107 | |||
108 | found_total = true; | 99 | found_total = true; |
109 | found_free = true; | 100 | found_free = true; |
110 | found_used = true; | ||
111 | |||
112 | // Set error | 101 | // Set error |
113 | result.errorcode = STATE_OK; | 102 | result.errorcode = STATE_OK; |
103 | // Break out of fgets here, since both scanf expressions might match (NetBSD for example) | ||
104 | break; | ||
105 | } | ||
106 | |||
107 | /* | ||
108 | * The following sscanf call looks for lines looking like: | ||
109 | * "SwapTotal: 123" and "SwapFree: 123" This format exists at least | ||
110 | * on Debian Linux with a 5.* kernel | ||
111 | */ | ||
112 | unsigned long tmp_KB = 0; | ||
113 | int sscanf_result = sscanf(input_buffer, | ||
114 | "%*[S]%*[w]%*[a]%*[p]%[TotalFreCchd]%*[:] %lu " | ||
115 | "%*[k]%*[B]", | ||
116 | str, &tmp_KB); | ||
117 | |||
118 | if (sscanf_result == 2) { | ||
119 | |||
120 | if (verbose >= 3) { | ||
121 | printf("Got %s with %lu\n", str, tmp_KB); | ||
122 | } | ||
114 | 123 | ||
115 | /* | 124 | /* I think this part is always in Kb, so convert to bytes */ |
116 | * The following sscanf call looks for lines looking like: | 125 | if (strcmp("Total", str) == 0) { |
117 | * "SwapTotal: 123" and "SwapFree: 123" This format exists at least | 126 | swap_total = tmp_KB * 1000; |
118 | * on Debian Linux with a 5.* kernel | 127 | found_total = true; |
119 | */ | 128 | } else if (strcmp("Free", str) == 0) { |
120 | } else { | 129 | swap_free += tmp_KB * 1000; |
121 | int sscanf_result = sscanf(input_buffer, | 130 | found_free = true; |
122 | "%*[S]%*[w]%*[a]%*[p]%[TotalFreCchd]%*[:] %lu " | 131 | } else if (strcmp("Cached", str) == 0) { |
123 | "%*[k]%*[B]", | 132 | swap_free += tmp_KB * 1000; |
124 | str, &tmp_KB); | ||
125 | |||
126 | if (sscanf_result == 2) { | ||
127 | |||
128 | if (verbose >= 3) { | ||
129 | printf("Got %s with %lu\n", str, tmp_KB); | ||
130 | } | ||
131 | |||
132 | /* I think this part is always in Kb, so convert to bytes */ | ||
133 | if (strcmp("Total", str) == 0) { | ||
134 | swap_total = tmp_KB * 1000; | ||
135 | found_total = true; | ||
136 | } else if (strcmp("Free", str) == 0) { | ||
137 | swap_free = swap_free + tmp_KB * 1000; | ||
138 | found_free = true; | ||
139 | found_used = true; // No explicit used metric available | ||
140 | } else if (strcmp("Cached", str) == 0) { | ||
141 | swap_free = swap_free + tmp_KB * 1000; | ||
142 | found_free = true; | ||
143 | found_used = true; // No explicit used metric available | ||
144 | } | ||
145 | |||
146 | result.errorcode = STATE_OK; | ||
147 | } | 133 | } |
134 | |||
135 | result.errorcode = STATE_OK; | ||
148 | } | 136 | } |
149 | } | 137 | } |
150 | 138 | ||
151 | fclose(meminfo_file_ptr); | 139 | fclose(meminfo_file_ptr); |
152 | 140 | ||
153 | result.metrics.total = swap_total; | 141 | result.metrics.total = swap_total; |
154 | result.metrics.used = swap_total - swap_free; | ||
155 | result.metrics.free = swap_free; | 142 | result.metrics.free = swap_free; |
143 | result.metrics.used = swap_total - swap_free; | ||
156 | 144 | ||
157 | if (!found_free || !found_total || !found_used) { | 145 | if (!found_free || !found_total) { |
158 | result.errorcode = STATE_UNKNOWN; | 146 | result.errorcode = STATE_UNKNOWN; |
159 | } | 147 | } |
160 | 148 | ||
@@ -297,8 +285,14 @@ struct swapent { | |||
297 | }; | 285 | }; |
298 | 286 | ||
299 | #else | 287 | #else |
288 | |||
289 | // Includes for NetBSD | ||
290 | # include <unistd.h> | ||
291 | # include <sys/swap.h> | ||
292 | |||
300 | # define bsd_swapctl swapctl | 293 | # define bsd_swapctl swapctl |
301 | #endif | 294 | |
295 | #endif // CHECK_SWAP_SWAPCTL_BSD | ||
302 | 296 | ||
303 | swap_result getSwapFromSwapctl_BSD(swap_config config) { | 297 | swap_result getSwapFromSwapctl_BSD(swap_config config) { |
304 | /* get the number of active swap devices */ | 298 | /* get the number of active swap devices */ |
@@ -322,8 +316,8 @@ swap_result getSwapFromSwapctl_BSD(swap_config config) { | |||
322 | unsigned long long used_swap_mb = 0; | 316 | unsigned long long used_swap_mb = 0; |
323 | 317 | ||
324 | for (int i = 0; i < nswaps; i++) { | 318 | for (int i = 0; i < nswaps; i++) { |
325 | dsktotal_mb = (float)ent[i].se_nblks / (float)config.conversion_factor; | 319 | dsktotal_mb = (double)ent[i].se_nblks / (double)config.conversion_factor; |
326 | dskused_mb = (float)ent[i].se_inuse / (float)config.conversion_factor; | 320 | dskused_mb = (double)ent[i].se_inuse / (double)config.conversion_factor; |
327 | dskfree_mb = (dsktotal_mb - dskused_mb); | 321 | dskfree_mb = (dsktotal_mb - dskused_mb); |
328 | 322 | ||
329 | if (config.allswaps && dsktotal_mb > 0) { | 323 | if (config.allswaps && dsktotal_mb > 0) { |