aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2021-01-01 17:25:49 +0000
committerAlan Somers <asomers@FreeBSD.org>2021-01-01 17:25:49 +0000
commitb586c66baf4824d175d051b3f5b06588c9aa2bc8 (patch)
treeadab37f1f665b5d2e1e477274750cbfc945eb780
parent92bbfe1f0d1f1c4436d1f064a16e5aaf682526ba (diff)
downloadsrc-b586c66baf4824d175d051b3f5b06588c9aa2bc8.tar.gz
src-b586c66baf4824d175d051b3f5b06588c9aa2bc8.zip
ping: fix ping when the kernel was built without INET6
If the kernel was built without INET6, default to ICMP. Or, if it was built without INET, default to ICMPv6. PR: 251725 Reported by: jbeich Reviewed by: jbeich Tested by: jbeich MFC with: 368045
-rw-r--r--sbin/ping/main.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/sbin/ping/main.c b/sbin/ping/main.c
index 5d28a2b4a5cd..01442679efff 100644
--- a/sbin/ping/main.c
+++ b/sbin/ping/main.c
@@ -126,15 +126,21 @@ main(int argc, char *argv[])
else if (ipv4)
hints.ai_family = AF_INET;
else {
- struct addrinfo *res;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_socktype = SOCK_RAW;
- hints.ai_family = AF_UNSPEC;
- getaddrinfo(argv[argc - 1], NULL, &hints, &res);
- if (res != NULL) {
- hints.ai_family = res[0].ai_family;
- freeaddrinfo(res);
+ if (!feature_present("inet6"))
+ hints.ai_family = AF_INET;
+ else if (!feature_present("inet"))
+ hints.ai_family = AF_INET6;
+ else {
+ struct addrinfo *res;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_RAW;
+ hints.ai_family = AF_UNSPEC;
+ getaddrinfo(argv[argc - 1], NULL, &hints, &res);
+ if (res != NULL) {
+ hints.ai_family = res[0].ai_family;
+ freeaddrinfo(res);
+ }
}
}
#elif defined(INET)