aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
Diffstat (limited to 'sbin')
-rw-r--r--sbin/Makefile1
-rw-r--r--sbin/ping/Makefile8
-rw-r--r--sbin/ping/main.c191
-rw-r--r--sbin/ping/main.h36
-rw-r--r--sbin/ping/ping.8432
-rw-r--r--sbin/ping/ping.c31
-rw-r--r--sbin/ping/ping.h36
-rw-r--r--sbin/ping/ping6.c (renamed from sbin/ping6/ping6.c)42
-rw-r--r--sbin/ping/ping6.h36
-rw-r--r--sbin/ping/tests/Makefile1
-rw-r--r--sbin/ping/tests/ping_6_c1_s8_t1.out (renamed from sbin/ping6/tests/ping6_c1_s8_t1.out)0
-rw-r--r--sbin/ping/tests/ping_test.sh17
-rw-r--r--sbin/ping6/Makefile27
-rw-r--r--sbin/ping6/Makefile.depend22
-rw-r--r--sbin/ping6/ping6.8567
-rw-r--r--sbin/ping6/tests/Makefile8
-rw-r--r--sbin/ping6/tests/ping6_test.sh53
17 files changed, 671 insertions, 837 deletions
diff --git a/sbin/Makefile b/sbin/Makefile
index 72da4c5bb058..64840bae82bb 100644
--- a/sbin/Makefile
+++ b/sbin/Makefile
@@ -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
diff --git a/sbin/ping/Makefile b/sbin/ping/Makefile
index 79f5fc2442a3..437d2f6b1b5a 100644
--- a/sbin/ping/Makefile
+++ b/sbin/ping/Makefile
@@ -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)
diff --git a/sbin/ping/main.c b/sbin/ping/main.c
new file mode 100644
index 000000000000..13891e15da36
--- /dev/null
+++ b/sbin/ping/main.c
@@ -0,0 +1,191 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan@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);
+}
diff --git a/sbin/ping/main.h b/sbin/ping/main.h
new file mode 100644
index 000000000000..f9707ccfb5ff
--- /dev/null
+++ b/sbin/ping/main.h
@@ -0,0 +1,36 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan@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
diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
index c5a1202cae4a..c76a995b3a5b 100644
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -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,42 +400,121 @@ This option can be used to ping a local host through an interface
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
@@ -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
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index e53e5013a71c..fe197928085e 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -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_in *, struct timespec *);
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;
@@ -1769,24 +1773,3 @@ capdns_setup(void)
#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);
-}
diff --git a/sbin/ping/ping.h b/sbin/ping/ping.h
new file mode 100644
index 000000000000..36ce3c0b973d
--- /dev/null
+++ b/sbin/ping/ping.h
@@ -0,0 +1,36 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan@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 PING_H
+#define PING_H 1
+
+int ping(int argc, char *const *argv);
+
+#endif
diff --git a/sbin/ping6/ping6.c b/sbin/ping/ping6.c
index dba9f81ca87d..4cbeae770372 100644
--- a/sbin/ping6/ping6.c
+++ b/sbin/ping/ping6.c
@@ -142,6 +142,9 @@ __FBSDID("$FreeBSD$");
#include <md5.h>
+#include "main.h"
+#include "ping6.h"
+
struct tv32 {
u_int32_t tv32_sec;
u_int32_t tv32_nsec;
@@ -265,7 +268,6 @@ static volatile sig_atomic_t seenint;
static volatile sig_atomic_t seeninfo;
#endif
-int main(int, char *[]);
static cap_channel_t *capdns_setup(void);
static void fill(char *, char *);
static int get_hoplim(struct msghdr *);
@@ -293,10 +295,9 @@ static void pr_retip(struct ip6_hdr *, u_char *);
static void summary(void);
static int setpolicy(int, char *);
static char *nigroup(char *, int);
-static void usage(void);
int
-main(int argc, char *argv[])
+ping6(int argc, char *argv[])
{
struct timespec last, intvl;
struct sockaddr_in6 from, *sin6;
@@ -354,9 +355,12 @@ main(int argc, char *argv[])
#endif /*IPSEC_POLICY_IPSEC*/
#endif
while ((ch = getopt(argc, argv,
- "k:b:C:c:DdfHe:m:I:i:l:unNop:qaAS:s:OvyYW:t:z:" ADDOPTS)) != -1) {
+ "6k:b:C:c:DdfHe:m:I:i:l:unNop:qaAS:s:OvyYW:t:z:" ADDOPTS)) != -1) {
#undef ADDOPTS
switch (ch) {
+ case '6':
+ /* This option is processed in main(). */
+ break;
case 'k':
{
char *cp;
@@ -2843,36 +2847,6 @@ nigroup(char *name, int nig_oldmcprefix)
return strdup(hbuf);
}
-static void
-usage(void)
-{
- (void)fprintf(stderr,
-#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
- "Z"
-#endif
- "usage: ping6 [-"
- "aADd"
-#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
- "E"
-#endif
- "fHnNoOq"
-#ifdef IPV6_USE_MIN_MTU
- "u"
-#endif
- "vyY] "
- "[-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]\n"
- " [-t timeout] [-W waittime] [-z tclass] [hops ...] "
- "host\n");
- exit(1);
-}
-
static cap_channel_t *
capdns_setup(void)
{
diff --git a/sbin/ping/ping6.h b/sbin/ping/ping6.h
new file mode 100644
index 000000000000..5879b3684f2f
--- /dev/null
+++ b/sbin/ping/ping6.h
@@ -0,0 +1,36 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (C) 2019 Jan Sucan <jansucan@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 PING6_H
+#define PING6_H 1
+
+int ping6(int argc, char *argv[]);
+
+#endif
diff --git a/sbin/ping/tests/Makefile b/sbin/ping/tests/Makefile
index 2d5082ac839b..5eb0b3abc4fa 100644
--- a/sbin/ping/tests/Makefile
+++ b/sbin/ping/tests/Makefile
@@ -7,5 +7,6 @@ PACKAGE= tests
ATF_TESTS_SH+= ping_test
${PACKAGE}FILES+= ping_c1_s56_t1.out
+${PACKAGE}FILES+= ping_6_c1_s8_t1.out
.include <bsd.test.mk>
diff --git a/sbin/ping6/tests/ping6_c1_s8_t1.out b/sbin/ping/tests/ping_6_c1_s8_t1.out
index 81c56e6cf586..81c56e6cf586 100644
--- a/sbin/ping6/tests/ping6_c1_s8_t1.out
+++ b/sbin/ping/tests/ping_6_c1_s8_t1.out
diff --git a/sbin/ping/tests/ping_test.sh b/sbin/ping/tests/ping_test.sh
index 3c792453d4ff..5084b89d5a89 100644
--- a/sbin/ping/tests/ping_test.sh
+++ b/sbin/ping/tests/ping_test.sh
@@ -36,12 +36,26 @@ ping_c1_s56_t1_body() {
atf_skip "IPv4 is not configured"
fi
atf_check -s exit:0 -o save:std.out -e empty \
- ping -c 1 -s 56 -t 1 localhost
+ ping -4 -c 1 -s 56 -t 1 localhost
check_ping_statistics std.out $(atf_get_srcdir)/ping_c1_s56_t1.out
}
+atf_test_case ping_6_c1_s8_t1
+ping_6_c1_s8_t1_head() {
+ atf_set "descr" "Stop after receiving 1 ECHO_RESPONSE packet"
+}
+ping_6_c1_s8_t1_body() {
+ if ! getaddrinfo -f inet6 localhost 1>/dev/null 2>&1; then
+ atf_skip "IPv6 is not configured"
+ fi
+ atf_check -s exit:0 -o save:std.out -e empty \
+ ping -6 -c 1 -s 8 -t 1 localhost
+ check_ping_statistics std.out $(atf_get_srcdir)/ping_6_c1_s8_t1.out
+}
+
atf_init_test_cases() {
atf_add_test_case ping_c1_s56_t1
+ atf_add_test_case ping_6_c1_s8_t1
}
check_ping_statistics() {
@@ -50,6 +64,7 @@ check_ping_statistics() {
-e 's/localhost ([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{1,3\})/localhost/' \
-e 's/from [0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{1,3\}/from/' \
-e 's/ttl=[0-9][0-9]*/ttl=/' \
+ -e 's/hlim=[0-9][0-9]*/hlim=/' \
"$1" >"$1".filtered
atf_check -s exit:0 diff -u "$1".filtered "$2"
}
diff --git a/sbin/ping6/Makefile b/sbin/ping6/Makefile
deleted file mode 100644
index b658f32f06e9..000000000000
--- a/sbin/ping6/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-# $FreeBSD$
-
-.include <src.opts.mk>
-
-PACKAGE=runtime
-PROG= ping6
-MAN= ping6.8
-
-CFLAGS+=-DIPSEC -DKAME_SCOPEID
-
-BINOWN= root
-BINMODE=4555
-
-LIBADD= ipsec m md
-
-.if ${MK_DYNAMICROOT} == "no"
-.warning ${PROG} built without libcasper support
-.elif ${MK_CASPER} != "no" && !defined(RESCUE)
-LIBADD+= casper
-LIBADD+= cap_dns
-CFLAGS+=-DWITH_CASPER
-.endif
-
-HAS_TESTS=
-SUBDIR.${MK_TESTS}+= tests
-
-.include <bsd.prog.mk>
diff --git a/sbin/ping6/Makefile.depend b/sbin/ping6/Makefile.depend
deleted file mode 100644
index 725e99740168..000000000000
--- a/sbin/ping6/Makefile.depend
+++ /dev/null
@@ -1,22 +0,0 @@
-# $FreeBSD$
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/arpa \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcapsicum \
- lib/libcompiler_rt \
- lib/libipsec \
- lib/libmd \
- lib/libnv \
- lib/msun \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/sbin/ping6/ping6.8 b/sbin/ping6/ping6.8
deleted file mode 100644
index 0e355e581370..000000000000
--- a/sbin/ping6/ping6.8
+++ /dev/null
@@ -1,567 +0,0 @@
-.\" $KAME: ping6.8,v 1.58 2003/06/20 12:00:22 itojun Exp $
-.\"
-.\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
-.\" 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.
-.\" 3. Neither the name of the project nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE PROJECT 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 PROJECT 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$
-.\"
-.Dd October 2, 2020
-.Dt PING6 8
-.Os
-.Sh NAME
-.Nm ping6
-.Nd send
-.Tn ICMPv6 ECHO_REQUEST
-packets to network hosts
-.Sh SYNOPSIS
-.Nm
-.\" without ipsec, or new ipsec
-.Op Fl aAdDfHnNoOquvyY
-.\" old ipsec
-.\" .Op Fl ADdEfmnNqRtvwW
-.Bk -words
-.Op Fl b Ar bufsiz
-.Ek
-.Bk -words
-.Op Fl C Ar pcp
-.Ek
-.Bk -words
-.Op Fl c Ar count
-.Ek
-.Bk -words
-.Op Fl e Ar gateway
-.Ek
-.Bk -words
-.Op Fl I Ar interface
-.Ek
-.Bk -words
-.Op Fl i Ar wait
-.Ek
-.Bk -words
-.Op Fl k Ar addrtype
-.Ek
-.Bk -words
-.Op Fl l Ar preload
-.Ek
-.Bk -words
-.Op Fl m Ar hoplimit
-.Ek
-.Bk -words
-.\" new ipsec
-.Op Fl P Ar policy
-.Ek
-.Bk -words
-.Op Fl p Ar pattern
-.Ek
-.Bk -words
-.Op Fl S Ar sourceaddr
-.Ek
-.Bk -words
-.Op Fl s Ar packetsize
-.Ek
-.Bk -words
-.Op Fl t Ar timeout
-.Ek
-.Bk -words
-.Op Fl W Ar waittime
-.Ek
-.Bk -words
-.Op Fl z Ar tclass
-.Ek
-.Bk -words
-.Op Ar hops ...
-.Ek
-.Bk -words
-.Ar host
-.Ek
-.Sh DESCRIPTION
-The
-.Nm
-utility uses the
-.Tn ICMPv6
-protocol's mandatory
-.Tn ICMP6_ECHO_REQUEST
-datagram to elicit an
-.Tn ICMP6_ECHO_REPLY
-from a host or gateway.
-.Tn ICMP6_ECHO_REQUEST
-datagrams (``pings'') have an IPv6 header,
-and
-.Tn ICMPv6
-header formatted as documented in RFC2463.
-The options are as follows:
-.Bl -tag -width Ds
-.\" old ipsec
-.\" .It Fl Z
-.\" Enables transport-mode IPsec authentication header
-.\" (experimental).
-.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 b Ar bufsiz
-Set socket buffer size.
-.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).
-.It Fl c Ar count
-Stop after sending
-(and receiving)
-.Ar count
-.Tn ECHO_RESPONSE
-packets.
-.It Fl D
-Disable IPv6 fragmentation.
-.It Fl d
-Set the
-.Dv SO_DEBUG
-option on the socket being used.
-.\" .It Fl E
-.\" Enables transport-mode IPsec encapsulated security payload
-.\" (experimental).
-.It Fl f
-Flood ping.
-Outputs packets as fast as they come back or one hundred times per second,
-whichever is more.
-For every
-.Tn ECHO_REQUEST
-sent a period
-.Dq \&.
-is printed, while for every
-.Tn ECHO_REPLY
-received a backspace is printed.
-This provides a rapid display of how many packets are being dropped.
-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 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 H
-Specifies to try reverse-lookup of IPv6 addresses.
-The
-.Nm
-utility does not try reverse-lookup unless the option is specified.
-.It Fl m Ar hoplimit
-Set the IPv6 hoplimit.
-.It Fl I Ar interface
-Source packets with the given interface address.
-This flag applies if the ping destination is a multicast address,
-or link-local/site-local unicast address.
-.It Fl i Ar wait
-Wait
-.Ar wait
-seconds
-.Em between sending each packet .
-The default is to wait for one second between each packet.
-This option is incompatible with the
-.Fl f
-option.
-.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 t Ar timeout
-Specify a timeout,
-in seconds,
-before ping exits regardless of how many packets have been received.
-.It Fl l Ar preload
-If
-.Ar preload
-is specified,
-.Nm
-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 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 n
-Numeric output only.
-No attempt will be made to lookup symbolic names from addresses in the reply.
-.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
-Exit successfully after receiving one reply packet.
-.It Fl p Ar pattern
-You may specify up to 16
-.Dq pad
-bytes to fill out the packet you send.
-This is useful for diagnosing data-dependent problems in a network.
-For example,
-.Dq Li \-p ff
-will cause the sent packet to be filled with all
-ones.
-.\" new ipsec
-.It Fl P Ar policy
-.Ar policy
-specifies IPsec policy to be used for the probe.
-.It Fl q
-Quiet output.
-Nothing is displayed except the summary lines at startup time and
-when finished.
-.It Fl a
-Audible.
-Include a bell
-.Tn ( ASCII
-0x07)
-character in the output when any packet is received.
-.It Fl A
-Audible.
-Output a bell
-.Tn ( ASCII
-0x07)
-character when no packet is received before the next packet
-is transmitted.
-To cater for round-trip times that are longer than the interval
-between transmissions, further missing packets cause a bell only
-if the maximum number of unreceived packets has increased.
-.It Fl S Ar sourceaddr
-Specifies the source address of request packets.
-The source address must be one of the unicast addresses of the sending node,
-and must be numeric.
-.It Fl s Ar packetsize
-Specifies 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.
-You may need to specify
-.Fl b
-as well to extend socket buffer size.
-.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 v
-Verbose output.
-.Tn ICMP
-packets other than
-.Tn ECHO_RESPONSE
-that are received are listed.
-.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 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 z Ar tclass
-Use the specified traffic class when sending.
-.It Ar hops
-IPv6 addresses for intermediate nodes,
-which will be put into type 0 routing header.
-.It Ar host
-IPv6 address of the final destination node.
-.El
-.Pp
-When using
-.Nm
-for fault isolation, it should first be run on the local host, to verify
-that the local network interface is up and running.
-Then, hosts and gateways further and further away should be
-.Dq pinged .
-Round-trip times and packet loss statistics are computed.
-If duplicate packets are received, they are not included in the packet
-loss calculation, although the round trip time of these packets is used
-in calculating the round-trip time statistics.
-When the specified number of packets have been sent
-(and received)
-or if the program is terminated with a
-.Dv SIGINT ,
-a brief summary is displayed, showing the number of packets sent and
-received, and the minimum, mean, maximum, and standard deviation of
-the round-trip times.
-.Pp
-If
-.Nm
-receives a
-.Dv SIGINFO
-(see the
-.Cm status
-argument for
-.Xr stty 1 )
-signal, the current number of packets sent and received, and the
-minimum, mean, maximum, and standard deviation of the round-trip times
-will be written to the standard output in the same format as the
-standard completion message.
-.Pp
-This program is intended for use in network testing, measurement and
-management.
-Because of the load it can impose on the network, it is unwise to use
-.Nm
-during normal operations or from automated scripts.
-.\" .Sh ICMP PACKET DETAILS
-.\" An IP header without options is 20 bytes.
-.\" An
-.\" .Tn ICMP
-.\" .Tn ECHO_REQUEST
-.\" packet contains an additional 8 bytes worth of
-.\" .Tn ICMP
-.\" header followed by an arbitrary amount of data.
-.\" When a
-.\" .Ar packetsize
-.\" is given, this indicated the size of this extra piece of data
-.\" (the default is 56).
-.\" Thus the amount of data received inside of an IP packet of type
-.\" .Tn ICMP
-.\" .Tn ECHO_REPLY
-.\" will always be 8 bytes more than the requested data space
-.\" (the
-.\" .Tn ICMP
-.\" header).
-.\" .Pp
-.\" If the data space is at least eight bytes large,
-.\" .Nm
-.\" uses the first eight bytes of this space to include a timestamp which
-.\" it uses in the computation of round trip times.
-.\" If less than eight bytes of pad are specified, no round trip times are
-.\" given.
-.Sh DUPLICATE AND DAMAGED PACKETS
-The
-.Nm
-utility will report duplicate and damaged packets.
-Duplicate packets should never occur when pinging a unicast address,
-and seem to be caused by
-inappropriate link-level retransmissions.
-Duplicates may occur in many situations and are rarely
-(if ever)
-a good sign, although the presence of low levels of duplicates may not
-always be cause for alarm.
-Duplicates are expected when pinging a broadcast or multicast address,
-since they are not really duplicates but replies from different hosts
-to the same request.
-.Pp
-Damaged packets are obviously serious cause for alarm and often
-indicate broken hardware somewhere in the
-.Nm
-packet's path
-(in the network or in the hosts).
-.Sh TRYING DIFFERENT DATA PATTERNS
-The
-(inter)network
-layer should never treat packets differently depending on the data
-contained in the data portion.
-Unfortunately, data-dependent problems have been known to sneak into
-networks and remain undetected for long periods of time.
-In many cases the particular pattern that will have problems is something
-that does not have sufficient
-.Dq transitions ,
-such as all ones or all zeros, or a pattern right at the edge, such as
-almost all zeros.
-It is not
-necessarily enough to specify a data pattern of all zeros (for example)
-on the command line because the pattern that is of interest is
-at the data link level, and the relationship between what you type and
-what the controllers transmit can be complicated.
-.Pp
-This means that if you have a data-dependent problem you will probably
-have to do a lot of testing to find it.
-If you are lucky, you may manage to find a file that either
-cannot
-be sent across your network or that takes much longer to transfer than
-other similar length files.
-You can then examine this file for repeated patterns that you can test
-using the
-.Fl p
-option of
-.Nm .
-.Sh EXIT STATUS
-The
-.Nm
-utility returns 0 on success (the host is alive),
-2 if the transmission was successful but no responses were received,
-any other non-zero value if the arguments are incorrect or
-another error has occurred.
-.Sh EXAMPLES
-Normally,
-.Nm
-works just like
-.Xr ping 8
-would work; the following will send ICMPv6 echo request to
-.Li dst.foo.com .
-.Bd -literal -offset indent
-ping6 -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
-ping6 -y ff02::1%wi0
-.Ed
-.Pp
-The following will probe addresses assigned to the destination node,
-.Li dst.foo.com .
-.Bd -literal -offset indent
-ping6 -k agl dst.foo.com
-.Ed
-.Sh SEE ALSO
-.Xr netstat 1 ,
-.Xr icmp6 4 ,
-.Xr inet6 4 ,
-.Xr ip6 4 ,
-.Xr ifconfig 8 ,
-.Xr ping 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 RFC2463
-.%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
-.Xr ping 8
-utility appeared in
-.Bx 4.3 .
-The
-.Nm
-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 .
-.Sh BUGS
-The
-.Nm
-utility
-is intentionally separate from
-.Xr ping 8 .
-.Pp
-There have been many discussions on why we separate
-.Nm
-and
-.Xr ping 8 .
-Some people argued that it would be more convenient to uniform the
-ping command for both IPv4 and IPv6.
-The followings are an answer to the request.
-.Pp
-From a developer's point of view:
-since the underling raw sockets API is totally different between IPv4
-and IPv6, we would end up having two types of code base.
-There would actually be less benefit to uniform the two commands
-into a single command from the developer's standpoint.
-.Pp
-From an operator's point of view: unlike ordinary network applications
-like remote login tools, we are usually aware of address family when using
-network management tools.
-We do not just want to know the reachability to the host, but want to know the
-reachability to the host via a particular network protocol such as
-IPv6.
-Thus, even if we had a unified
-.Xr ping 8
-command for both IPv4 and IPv6, we would usually type a
-.Fl 6
-or
-.Fl 4
-option (or something like those) to specify the particular address family.
-This essentially means that we have two different commands.
diff --git a/sbin/ping6/tests/Makefile b/sbin/ping6/tests/Makefile
deleted file mode 100644
index f773d23c294a..000000000000
--- a/sbin/ping6/tests/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# $FreeBSD$
-
-PACKAGE= tests
-
-ATF_TESTS_SH+= ping6_test
-${PACKAGE}FILES+= ping6_c1_s8_t1.out
-
-.include <bsd.test.mk>
diff --git a/sbin/ping6/tests/ping6_test.sh b/sbin/ping6/tests/ping6_test.sh
deleted file mode 100644
index d7721d620614..000000000000
--- a/sbin/ping6/tests/ping6_test.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
-#
-# Copyright (C) 2019 Jan Sucan <jansucan@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$
-
-atf_test_case ping6_c1_s8_t1
-ping6_c1_s8_t1_head() {
- atf_set "descr" "Stop after receiving 1 ECHO_RESPONSE packet"
-}
-ping6_c1_s8_t1_body() {
- if ! getaddrinfo -f inet6 localhost 1>/dev/null 2>&1; then
- atf_skip "IPv6 is not configured"
- fi
- atf_check -s exit:0 -o save:std.out -e empty \
- ping6 -c 1 -s 8 -t 1 localhost
- check_ping_statistics std.out $(atf_get_srcdir)/ping6_c1_s8_t1.out
-}
-
-atf_init_test_cases() {
- atf_add_test_case ping6_c1_s8_t1
-}
-
-check_ping_statistics() {
- sed -e 's/0.[0-9]\{3\}//g' \
- -e 's/[1-9][0-9]*.[0-9]\{3\}//g' \
- -e 's/hlim=[0-9][0-9]*/hlim=/' \
- "$1" >"$1".filtered
- atf_check -s exit:0 diff -u "$1".filtered "$2"
-}