summaryrefslogtreecommitdiff
blob: 71d32f0f4aa6901195ea5d11e2d86233e8248b3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
From 8d4d34eea9fbd25d0103975f366799764bbc4a2f Mon Sep 17 00:00:00 2001
From: Lars Wendler <polynomial-c@gentoo.org>
Date: Thu, 20 Aug 2015 11:47:22 +0200
Subject: [PATCH] Add possibility to make ping use IPv4 by default.

Using ping with a linux kernel without IPv6 capability yields to the
following problem:

> ping www.google.de
ping: socket: Address family not supported by protocol (raw socket
required by specified options).
>

because ping is using IPv6 by default when -4 option is omitted.

Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
---
 Makefile | 7 ++++++-
 ping.c   | 5 +++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 8b37c42..e34be5b 100644
--- a/Makefile
+++ b/Makefile
@@ -114,6 +114,11 @@ ifeq ($(ENABLE_PING6_RTHDR),RFC3542)
 endif
 endif
 
+# DEFAULT TO IPV4
+ifneq ($(IPV4_DEFAULT),no)
+	DEF_IPV4 = -DIPV4_DEFAULT
+endif
+
 # -------------------------------------
 TARGETS=ping tracepath tracepath6 traceroute6 clockdiff rdisc arping tftpd rarpd
 
@@ -155,7 +160,7 @@ LIB_clockdiff = $(LIB_CAP)
 # ping / ping6
 DEF_ping_common = $(DEF_CAP) $(DEF_IDN)
 DEF_ping6_common = $(DEF_CAP) $(DEF_IDN)
-DEF_ping  = $(DEF_CAP) $(DEF_IDN) $(DEF_WITHOUT_IFADDRS)
+DEF_ping  = $(DEF_CAP) $(DEF_IDN) $(DEF_WITHOUT_IFADDRS) $(DEF_IPV4)
 LIB_ping  = $(LIB_CAP) $(LIB_IDN) $(LIB_RESOLV)
 
 ping: ping_common.o ping6_common.o
diff --git a/ping.c b/ping.c
index ec9708e..a08a03e 100644
--- a/ping.c
+++ b/ping.c
@@ -439,6 +439,11 @@ main(int argc, char **argv)
 
 	target = argv[argc-1];
 
+#ifdef IPV4_DEFAULT
+	if (hints.ai_family == AF_UNSPEC)
+		hints.ai_family = AF_INET;
+#endif
+
 	/* Create sockets */
 	enable_capability_raw();
 	if (hints.ai_family != AF_INET6)
-- 
2.5.0