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 | |
| parent | b13f97780716f758652cd5f92bd7d6cd7f122a54 (diff) | |
| parent | da80da50d34eccefa4c5e5f5a500f06170e3d876 (diff) | |
| download | monitoring-plugins-af88e3ced3c49169ed57fa4b4eaf6b4d8bb39ba7.tar.gz | |
Merge pull request #2115 from Firstyear/20250327-use-flags-fping
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')
| -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); |
