diff options
Diffstat (limited to 'plugins/check_ping.c')
-rw-r--r-- | plugins/check_ping.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/plugins/check_ping.c b/plugins/check_ping.c index 54402ae3..ffe7a7d5 100644 --- a/plugins/check_ping.c +++ b/plugins/check_ping.c | |||
@@ -19,11 +19,15 @@ const char *progname = "check_ping"; | |||
19 | 19 | ||
20 | #define OPTIONS "\ | 20 | #define OPTIONS "\ |
21 | -H <host_address> -w <wrta>,<wpl>%% -c <crta>,<cpl>%%\n\ | 21 | -H <host_address> -w <wrta>,<wpl>%% -c <crta>,<cpl>%%\n\ |
22 | [-p packets] [-t timeout] [-L]\n" | 22 | [-p packets] [-t timeout] [-L] [-4] [-6]\n" |
23 | 23 | ||
24 | #define LONGOPTIONS "\ | 24 | #define LONGOPTIONS "\ |
25 | -H, --hostname=HOST\n\ | 25 | -H, --hostname=HOST\n\ |
26 | host to ping\n\ | 26 | host to ping\n\ |
27 | -4, --use-ipv4\n\ | ||
28 | Use IPv4 ICMP PING\n\ | ||
29 | -6, --use-ipv6\n\ | ||
30 | Use IPv6 ICMP PING\n\ | ||
27 | -w, --warning=THRESHOLD\n\ | 31 | -w, --warning=THRESHOLD\n\ |
28 | warning threshold pair\n\ | 32 | warning threshold pair\n\ |
29 | -c, --critical=THRESHOLD\n\ | 33 | -c, --critical=THRESHOLD\n\ |
@@ -46,6 +50,7 @@ the contrib area of the downloads section at http://www.nagios.org\n\n" | |||
46 | 50 | ||
47 | #include "config.h" | 51 | #include "config.h" |
48 | #include "common.h" | 52 | #include "common.h" |
53 | #include "netutils.h" | ||
49 | #include "popen.h" | 54 | #include "popen.h" |
50 | #include "utils.h" | 55 | #include "utils.h" |
51 | 56 | ||
@@ -106,12 +111,12 @@ main (int argc, char **argv) | |||
106 | /* does the host address of number of packets argument come first? */ | 111 | /* does the host address of number of packets argument come first? */ |
107 | #ifdef PING6_COMMAND | 112 | #ifdef PING6_COMMAND |
108 | # ifdef PING_PACKETS_FIRST | 113 | # ifdef PING_PACKETS_FIRST |
109 | if (is_inet6_addr(addresses[i])) | 114 | if (is_inet6_addr(addresses[i]) && address_family != AF_INET) |
110 | asprintf (&command_line, PING6_COMMAND, max_packets, addresses[i]); | 115 | asprintf (&command_line, PING6_COMMAND, max_packets, addresses[i]); |
111 | else | 116 | else |
112 | asprintf (&command_line, PING_COMMAND, max_packets, addresses[i]); | 117 | asprintf (&command_line, PING_COMMAND, max_packets, addresses[i]); |
113 | # else | 118 | # else |
114 | if (is_inet6_addr(addresses[i])) | 119 | if (is_inet6_addr(addresses[i]) && address_family != AF_INET) |
115 | asprintf (&command_line, PING6_COMMAND, addresses[i], max_packets); | 120 | asprintf (&command_line, PING6_COMMAND, addresses[i], max_packets); |
116 | else | 121 | else |
117 | asprintf (&command_line, PING_COMMAND, addresses[i], max_packets); | 122 | asprintf (&command_line, PING_COMMAND, addresses[i], max_packets); |
@@ -182,6 +187,8 @@ process_arguments (int argc, char **argv) | |||
182 | {"packets", required_argument, 0, 'p'}, | 187 | {"packets", required_argument, 0, 'p'}, |
183 | {"nohtml", no_argument, 0, 'n'}, | 188 | {"nohtml", no_argument, 0, 'n'}, |
184 | {"link", no_argument, 0, 'L'}, | 189 | {"link", no_argument, 0, 'L'}, |
190 | {"use-ipv4", no_argument, 0, '4'}, | ||
191 | {"use-ipv6", no_argument, 0, '6'}, | ||
185 | {0, 0, 0, 0} | 192 | {0, 0, 0, 0} |
186 | }; | 193 | }; |
187 | 194 | ||
@@ -196,7 +203,7 @@ process_arguments (int argc, char **argv) | |||
196 | } | 203 | } |
197 | 204 | ||
198 | while (1) { | 205 | while (1) { |
199 | c = getopt_long (argc, argv, "VvhnLt:c:w:H:p:", long_options, &option_index); | 206 | c = getopt_long (argc, argv, "VvhnL46t:c:w:H:p:", long_options, &option_index); |
200 | 207 | ||
201 | if (c == -1 || c == EOF) | 208 | if (c == -1 || c == EOF) |
202 | break; | 209 | break; |
@@ -216,6 +223,12 @@ process_arguments (int argc, char **argv) | |||
216 | case 'v': /* verbose mode */ | 223 | case 'v': /* verbose mode */ |
217 | verbose = TRUE; | 224 | verbose = TRUE; |
218 | break; | 225 | break; |
226 | case '4': /* IPv4 only */ | ||
227 | address_family = AF_INET; | ||
228 | break; | ||
229 | case '6': /* IPv6 only */ | ||
230 | address_family = AF_INET6; | ||
231 | break; | ||
219 | case 'H': /* hostname */ | 232 | case 'H': /* hostname */ |
220 | ptr=optarg; | 233 | ptr=optarg; |
221 | while (1) { | 234 | while (1) { |