summaryrefslogtreecommitdiffstats
path: root/sbin/ping
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>1996-12-15 23:41:29 +0000
committerfenner <fenner@FreeBSD.org>1996-12-15 23:41:29 +0000
commite90f4998f6617ad83fb3537e298ad98fc024bc5c (patch)
treeaccd1cafbb0a6e426ed33108cb8078a5b7a9f955 /sbin/ping
parentc25e969a03c4b60daf1267edf42c119c55938c6c (diff)
downloadFreeBSD-src-e90f4998f6617ad83fb3537e298ad98fc024bc5c.zip
FreeBSD-src-e90f4998f6617ad83fb3537e298ad98fc024bc5c.tar.gz
Add multicast options -I (source interface), -T (set ttl), -L (no loopback).
They were all lowercase in the original, but our ping already uses -i and -l so I made them all uppercase. Obtained from: Multicast release 3.5
Diffstat (limited to 'sbin/ping')
-rw-r--r--sbin/ping/ping.822
-rw-r--r--sbin/ping/ping.c73
2 files changed, 80 insertions, 15 deletions
diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
index 8ec5bc1..0b8f673 100644
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -30,7 +30,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)ping.8 8.2 (Berkeley) 12/11/93
-.\" $Id$
+.\" $Id: ping.8,v 1.3 1996/10/05 22:27:04 wosch Exp $
.\"
.Dd December 11, 1993
.Dt PING 8
@@ -42,12 +42,15 @@
packets to network hosts
.Sh SYNOPSIS
.Nm ping
-.Op Fl dfnqrvRQ
+.Op Fl dfnqrvLRQ
.Op Fl c Ar count
.Op Fl i Ar wait
+.Op Fl I Ar interface
.Op Fl l Ar preload
.Op Fl p Ar pattern
.Op Fl s Ar packetsize
+.Op Fl T Ar ttl
+.Ar host
.Sh DESCRIPTION
.Nm Ping
uses the
@@ -99,6 +102,9 @@ The default is to wait for one second between each packet.
This option is incompatible with the
.Fl f
option.
+.It Fl I Ar interface
+Source multicast packets with the given interface address.
+This flag only applies if the ping destination is a multicast address.
.It Fl l Ar preload
If
.Ar preload
@@ -106,6 +112,9 @@ is specified,
.Nm ping
sends that many packets as fast as possible before falling into its normal
mode of behavior.
+.It Fl L
+Suppress loopback of multicast packets.
+This flag only applies if the ping destination is a multicast address.
.It Fl n
Numeric output only.
No attempt will be made to lookup symbolic names for host addresses.
@@ -159,6 +168,9 @@ data bytes when combined
with the 8 bytes of
.Tn ICMP
header data.
+.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 v
Verbose output.
.Tn ICMP
@@ -216,11 +228,15 @@ given.
.Sh DUPLICATE AND DAMAGED PACKETS
.Nm Ping
will report duplicate and damaged packets.
-Duplicate packets should never occur, and seem to be caused by
+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
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index 81ef449..bfbf254 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -96,16 +96,19 @@ static char sccsid[] = "@(#)ping.c 8.1 (Berkeley) 6/5/93";
/* various options */
int options;
-#define F_FLOOD 0x001
-#define F_INTERVAL 0x002
-#define F_NUMERIC 0x004
-#define F_PINGFILLED 0x008
-#define F_QUIET 0x010
-#define F_RROUTE 0x020
-#define F_SO_DEBUG 0x040
-#define F_SO_DONTROUTE 0x080
-#define F_VERBOSE 0x100
-#define F_QUIET2 0x200
+#define F_FLOOD 0x0001
+#define F_INTERVAL 0x0002
+#define F_NUMERIC 0x0004
+#define F_PINGFILLED 0x0008
+#define F_QUIET 0x0010
+#define F_RROUTE 0x0020
+#define F_SO_DEBUG 0x0040
+#define F_SO_DONTROUTE 0x0080
+#define F_VERBOSE 0x0100
+#define F_QUIET2 0x0200
+#define F_NOLOOP 0x0400
+#define F_MTTL 0x0800
+#define F_MIF 0x1000
/*
* MAX_DUP_CHK is the number of bits in received table, i.e. the maximum
@@ -157,6 +160,8 @@ main(argc, argv)
struct termios ts;
register int i;
int ch, fdmask, hold, packlen, preload, sockerrno;
+ struct in_addr ifaddr;
+ unsigned char ttl, loop;
u_char *datap, *packet;
char *target, hnamebuf[MAXHOSTNAMELEN], *malloc();
#ifdef IP_OPTIONS
@@ -180,7 +185,7 @@ main(argc, argv)
preload = 0;
datap = &outpack[8 + sizeof(struct timeval)];
- while ((ch = getopt(argc, argv, "QRc:dfh:i:l:np:qrs:v")) != EOF)
+ while ((ch = getopt(argc, argv, "I:LQRT:c:dfh:i:l:np:qrs:v")) != EOF)
switch(ch) {
case 'c':
npackets = atoi(optarg);
@@ -211,6 +216,14 @@ main(argc, argv)
}
options |= F_INTERVAL;
break;
+ case 'I': /* multicast interface */
+ if (inet_aton(optarg, &ifaddr) == 0) {
+ (void)fprintf(stderr,
+ "ping: bad multicast interface.\n");
+ exit(1);
+ }
+ options |= F_MIF;
+ break;
case 'l':
preload = atoi(optarg);
if (preload < 0) {
@@ -219,6 +232,10 @@ main(argc, argv)
exit(1);
}
break;
+ case 'L':
+ options |= F_NOLOOP;
+ loop = 0;
+ break;
case 'n':
options |= F_NUMERIC;
break;
@@ -251,6 +268,16 @@ main(argc, argv)
exit(1);
}
break;
+ case 'T': /* multicast TTL */
+ i = atoi(optarg);
+ if (i < 0 || i > 255) {
+ (void)fprintf(stderr,
+ "ping: illegal multicast TTL.\n");
+ exit(1);
+ }
+ ttl = i;
+ options |= F_MTTL;
+ break;
case 'v':
options |= F_VERBOSE;
break;
@@ -337,6 +364,28 @@ main(argc, argv)
#endif /* IP_OPTIONS */
}
+ if (options & F_NOLOOP) {
+ if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop,
+ sizeof(loop)) < 0) {
+ perror("ping: IP_MULTICAST_LOOP");
+ exit(1);
+ }
+ }
+ if (options & F_MTTL) {
+ if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl,
+ sizeof(ttl)) < 0) {
+ perror("ping: IP_MULTICAST_TTL");
+ exit(1);
+ }
+ }
+ if (options & F_MIF) {
+ if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &ifaddr,
+ sizeof(ifaddr)) < 0) {
+ perror("ping: IP_MULTICAST_IF");
+ exit(1);
+ }
+ }
+
/*
* When pinging the broadcast address, you can get a lot of answers.
* Doing something so evil is useful if you are trying to stress the
@@ -1085,6 +1134,6 @@ fill(bp, patp)
usage()
{
(void)fprintf(stderr,
- "usage: ping [-Rdfnqrv] [-c count] [-i wait] [-l preload]\n\t[-p pattern] [-s packetsize] host\n");
+ "usage: ping [-LQRdfnqrv] [-c count] [-i wait] [-I interface]\n\t[-l preload] [-p pattern] [-s packetsize] [-T ttl] host\n");
exit(1);
}
OpenPOWER on IntegriCloud