summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/check_ping.c21
-rw-r--r--plugins/netutils.c6
2 files changed, 20 insertions, 7 deletions
diff --git a/plugins/check_ping.c b/plugins/check_ping.c
index 54402ae..ffe7a7d 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) {
diff --git a/plugins/netutils.c b/plugins/netutils.c
index dc679e2..60410c6 100644
--- a/plugins/netutils.c
+++ b/plugins/netutils.c
@@ -326,11 +326,11 @@ is_host (char *address)
326int 326int
327is_addr (char *address) 327is_addr (char *address)
328{ 328{
329 if (is_inet_addr (address)) 329 if (is_inet_addr (address) && address_family != AF_INET6)
330 return (TRUE); 330 return (TRUE);
331 331
332#ifdef USE_IPV6 332#ifdef USE_IPV6
333 if (is_inet6_addr (address)) 333 if (is_inet6_addr (address) && address_family != AF_INET)
334 return (TRUE); 334 return (TRUE);
335#endif 335#endif
336 336
@@ -374,7 +374,7 @@ int
374is_hostname (char *s1) 374is_hostname (char *s1)
375{ 375{
376#ifdef USE_IPV6 376#ifdef USE_IPV6
377 return resolve_host_or_addr (s1, AF_UNSPEC); 377 return resolve_host_or_addr (s1, address_family);
378#else 378#else
379 return resolve_host_or_addr (s1, AF_INET); 379 return resolve_host_or_addr (s1, AF_INET);
380#endif 380#endif