Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Sep 2001 13:27:29 +0100
From:      Ian Dowse <iedowse@maths.tcd.ie>
To:        freebsd-audit@freebsd.org
Subject:   ping -A
Message-ID:   <200109231327.aa81352@salmon.maths.tcd.ie>

next in thread | raw e-mail | index | archive | help

Some time ago, a '-A' (audible beep when packets are dropped) option
was added to ping in -current only. The logic in its implementation
isn't quite right; once one packet is dropped, it beeps after every
transmission.

Here is a patch that should make it work in a more useful way. It
only outputs a bell when there is an increase in the maximum number
of unreceived packets. This has the benefit that for very long
round-trip times, ping -A will do the right thing after a few
inital false-positives.

Any comments?

Ian

Index: ping.8
===================================================================
RCS file: /dump/FreeBSD-CVS/src/sbin/ping/ping.8,v
retrieving revision 1.32
diff -u -r1.32 ping.8
--- ping.8	7 Aug 2001 15:48:36 -0000	1.32
+++ ping.8	23 Sep 2001 12:11:37 -0000
@@ -32,7 +32,7 @@
 .\"     @(#)ping.8	8.2 (Berkeley) 12/11/93
 .\" $FreeBSD: src/sbin/ping/ping.8,v 1.32 2001/08/07 15:48:36 ru Exp $
 .\"
-.Dd March 1, 1997
+.Dd September 23, 2001
 .Dt PING 8
 .Os
 .Sh NAME
@@ -81,11 +81,14 @@
 .Bl -tag -width indent
 .It Fl A
 Audible.
-Include a bell
+Output a bell
 .Tn ( ASCII
 0x07)
-character in the output when no packet is received before the next packet
+character when no packet is received before the next packet
 is transmitted.
+To cater for round-trip times that are longer than the transmitting
+interval, further missing packets cause a bell only if the maximum
+number of unreceived packets has increased.
 .It Fl a
 Audible.
 Include a bell
Index: ping.c
===================================================================
RCS file: /dump/FreeBSD-CVS/src/sbin/ping/ping.c,v
retrieving revision 1.59
diff -u -r1.59 ping.c
--- ping.c	7 Jul 2001 19:09:21 -0000	1.59
+++ ping.c	23 Sep 2001 11:12:05 -0000
@@ -163,6 +163,7 @@
 long nreceived;			/* # of packets we got back */
 long nrepeats;			/* number of duplicates */
 long ntransmitted;		/* sequence # for outbound packets = #sent */
+long nmissedmax;		/* max value of ntransmitted - nreceived - 1 */
 int interval = 1000;		/* interval between packets, ms */
 
 /* timing */
@@ -706,8 +707,11 @@
 			}
 			(void)gettimeofday(&last, NULL);
 
-			if (ntransmitted != nreceived+1 && options & F_MISSED)
-				(void)write(STDOUT_FILENO, &BBELL, 1);
+			if (ntransmitted - nreceived - 1 > nmissedmax) {
+				nmissedmax = ntransmitted - nreceived - 1;
+				if (options & F_MISSED)
+					(void)write(STDOUT_FILENO, &BBELL, 1);
+			}
 		}
 	}
 	finish();

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi? <200109231327.aa81352>