Skip to content

Commit

Permalink
Merge ping6 to ping
Browse files Browse the repository at this point in the history
There is now a single ping binary, which chooses to use ICMP or ICMPv4
based on the -4 and -6 options, and the format of the address.

Submitted by:	Ján Sučan <[email protected]>
Sponsored by:	Google LLC (Google Summer of Code 2019)
MFC after:	Never
Differential Revision:	https://reviews.freebsd.org/D21377
  • Loading branch information
asomers committed Nov 26, 2020
1 parent b05f17a commit 3cde917
Show file tree
Hide file tree
Showing 22 changed files with 685 additions and 843 deletions.
10 changes: 10 additions & 0 deletions ObsoleteFiles.inc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@
# xargs -n1 | sort | uniq -d;
# done

# 20201124: ping6(8) was merged into ping(8)
OLD_FILES+=sbin/ping6
OLD_FILES+=rescue/ping6
OLD_FILES+=usr/lib/debug/sbin/ping6.debug
OLD_FILES+=usr/share/man/man8/ping6.8.gz
OLD_FILES+=usr/tests/sbin/ping6/Kyuafile
OLD_FILES+=usr/tests/sbin/ping6/ping6_c1_s8_t1.out
OLD_FILES+=usr/tests/sbin/ping6/ping6_test
OLD_DIRS+=usr/tests/sbin/ping6

# 20201025: Remove cal data files
OLD_FILES+=usr/share/calendar/calendar.all
OLD_FILES+=usr/share/calendar/calendar.australia
Expand Down
4 changes: 4 additions & 0 deletions UPDATING
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW:
world, or to merely disable the most expensive debugging functionality
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)

20201124:
ping6 has been merged into ping. It can now be called as "ping -6".
See ping(8) for details.

20201108:
Default value of net.add_addr_allfibs has been changed to 0.
If you have multi-fib configuration and rely on existence of all
Expand Down
2 changes: 0 additions & 2 deletions etc/mtree/BSD.tests.dist
Original file line number Diff line number Diff line change
Expand Up @@ -448,8 +448,6 @@
..
ping
..
ping6
..
route
..
..
Expand Down
1 change: 0 additions & 1 deletion rescue/rescue/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ CRUNCH_PROGS_sbin+= ccdconfig
.endif

.if ${MK_INET6_SUPPORT} != "no"
CRUNCH_PROGS_sbin+= ping6
CRUNCH_PROGS_sbin+= rtsol
.endif

Expand Down
1 change: 0 additions & 1 deletion sbin/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ SUBDIR.${MK_CCD}+= ccdconfig
SUBDIR.${MK_CXX}+= devd
SUBDIR.${MK_HAST}+= hastctl
SUBDIR.${MK_HAST}+= hastd
SUBDIR.${MK_INET6}+= ping6
SUBDIR.${MK_INET6}+= rtsol
SUBDIR.${MK_IPFILTER}+= ipf
SUBDIR.${MK_IPFW}+= ipfw
Expand Down
8 changes: 7 additions & 1 deletion sbin/ping/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@

PACKAGE=runtime
PROG= ping
SRCS= ping.c utils.c
SRCS= main.c ping.c utils.c
MAN= ping.8
BINOWN= root
BINMODE=4555
LIBADD= m

.if ${MK_INET6_SUPPORT} != "no"
CFLAGS+= -DINET6 -DKAME_SCOPEID
SRCS+= ping6.c
LIBADD+= md
.endif

.if ${MK_DYNAMICROOT} == "no"
.warning ${PROG} built without libcasper support
.elif ${MK_CASPER} != "no" && !defined(RESCUE)
Expand Down
191 changes: 191 additions & 0 deletions sbin/ping/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (C) 2019 Jan Sucan <[email protected]>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/

#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");

#include <sys/types.h>
#include <sys/socket.h>

#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>

#include <err.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "main.h"
#include "ping.h"
#ifdef INET6
#include "ping6.h"
#endif

#ifdef INET6
#define OPTSTR ":46"
#else
#define OPTSTR ":4"
#endif

int
main(int argc, char *argv[])
{
struct in_addr a;
struct addrinfo hints;
int ch;
bool ipv4;
#ifdef INET6
struct in6_addr a6;
bool ipv6;

ipv6 = false;
#endif
ipv4 = false;

while ((ch = getopt(argc, argv, OPTSTR)) != -1) {
switch(ch) {
case '4':
ipv4 = true;
break;
#ifdef INET6
case '6':
ipv6 = true;
break;
#endif
default:
break;
}
}

if (optind >= argc)
usage();

optreset = 1;
optind = 1;
#ifdef INET6
if (ipv4 && ipv6)
errx(1, "-4 and -6 cannot be used simultaneously");
#endif

if (inet_pton(AF_INET, argv[argc - 1], &a) == 1) {
#ifdef INET6
if (ipv6)
errx(1, "IPv6 requested but IPv4 target address "
"provided");
#endif
hints.ai_family = AF_INET;
}
#ifdef INET6
else if (inet_pton(AF_INET6, argv[argc - 1], &a6) == 1) {
if (ipv4)
errx(1, "IPv4 requested but IPv6 target address "
"provided");
hints.ai_family = AF_INET6;
} else if (ipv6)
hints.ai_family = AF_INET6;
#endif
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 (hints.ai_family == AF_INET)
return ping(argc, argv);
#ifdef INET6
else if (hints.ai_family == AF_INET6)
return ping6(argc, argv);
#endif
else
errx(1, "Unknown host");
}

void
usage(void)
{
(void)fprintf(stderr,
"usage: ping [-4AaDdfHnoQqRrv] [-C pcp] [-c count] "
"[-G sweepmaxsize]\n"
" [-g sweepminsize] [-h sweepincrsize] [-i wait] "
"[-l preload]\n"
" [-M mask | time] [-m ttl]"
#ifdef IPSEC
"[-P policy] "
#endif
"[-p pattern] [-S src_addr] \n"
" [-s packetsize] [-t timeout] [-W waittime] [-z tos] "
"IPv4-host\n"
" ping [-4AaDdfHLnoQqRrv] [-C pcp] [-c count] [-I iface] "
"[-i wait]\n"
" [-l preload] [-M mask | time] [-m ttl] "
#ifdef IPSEC
"[-P policy] "
#endif
"[-p pattern]\n"
" [-S src_addr] [-s packetsize] [-T ttl] [-t timeout] [-W waittime]\n"
" [-z tos] IPv4-mcast-group\n"
#ifdef INET6
" ping [-6aADd"
#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
"E"
#endif
"fHnNoOq"
#ifdef IPV6_USE_MIN_MTU
"u"
#endif
"vyY"
#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
"Z"
#endif
"] "
"[-b bufsiz] [-c count] [-e gateway]\n"
" [-I interface] [-i wait] [-k addrtype] [-l preload] "
"[-m hoplimit]\n"
" [-p pattern]"
#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
" [-P policy]"
#endif
" [-S sourceaddr] [-s packetsize] [-t timeout]\n"
" [-W waittime] [-z tclass] [IPv6-hops ...] IPv6-host\n"
#endif /* INET6 */
);

exit(1);
}
36 changes: 36 additions & 0 deletions sbin/ping/main.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (C) 2019 Jan Sucan <[email protected]>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/

#ifndef MAIN_H
#define MAIN_H 1

void usage(void) __dead2;

#endif
Loading

0 comments on commit 3cde917

Please sign in to comment.