mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-15 23:50:44 +00:00
c60dbe4b55
is lighter weight. Increase the granularity of the statistics. Rounding to whole msec isn't accurate enough on a LAN.
118 lines
3.8 KiB
Plaintext
118 lines
3.8 KiB
Plaintext
--- fping.c.orig Mon Sep 20 13:10:23 1999
|
|
+++ fping.c Mon Sep 20 13:15:05 1999
|
|
@@ -185,7 +185,9 @@
|
|
|
|
extern char *optarg;
|
|
extern int optind,opterr;
|
|
+#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
|
|
extern char *sys_errlist[];
|
|
+#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
@@ -234,9 +236,9 @@
|
|
int timeout = DEFAULT_TIMEOUT;
|
|
int interval = DEFAULT_INTERVAL;
|
|
|
|
-long max_reply=0;
|
|
-long min_reply=10000;
|
|
-int total_replies=0;
|
|
+long max_reply=0; /* usec */
|
|
+long min_reply=10000; /* usec */
|
|
+int total_replies=0; /* usec */
|
|
double sum_replies=0;
|
|
|
|
struct timeval timeout_timeval;
|
|
@@ -385,6 +387,7 @@
|
|
}
|
|
if (!ping_file) errno_crash_and_burn("fopen");
|
|
while(fgets(line,132,ping_file)) {
|
|
+ line[132-1] = '\0';
|
|
sscanf(line,"%s",host);
|
|
if ((!*host) || (host[0]=='#')) /* magic to avoid comments */
|
|
continue;
|
|
@@ -411,8 +414,8 @@
|
|
cursor=cursor->next;
|
|
}
|
|
|
|
- gettimeofday(&start_time,&tz);
|
|
cursor=rrlist;
|
|
+ gettimeofday(&start_time,&tz);
|
|
while (num_waiting) { /* while pings are outstanding */
|
|
if ( (timeval_diff(¤t_time,&cursor->last_time)> timeout) ||
|
|
cursor->num_packets_sent==0) {
|
|
@@ -455,11 +458,11 @@
|
|
min_reply=0; max_reply=0; total_replies=1; sum_replies=0;
|
|
}
|
|
|
|
- fprintf(stderr," %8d msec (min round trip time)\n",min_reply);
|
|
- fprintf(stderr," %8d msec (avg round trip time)\n",(int)sum_replies/total_replies);
|
|
- fprintf(stderr," %8d msec (max round trip time)\n",max_reply);
|
|
+ fprintf(stderr," %8.3f msec (min round trip time)\n",min_reply/1000.0);
|
|
+ fprintf(stderr," %8.3f msec (avg round trip time)\n",sum_replies/total_replies/1000.0);
|
|
+ fprintf(stderr," %8.3f msec (max round trip time)\n",max_reply/1000.0);
|
|
fprintf(stderr," %8.3f sec (elapsed real time)\n",
|
|
- timeval_diff( &end_time,&start_time)/1000.0);
|
|
+ timeval_diff( &end_time,&start_time)/1000000.0);
|
|
fprintf(stderr,"\n");
|
|
|
|
}
|
|
@@ -493,8 +496,6 @@
|
|
struct icmp *icp = (struct icmp *) buffer;
|
|
int n,len;
|
|
|
|
- gettimeofday(&h->last_time,&tz);
|
|
-
|
|
icp->icmp_type = ICMP_ECHO;
|
|
icp->icmp_code = 0;
|
|
icp->icmp_cksum = 0;
|
|
@@ -504,12 +505,15 @@
|
|
#define SIZE_PACK_SENT (sizeof(h->num_packets_sent))
|
|
#define SIZE_LAST_TIME (sizeof(h->last_time))
|
|
|
|
- bcopy(&h->last_time,&buffer[SIZE_ICMP_HDR],SIZE_LAST_TIME);
|
|
bcopy(&h->num_packets_sent,
|
|
&buffer[SIZE_ICMP_HDR+SIZE_LAST_TIME], SIZE_PACK_SENT);
|
|
|
|
len = SIZE_ICMP_HDR+SIZE_LAST_TIME+SIZE_PACK_SENT;
|
|
|
|
+ /* set the time at the very last possible point */
|
|
+ gettimeofday(&h->last_time,&tz);
|
|
+ bcopy(&h->last_time,&buffer[SIZE_ICMP_HDR],SIZE_LAST_TIME);
|
|
+
|
|
icp->icmp_cksum = in_cksum( (u_short *)icp, len );
|
|
|
|
n = sendto( s, buffer, len, 0, (struct sockaddr *)&h->saddr,
|
|
@@ -578,10 +582,12 @@
|
|
return 1; /* packet received, don't about it anymore */
|
|
}
|
|
|
|
+ /* get time of receipt as close to the real time as possible */
|
|
+ gettimeofday(¤t_time,&tz);
|
|
+
|
|
n=icp->icmp_seq;
|
|
h=table[n];
|
|
|
|
- gettimeofday(¤t_time,&tz);
|
|
bcopy(&icp->icmp_data[0],&sent_time,sizeof(sent_time));
|
|
bcopy(&icp->icmp_data[SIZE_LAST_TIME],&the_index, sizeof(the_index));
|
|
this_reply = timeval_diff(¤t_time,&sent_time);
|
|
@@ -594,7 +600,7 @@
|
|
if (dns_flag) printf("%s",get_host_by_address(response_addr.sin_addr));
|
|
else printf("%s",h->host);
|
|
if (verbose_flag) printf(" is alive");
|
|
- if (elapsed_flag) printf(" (%d msec)",this_reply);
|
|
+ if (elapsed_flag) printf(" (%.3f msec)",this_reply/1000.0);
|
|
printf("\n");
|
|
}
|
|
num_alive++;
|
|
@@ -756,7 +762,7 @@
|
|
|
|
temp =
|
|
(((a->tv_sec*1000000)+ a->tv_usec) -
|
|
- ((b->tv_sec*1000000)+ b->tv_usec))/1000;
|
|
+ ((b->tv_sec*1000000)+ b->tv_usec));
|
|
|
|
return (long) temp;
|
|
|