Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Jan 1999 22:32:28 +1000 (EST)
From:      Stephen McKay <syssgm@dtir.qld.gov.au>
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Cc:        syssgm@dtir.qld.gov.au
Subject:   bin/9308: [PATCH] Flood ping doesn't flood
Message-ID:  <199901041232.WAA00489@nymph.dtir.qld.gov.au>

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

>Number:         9308
>Category:       bin
>Synopsis:       [PATCH] Flood ping doesn't flood
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jan  4 04:40:00 PST 1999
>Closed-Date:
>Last-Modified:
>Originator:     Stephen McKay
>Release:        FreeBSD 3.0-CURRENT i386
>Organization:
Just me
>Environment:

	2.2.7, 2.2.8, 3.0, -current

>Description:

	Is your flood ping limp and flagging?  Do you remember a day long
	ago when your eyesight was keen and your bones didn't hurt and you
	got more than 50 pings per second from "ping -f"?

	Why, I remember the days of 1500 pings per second!

	You can have those glory days back with this tiny patch:

>How-To-Repeat:

# time ping -c1000 -f localhost 
PING localhost (127.0.0.1): 56 data bytes
.
--- localhost ping statistics ---
1000 packets transmitted, 1000 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.052/0.059/1.299/0.044 ms
ping -c1000 -f localhost  0.04s user 0.43s system 2% cpu 20.017 total
                                                         ^^^^^^

(By the way, the code is trying for 100 pings per second but gets only 50.
This is because timeouts are rounded up in select() and you CAN'T have a
timeout of less than 2 clock ticks.)

(Apply patch and then...)

# time ./ping -c1000 -f localhost 
PING localhost (127.0.0.1): 56 data bytes
.
--- localhost ping statistics ---
1000 packets transmitted, 1000 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.048/0.087/0.198/0.009 ms
./ping -c1000 -f localhost  0.02s user 0.41s system 82% cpu 0.524 total
                                                            ^^^^^

>Fix:
	
Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.41
diff -u -r1.41 ping.c
--- ping.c	1998/08/26 18:51:37	1.41
+++ ping.c	1999/01/04 11:59:16
@@ -553,13 +553,14 @@
 			if (npackets && nreceived >= npackets)
 				break;
 		}
-		if (n == 0) {
+		if (n == 0 || options & F_FLOOD) {
 			if (!npackets || ntransmitted < npackets)
 				pinger();
 			else {
 				if (almost_done)
 					break;
 				almost_done = 1;
+				intvl.tv_usec = 0;
 				if (nreceived) {
 					intvl.tv_sec = 2 * tmax / 1000;
 					if (!intvl.tv_sec)
>Release-Note:
>Audit-Trail:
>Unformatted:

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



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