svn commit: r368045 - in head: . etc/mtree rescue/rescue sbin sbin/ping sbin/ping/tests sbin/ping6 sbin/ping6/tests tools/build/mk
Alan Somers
asomers at FreeBSD.org
Thu Nov 26 04:29:33 UTC 2020
Author: asomers
Date: Thu Nov 26 04:29:30 2020
New Revision: 368045
URL: https://svnweb.freebsd.org/changeset/base/368045
Log:
Merge ping6 to ping
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 <sucanjan at gmail.com>
Sponsored by: Google LLC (Google Summer of Code 2019)
MFC after: Never
Differential Revision: https://reviews.freebsd.org/D21377
Added:
head/sbin/ping/main.c (contents, props changed)
head/sbin/ping/main.h (contents, props changed)
head/sbin/ping/ping.h (contents, props changed)
head/sbin/ping/ping6.c
- copied, changed from r368010, head/sbin/ping6/ping6.c
head/sbin/ping/ping6.h (contents, props changed)
head/sbin/ping/tests/ping_6_c1_s8_t1.out
- copied unchanged from r368010, head/sbin/ping6/tests/ping6_c1_s8_t1.out
Deleted:
head/sbin/ping6/Makefile
head/sbin/ping6/Makefile.depend
head/sbin/ping6/ping6.8
head/sbin/ping6/ping6.c
head/sbin/ping6/tests/Makefile
head/sbin/ping6/tests/ping6_c1_s8_t1.out
head/sbin/ping6/tests/ping6_test.sh
Modified:
head/ObsoleteFiles.inc
head/UPDATING
head/etc/mtree/BSD.tests.dist
head/rescue/rescue/Makefile
head/sbin/Makefile
head/sbin/ping/Makefile
head/sbin/ping/ping.8
head/sbin/ping/ping.c
head/sbin/ping/tests/Makefile
head/sbin/ping/tests/ping_test.sh
head/tools/build/mk/OptionalObsoleteFiles.inc
Modified: head/ObsoleteFiles.inc
==============================================================================
--- head/ObsoleteFiles.inc Thu Nov 26 02:14:52 2020 (r368044)
+++ head/ObsoleteFiles.inc Thu Nov 26 04:29:30 2020 (r368045)
@@ -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
Modified: head/UPDATING
==============================================================================
--- head/UPDATING Thu Nov 26 02:14:52 2020 (r368044)
+++ head/UPDATING Thu Nov 26 04:29:30 2020 (r368045)
@@ -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
Modified: head/etc/mtree/BSD.tests.dist
==============================================================================
--- head/etc/mtree/BSD.tests.dist Thu Nov 26 02:14:52 2020 (r368044)
+++ head/etc/mtree/BSD.tests.dist Thu Nov 26 04:29:30 2020 (r368045)
@@ -448,8 +448,6 @@
..
ping
..
- ping6
- ..
route
..
..
Modified: head/rescue/rescue/Makefile
==============================================================================
--- head/rescue/rescue/Makefile Thu Nov 26 02:14:52 2020 (r368044)
+++ head/rescue/rescue/Makefile Thu Nov 26 04:29:30 2020 (r368045)
@@ -103,7 +103,6 @@ CRUNCH_PROGS_sbin+= ccdconfig
.endif
.if ${MK_INET6_SUPPORT} != "no"
-CRUNCH_PROGS_sbin+= ping6
CRUNCH_PROGS_sbin+= rtsol
.endif
Modified: head/sbin/Makefile
==============================================================================
--- head/sbin/Makefile Thu Nov 26 02:14:52 2020 (r368044)
+++ head/sbin/Makefile Thu Nov 26 04:29:30 2020 (r368045)
@@ -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
Modified: head/sbin/ping/Makefile
==============================================================================
--- head/sbin/ping/Makefile Thu Nov 26 02:14:52 2020 (r368044)
+++ head/sbin/ping/Makefile Thu Nov 26 04:29:30 2020 (r368045)
@@ -5,11 +5,17 @@
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
Added: head/sbin/ping/main.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sbin/ping/main.c Thu Nov 26 04:29:30 2020 (r368045)
@@ -0,0 +1,191 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan at FreeBSD.org>
+ * 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);
+}
Added: head/sbin/ping/main.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sbin/ping/main.h Thu Nov 26 04:29:30 2020 (r368045)
@@ -0,0 +1,36 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan at FreeBSD.org>
+ * 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
Modified: head/sbin/ping/ping.8
==============================================================================
--- head/sbin/ping/ping.8 Thu Nov 26 02:14:52 2020 (r368044)
+++ head/sbin/ping/ping.8 Thu Nov 26 04:29:30 2020 (r368045)
@@ -28,17 +28,19 @@
.\" @(#)ping.8 8.2 (Berkeley) 12/11/93
.\" $FreeBSD$
.\"
-.Dd October 2, 2020
+.Dd November 24, 2020
.Dt PING 8
.Os
.Sh NAME
.Nm ping
.Nd send
-.Tn ICMP ECHO_REQUEST
+.Tn ICMP
+or
+.Tn ICMPv6 ECHO_REQUEST
packets to network hosts
.Sh SYNOPSIS
.Nm
-.Op Fl AaDdfHnoQqRrv
+.Op Fl 4AaDdfHnoQqRrv
.Op Fl C Ar pcp
.Op Fl c Ar count
.Op Fl G Ar sweepmaxsize
@@ -55,9 +57,9 @@ packets to network hosts
.Op Fl t Ar timeout
.Op Fl W Ar waittime
.Op Fl z Ar tos
-.Ar host
+.Ar IPv4-host
.Nm
-.Op Fl AaDdfHLnoQqRrv
+.Op Fl 4AaDdfHLnoQqRrv
.Op Fl C Ar pcp
.Op Fl c Ar count
.Op Fl I Ar iface
@@ -73,11 +75,31 @@ packets to network hosts
.Op Fl t Ar timeout
.Op Fl W Ar waittime
.Op Fl z Ar tos
-.Ar mcast-group
+.Ar IPv4-mcast-group
+.Nm
+.Op Fl 6AaDdEfHNnOoquvYyZ
+.Op Fl b Ar bufsiz
+.Op Fl c Ar count
+.Op Fl e Ar gateway
+.Op Fl I Ar interface
+.Op Fl i Ar wait
+.Op Fl k Ar addrtype
+.Op Fl l Ar preload
+.Op Fl m Ar hoplimit
+.Op Fl P Ar policy
+.Op Fl p Ar pattern
+.Op Fl S Ar sourceaddr
+.Op Fl s Ar packetsize
+.Op Fl t Ar timeout
+.Op Fl W Ar waittime
+.Op Ar IPv6-hops ...
+.Ar IPv6-host
.Sh DESCRIPTION
The
.Nm
-utility uses the
+utility invoked with an IPv4 target
+.Ns ( Ar IPv4-host No or Ar IPv4-mcast-group Ns )
+uses the
.Tn ICMP
.No protocol Ap s mandatory
.Tn ECHO_REQUEST
@@ -94,7 +116,32 @@ header, followed by a
and then an arbitrary number of
.Dq pad
bytes used to fill out the packet.
-The options are as follows:
+.Pp
+When invoked with an IPv6 target
+.Ns ( Ar IPv6-host Ns ) Ns ,
+it uses the
+.Tn ICMPv6
+protocol's mandatory
+.Tn ICMP6_ECHO_REQUEST
+datagram to elicit an
+.Tn ICMP6_ECHO_REPLY
+.Ns .
+.Tn ICMP6_ECHO_REQUEST
+datagrams have an IPv6 header and
+.Tn ICMPv6
+header formatted as documented in RFC 2463.
+.Pp
+When invoked with a hostname, the version to which the target is
+resolved first is used. In that case, the options and arguments used
+must be valid for the specific IP version, otherwise
+.Nm
+exits with an error. If the target is resolved to both IPv4 and IPv6,
+the specific IP version can be requested by
+.Fl 4
+or
+.Fl 6
+options, respectively.
+.Ss Options common to both IPv4 and IPv6 targets
.Bl -tag -width indent
.It Fl A
Audible.
@@ -112,8 +159,6 @@ Include a bell
.Tn ( ASCII
0x07)
character in the output when any packet is received.
-This option is ignored
-if other format options are present.
.It Fl C Ar pcp
Add an 802.1p Ethernet Priority Code Point when sending a packet.
0..7 uses that specific PCP, -1 uses the interface default PCP (or none).
@@ -126,12 +171,13 @@ packets.
If this option is not specified,
.Nm
will operate until interrupted.
-If this option is specified in conjunction with ping sweeps,
+.Pp
+For an IPv4 target, if this option is specified in conjunction with ping sweeps,
each sweep will consist of
.Ar count
packets.
.It Fl D
-Set the Don't Fragment bit.
+Disable fragmentation.
.It Fl d
Set the
.Dv SO_DEBUG
@@ -152,31 +198,24 @@ Only the super-user may use this option.
.Bf -emphasis
This can be very hard on a network and should be used with caution.
.Ef
-.It Fl G Ar sweepmaxsize
-Specify the maximum size of
-.Tn ICMP
-payload when sending sweeping pings.
-This option is required for ping sweeps.
-.It Fl g Ar sweepminsize
-Specify the size of
-.Tn ICMP
-payload to start with when sending sweeping pings.
-The default value is 0.
.It Fl H
Hostname output.
Try to do a reverse DNS lookup when displaying addresses.
This is the opposite of the
.Fl n
option.
-.It Fl h Ar sweepincrsize
-Specify the number of bytes to increment the size of
-.Tn ICMP
-payload after
-each sweep when sending sweeping pings.
-The default value is 1.
.It Fl I Ar iface
-Source multicast packets with the given interface address.
-This flag only applies if the ping destination is a multicast address.
+For an IPv4 target,
+.Ar iface
+is an IP address indentifying an interface from which the packets will
+be sent. This flag applies only if the ping target is a multicast
+address.
+.Pp
+For an IPv6 target,
+.Ar iface
+is a name of an interface (e.g. `em0') from which the packets will be
+sent. This flag applies if the ping target is a multicast address, or
+link-local/site-local unicast address.
.It Fl i Ar wait
Wait
.Ar wait
@@ -188,9 +227,6 @@ values less than 1 second.
This option is incompatible with the
.Fl f
option.
-.It Fl L
-Suppress loopback of multicast packets.
-This flag only applies if the ping destination is a multicast address.
.It Fl l Ar preload
If
.Ar preload
@@ -199,35 +235,13 @@ is specified,
sends that many packets as fast as possible before falling into its normal
mode of behavior.
Only the super-user may use this option.
-.It Fl M Cm mask | time
-Use
-.Dv ICMP_MASKREQ
-or
-.Dv ICMP_TSTAMP
-instead of
-.Dv ICMP_ECHO .
-For
-.Cm mask ,
-print the netmask of the remote machine.
-Set the
-.Va net.inet.icmp.maskrepl
-MIB variable to enable
-.Dv ICMP_MASKREPLY
-and
-.Va net.inet.icmp.maskfake
-if you want to override the netmask in the response.
-For
-.Cm time ,
-print the origination, reception and transmission timestamps.
-Set the
-.Va net.inet.icmp.tstamprepl
-MIB variable to enable or disable
-.Dv ICMP_TSTAMPREPLY .
.It Fl m Ar ttl
-Set the IP Time To Live for outgoing packets.
+For an IPv4 target, set the IP Time To Live for outgoing packets.
If not specified, the kernel uses the value of the
.Va net.inet.ip.ttl
MIB variable.
+.Pp
+For an IPv6 target, set the IPv6 hoplimit.
.It Fl n
Numeric output only.
No attempt will be made to lookup symbolic names for host addresses.
@@ -252,6 +266,97 @@ For example,
.Dq Li \-p ff
will cause the sent packet to be filled with all
ones.
+.It Fl q
+Quiet output.
+Nothing is displayed except the summary lines at startup time and
+when finished.
+.It Fl S Ar src_addr
+Use the following IP address as the source address in outgoing packets.
+On hosts with more than one IP address, this option can be used to
+force the source address to be something other than the IP address
+of the interface the probe packet is sent on.
+.Pp
+For IPv4, if the IP address is not one of this machine's interface
+addresses, an error is returned and nothing is sent.
+.Pp
+For IPv6, the source address must be one of the unicast addresses of
+the sending node, and must be numeric.
+.It Fl s Ar packetsize
+Specify the number of data bytes to be sent.
+The default is 56, which translates into 64
+.Tn ICMP
+data bytes when combined
+with the 8 bytes of
+.Tn ICMP
+header data.
+.Pp
+For IPv4, only the super-user may specify values more than default.
+This option cannot be used with ping sweeps.
+.Pp
+For IPv6, you may need to specify
+.Fl b
+as well to extend socket buffer size.
+.It Fl t Ar timeout
+Specify a timeout, in seconds, before ping exits regardless of how
+many packets have been received.
+.It Fl v
+Verbose output.
+.Tn ICMP
+packets other than
+.Tn ECHO_RESPONSE
+that are received are listed.
+.It Fl W Ar waittime
+Time in milliseconds to wait for a reply for each packet sent.
+If a reply arrives later, the packet is not printed as replied, but
+considered as replied when calculating statistics.
+.El
+.Ss Options only for IPv4 targets
+.Bl -tag -width indent
+.It Fl 4
+Use IPv4 regardless of how the target is resolved.
+.It Fl G Ar sweepmaxsize
+Specify the maximum size of
+.Tn ICMP
+payload when sending sweeping pings.
+This option is required for ping sweeps.
+.It Fl g Ar sweepminsize
+Specify the size of
+.Tn ICMP
+payload to start with when sending sweeping pings.
+The default value is 0.
+.It Fl h Ar sweepincrsize
+Specify the number of bytes to increment the size of
+.Tn ICMP
+payload after
+each sweep when sending sweeping pings.
+The default value is 1.
+.It Fl L
+Suppress loopback of multicast packets.
+This flag only applies if the ping destination is a multicast address.
+.It Fl M Cm mask | time
+Use
+.Dv ICMP_MASKREQ
+or
+.Dv ICMP_TSTAMP
+instead of
+.Dv ICMP_ECHO .
+For
+.Cm mask ,
+print the netmask of the remote machine.
+Set the
+.Va net.inet.icmp.maskrepl
+MIB variable to enable
+.Dv ICMP_MASKREPLY
+and
+.Va net.inet.icmp.maskfake
+if you want to override the netmask in the response.
+For
+.Cm time ,
+print the origination, reception and transmission timestamps.
+Set the
+.Va net.inet.icmp.tstamprepl
+MIB variable to enable or disable
+.Dv ICMP_TSTAMPREPLY .
.It Fl Q
Somewhat quiet output.
.No Don Ap t
@@ -268,10 +373,6 @@ flag,
.Nm
prints out any ICMP error messages caused by its own ECHO_REQUEST
messages.
-.It Fl q
-Quiet output.
-Nothing is displayed except the summary lines at startup time and
-when finished.
.It Fl R
Record route.
Includes the
@@ -299,44 +400,123 @@ This option can be used to ping a local host through a
that has no route through it
(e.g., after the interface was dropped by
.Xr routed 8 ) .
-.It Fl S Ar src_addr
-Use the following IP address as the source address in outgoing packets.
-On hosts with more than one IP address, this option can be used to
-force the source address to be something other than the IP address
-of the interface the probe packet is sent on.
-If the IP address
-is not one of this machine's interface addresses, an error is
-returned and nothing is sent.
-.It Fl s Ar packetsize
-Specify the number of data bytes to be sent.
-The default is 56, which translates into 64
-.Tn ICMP
-data bytes when combined
-with the 8 bytes of
-.Tn ICMP
-header data.
-Only the super-user may specify values more than default.
-This option cannot be used with ping sweeps.
.It Fl T Ar ttl
Set the IP Time To Live for multicasted packets.
This flag only applies if the ping destination is a multicast address.
-.It Fl t Ar timeout
-Specify a timeout, in seconds, before ping exits regardless of how
-many packets have been received.
-.It Fl v
-Verbose output.
-.Tn ICMP
-packets other than
-.Tn ECHO_RESPONSE
-that are received are listed.
-.It Fl W Ar waittime
-Time in milliseconds to wait for a reply for each packet sent.
-If a reply arrives later, the packet is not printed as replied, but
-considered as replied when calculating statistics.
.It Fl z Ar tos
Use the specified type of service.
+.It Ar IPv4-host
+hostname or IPv4 address of the final destination node.
+.It Ar IPv4-mcast-group
+IPv4 multicast address of the final destination nodes.
.El
+.Ss Options only for IPv6 targets
+.Bl -tag -width indent
+.It Fl 6
+Use IPv6 regardless of how the target is resolved.
+.It Fl b Ar bufsiz
+Set socket buffer size.
+.It Fl e Ar gateway
+Specifies to use
+.Ar gateway
+as the next hop to the destination.
+The gateway must be a neighbor of the sending node.
+.It Fl k Ar addrtype
+Generate ICMPv6 Node Information Node Addresses query, rather than echo-request.
+.Ar addrtype
+must be a string constructed of the following characters.
+.Bl -tag -width Ds -compact
+.It Ic a
+requests unicast addresses from all of the responder's interfaces.
+If the character is omitted,
+only those addresses which belong to the interface which has the
+responder's address are requests.
+.It Ic c
+requests responder's IPv4-compatible and IPv4-mapped addresses.
+.It Ic g
+requests responder's global-scope addresses.
+.It Ic s
+requests responder's site-local addresses.
+.It Ic l
+requests responder's link-local addresses.
+.It Ic A
+requests responder's anycast addresses.
+Without this character, the responder will return unicast addresses only.
+With this character, the responder will return anycast addresses only.
+Note that the specification does not specify how to get responder's
+anycast addresses.
+This is an experimental option.
+.El
+.It Fl N
+Probe node information multicast group address
+.Pq Li ff02::2:ffxx:xxxx .
+.Ar host
+must be string hostname of the target
+(must not be a numeric IPv6 address).
+Node information multicast group will be computed based on given
+.Ar host ,
+and will be used as the final destination.
+Since node information multicast group is a link-local multicast group,
+outgoing interface needs to be specified by
+.Fl I
+option.
.Pp
+When specified twice, the address
+.Pq Li ff02::2:xxxx:xxxx
+is used instead.
+The former is in RFC 4620, the latter is in an old Internet Draft
+draft-ietf-ipngwg-icmp-name-lookup.
+Note that KAME-derived implementations including
+.Fx
+use the latter.
+.It Fl O
+Generate ICMPv6 Node Information supported query types query,
+rather than echo-request.
+.Fl s
+has no effect if
+.Fl O
+is specified.
+.It Fl u
+By default,
+.Nm
+asks the kernel to fragment packets to fit into the minimum IPv6 MTU.
+The
+.Fl u
+option
+will suppress the behavior in the following two levels:
+when the option is specified once, the behavior will be disabled for
+unicast packets.
+When the option is more than once, it will be disabled for both
+unicast and multicast packets.
+.It Fl Y
+Same as
+.Fl y ,
+but with old packet format based on 03 draft.
+This option is present for backward compatibility.
+.Fl s
+has no effect if
+.Fl y
+is specified.
+.It Fl y
+Generate ICMPv6 Node Information DNS Name query, rather than echo-request.
+.Fl s
+has no effect if
+.Fl y
+is specified.
+.It Ar IPv6-hops
+IPv6 addresses for intermediate nodes,
+which will be put into type 0 routing header.
+.It Ar IPv6-host
+IPv6 address of the final destination node.
+.El
+.Ss Experimental options only for IPv6 target
+.Bl -tag -width indent
+.It Fl E
+Enables transport-mode IPsec encapsulated security payload.
+.It Fl Z
+Enables transport-mode IPsec authentication header.
+.El
+.Pp
When using
.Nm
for fault isolation, it should first be run on the local host, to verify
@@ -364,8 +544,8 @@ receives a
argument for
.Xr stty 1 )
signal, the current number of packets sent and received, and the
-minimum, mean, and maximum of the round-trip times will be written to
-the standard error output.
+minimum, mean, maximum, and standard deviation of the round-trip times
+will be written to the standard output.
.Pp
This program is intended for use in network testing, measurement and
management.
@@ -446,7 +626,7 @@ using the
.Fl p
option of
.Nm .
-.Sh TTL DETAILS
+.Sh IPv4 TTL DETAILS
The
.Tn TTL
value of an IP packet represents the maximum number of IP routers
@@ -536,20 +716,74 @@ At least one response was heard from the specified
The transmission was successful but no responses were received.
.It any other value
An error occurred.
-These values are defined in
-.In sysexits.h .
.El
+.Sh EXAMPLES
+The following will send ICMPv6 echo request to
+.Li dst.foo.com .
+.Bd -literal -offset indent
+ping -6 -n dst.foo.com
+.Ed
+.Pp
+The following will probe hostnames for all nodes on the network link attached to
+.Li wi0
+interface.
+The address
+.Li ff02::1
+is named the link-local all-node multicast address, and the packet would
+reach every node on the network link.
+.Bd -literal -offset indent
+ping -6 -y ff02::1%wi0
+.Ed
+.Pp
+The following will probe addresses assigned to the destination node,
+.Li dst.foo.com .
+.Bd -literal -offset indent
+ping -6 -k agl dst.foo.com
+.Ed
.Sh SEE ALSO
.Xr netstat 1 ,
.Xr icmp 4 ,
+.Xr icmp6 4 ,
+.Xr inet6 4 ,
+.Xr ip6 4 ,
.Xr ifconfig 8 ,
.Xr routed 8 ,
.Xr traceroute 8
+.Xr traceroute6 8
+.Rs
+.%A A. Conta
+.%A S. Deering
+.%T "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification"
+.%N RFC 2463
+.%D December 1998
+.Re
+.Rs
+.%A Matt Crawford
+.%T "IPv6 Node Information Queries"
+.%N draft-ietf-ipngwg-icmp-name-lookups-09.txt
+.%D May 2002
+.%O work in progress material
+.Re
.Sh HISTORY
The
.Nm
utility appeared in
.Bx 4.3 .
+The
+.Nm ping6
+utility with IPv6 support first appeared in the WIDE Hydrangea IPv6
+protocol stack kit.
+.Pp
+IPv6 and IPsec support based on the KAME Project
+.Pq Pa http://www.kame.net/
+stack was initially integrated into
+.Fx 4.0 .
+.Pp
+The
+.Nm ping6
+utility was merged to
+.Nm
+in Google Summer of Code 2019.
.Sh AUTHORS
The original
.Nm
@@ -558,7 +792,7 @@ utility was written by
while at the US Army Ballistics
Research Laboratory.
.Sh BUGS
-Many Hosts and Gateways ignore the
+Many Hosts and Gateways ignore the IPv4
.Tn RECORD_ROUTE
option.
.Pp
Modified: head/sbin/ping/ping.c
==============================================================================
--- head/sbin/ping/ping.c Thu Nov 26 02:14:52 2020 (r368044)
+++ head/sbin/ping/ping.c Thu Nov 26 04:29:30 2020 (r368045)
@@ -100,6 +100,8 @@ __FBSDID("$FreeBSD$");
#include <time.h>
#include <unistd.h>
+#include "main.h"
+#include "ping.h"
#include "utils.h"
#define INADDR_LEN ((int)sizeof(in_addr_t))
@@ -225,10 +227,9 @@ static void pr_pack(char *, ssize_t, struct sockaddr_i
static void pr_retip(struct ip *, const u_char *);
static void status(int);
static void stopit(int);
-static void usage(void) __dead2;
int
-main(int argc, char *const *argv)
+ping(int argc, char *const *argv)
{
struct sockaddr_in from, sock_in;
struct in_addr ifaddr;
@@ -301,7 +302,7 @@ main(int argc, char *const *argv)
outpack = outpackhdr + sizeof(struct ip);
while ((ch = getopt(argc, argv,
- "AaC:c:DdfG:g:Hh:I:i:Ll:M:m:nop:QqRrS:s:T:t:vW:z:"
+ "4AaC:c:DdfG:g:Hh:I:i:Ll:M:m:nop:QqRrS:s:T:t:vW:z:"
#ifdef IPSEC
#ifdef IPSEC_POLICY_IPSEC
"P:"
@@ -310,6 +311,9 @@ main(int argc, char *const *argv)
)) != -1)
{
switch(ch) {
+ case '4':
+ /* This option is processed in main(). */
+ break;
case 'A':
options |= F_MISSED;
break;
@@ -1768,25 +1772,4 @@ capdns_setup(void)
err(1, "unable to limit access to system.dns service");
#endif
return (capdnsloc);
-}
-
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-#define SECOPT " [-P policy]"
-#else
-#define SECOPT ""
-#endif
-static void
-usage(void)
-{
-
- (void)fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
-"usage: ping [-AaDdfHnoQqRrv] [-C pcp] [-c count] [-G sweepmaxsize] [-g sweepminsize]",
-" [-h sweepincrsize] [-i wait] [-l preload] [-M mask | time] [-m ttl]",
-" " SECOPT " [-p pattern] [-S src_addr] [-s packetsize] [-t timeout]",
-" [-W waittime] [-z tos] host",
-" ping [-AaDdfHLnoQqRrv] [-C pcp] [-c count] [-I iface] [-i wait] [-l preload]",
-" [-M mask | time] [-m ttl]" SECOPT " [-p pattern] [-S src_addr]",
-" [-s packetsize] [-T ttl] [-t timeout] [-W waittime]",
-" [-z tos] mcast-group");
- exit(EX_USAGE);
}
Added: head/sbin/ping/ping.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sbin/ping/ping.h Thu Nov 26 04:29:30 2020 (r368045)
@@ -0,0 +1,36 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan at FreeBSD.org>
+ * 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
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-all
mailing list