diff options
author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-05-13 09:01:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-13 09:01:05 +0200 |
commit | af88e3ced3c49169ed57fa4b4eaf6b4d8bb39ba7 (patch) | |
tree | e109051f4b0929c44c608962fede9f618995c1b2 /plugins/check_fping.c | |
parent | b13f97780716f758652cd5f92bd7d6cd7f122a54 (diff) | |
parent | da80da50d34eccefa4c5e5f5a500f06170e3d876 (diff) | |
download | monitoring-plugins-refs/heads/master.tar.gz |
Improve handling of -4/-6
This changes the handling of `-4`/`-6` flags for check_fping to make it more explicit which IP stack is used in which case.
Additionally, the deprecated `fping6` command is removed wholesale and the explicit `-4`/`-6` flags are used instead.
Diffstat (limited to 'plugins/check_fping.c')
-rw-r--r-- | plugins/check_fping.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/plugins/check_fping.c b/plugins/check_fping.c index ec7abb67..e05056b2 100644 --- a/plugins/check_fping.c +++ b/plugins/check_fping.c | |||
@@ -79,6 +79,24 @@ int main(int argc, char **argv) { | |||
79 | server = strscpy(server, config.server_name); | 79 | server = strscpy(server, config.server_name); |
80 | 80 | ||
81 | char *option_string = ""; | 81 | char *option_string = ""; |
82 | char *fping_prog = NULL; | ||
83 | |||
84 | /* First determine if the target is dualstack or ipv6 only. */ | ||
85 | bool server_is_inet6_addr = is_inet6_addr(server); | ||
86 | |||
87 | /* | ||
88 | * If the user requested -6 OR the user made no assertion and the address is v6 or dualstack | ||
89 | * -> we use ipv6 | ||
90 | * If the user requested -4 OR the user made no assertion and the address is v4 ONLY | ||
91 | * -> we use ipv4 | ||
92 | */ | ||
93 | if (address_family == AF_INET6 || (address_family == AF_UNSPEC && server_is_inet6_addr)) { | ||
94 | xasprintf(&option_string, "%s-6 ", option_string); | ||
95 | } else { | ||
96 | xasprintf(&option_string, "%s-4 ", option_string); | ||
97 | } | ||
98 | fping_prog = strdup(PATH_TO_FPING); | ||
99 | |||
82 | /* compose the command */ | 100 | /* compose the command */ |
83 | if (config.target_timeout) { | 101 | if (config.target_timeout) { |
84 | xasprintf(&option_string, "%s-t %d ", option_string, config.target_timeout); | 102 | xasprintf(&option_string, "%s-t %d ", option_string, config.target_timeout); |
@@ -99,17 +117,6 @@ int main(int argc, char **argv) { | |||
99 | xasprintf(&option_string, "%s-R ", option_string); | 117 | xasprintf(&option_string, "%s-R ", option_string); |
100 | } | 118 | } |
101 | 119 | ||
102 | char *fping_prog = NULL; | ||
103 | #ifdef PATH_TO_FPING6 | ||
104 | if (address_family != AF_INET && is_inet6_addr(server)) { | ||
105 | fping_prog = strdup(PATH_TO_FPING6); | ||
106 | } else { | ||
107 | fping_prog = strdup(PATH_TO_FPING); | ||
108 | } | ||
109 | #else | ||
110 | fping_prog = strdup(PATH_TO_FPING); | ||
111 | #endif | ||
112 | |||
113 | char *command_line = NULL; | 120 | char *command_line = NULL; |
114 | xasprintf(&command_line, "%s %s-b %d -c %d %s", fping_prog, option_string, config.packet_size, config.packet_count, server); | 121 | xasprintf(&command_line, "%s %s-b %d -c %d %s", fping_prog, option_string, config.packet_size, config.packet_count, server); |
115 | 122 | ||
@@ -340,11 +347,7 @@ check_fping_config_wrapper process_arguments(int argc, char **argv) { | |||
340 | address_family = AF_INET; | 347 | address_family = AF_INET; |
341 | break; | 348 | break; |
342 | case '6': /* IPv6 only */ | 349 | case '6': /* IPv6 only */ |
343 | #ifdef USE_IPV6 | ||
344 | address_family = AF_INET6; | 350 | address_family = AF_INET6; |
345 | #else | ||
346 | usage(_("IPv6 support not available\n")); | ||
347 | #endif | ||
348 | break; | 351 | break; |
349 | case 'c': | 352 | case 'c': |
350 | get_threshold(optarg, rv); | 353 | get_threshold(optarg, rv); |