diff options
| author | Alan Somers <asomers@FreeBSD.org> | 2021-01-01 17:25:49 +0000 |
|---|---|---|
| committer | Alan Somers <asomers@FreeBSD.org> | 2021-01-01 17:25:49 +0000 |
| commit | b586c66baf4824d175d051b3f5b06588c9aa2bc8 (patch) | |
| tree | adab37f1f665b5d2e1e477274750cbfc945eb780 | |
| parent | 92bbfe1f0d1f1c4436d1f064a16e5aaf682526ba (diff) | |
| download | src-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.c | 24 |
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) |
