ca76526b11
if it exists.
195 lines
5.1 KiB
Plaintext
195 lines
5.1 KiB
Plaintext
--- bin/aecho/aecho.c.orig Sun Oct 20 07:13:18 1996
|
|
+++ bin/aecho/aecho.c Wed Nov 10 13:57:25 1999
|
|
@@ -29,10 +29,13 @@
|
|
#include <sys/param.h>
|
|
#include <sys/socket.h>
|
|
#include <sys/time.h>
|
|
-#include <sys/errno.h>
|
|
+#include <errno.h>
|
|
|
|
#include <signal.h>
|
|
#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
#include <netdb.h>
|
|
|
|
#include <netatalk/endian.h>
|
|
@@ -44,7 +47,28 @@
|
|
|
|
struct sockaddr_at target;
|
|
int s, nsent = 0, nrecv = 0;
|
|
-long totalms = 0, minms = -1, maxms = -1;
|
|
+time_t totalms = 0, minms = -1, maxms = -1;
|
|
+static unsigned int count = 0;
|
|
+void usage();
|
|
+int atalk_aton();
|
|
+
|
|
+#if !defined( ibm032 ) && !defined( _IBMR2 )
|
|
+ void
|
|
+#endif ibm032 _IBMR2
|
|
+finish()
|
|
+{
|
|
+ if ( nsent > 0 ) {
|
|
+ printf( "\n----%d.%d AEP Statistics----\n",
|
|
+ ntohs( target.sat_addr.s_net ), target.sat_addr.s_node );
|
|
+ printf( "%d packets sent, %d packets received, %d%% packet loss\n",
|
|
+ nsent, nrecv, (( nsent - nrecv ) * 100 ) / nsent );
|
|
+ if ( nrecv > 0 ) {
|
|
+ printf( "round-trip (ms) min/avg/max = %d/%d/%d\n",
|
|
+ minms, totalms / nrecv, maxms );
|
|
+ }
|
|
+ }
|
|
+ exit( 0 );
|
|
+}
|
|
|
|
#if !defined( ibm032 ) && !defined( _IBMR2 )
|
|
void
|
|
@@ -58,7 +82,7 @@
|
|
p = buf;
|
|
*p++ = DDPTYPE_AEP;
|
|
*p++ = AEPOP_REQUEST;
|
|
- bcopy( &seq, p, sizeof( unsigned int ));
|
|
+ memcpy( p, &seq, sizeof( unsigned int ));
|
|
p += sizeof( unsigned int );
|
|
seq++;
|
|
|
|
@@ -66,7 +90,7 @@
|
|
perror( "gettimeofday" );
|
|
exit( 1 );
|
|
}
|
|
- bcopy( &tv, p, sizeof( struct timeval ));
|
|
+ memcpy( p, &tv, sizeof( struct timeval ));
|
|
p += sizeof( struct timeval );
|
|
|
|
if ( sendto( s, buf, p - buf, 0, (struct sockaddr *) &target,
|
|
@@ -75,26 +99,10 @@
|
|
exit( 1 );
|
|
}
|
|
nsent++;
|
|
+ if (count && nsent > count) finish();
|
|
}
|
|
|
|
-#if !defined( ibm032 ) && !defined( _IBMR2 )
|
|
- void
|
|
-#endif ibm032 _IBMR2
|
|
-done()
|
|
-{
|
|
- if ( nsent > 0 ) {
|
|
- printf( "\n----%d.%d AEP Statistics----\n",
|
|
- ntohs( target.sat_addr.s_net ), target.sat_addr.s_node );
|
|
- printf( "%d packets sent, %d packets received, %d%% packet loss\n",
|
|
- nsent, nrecv, (( nsent - nrecv ) * 100 ) / nsent );
|
|
- if ( nrecv > 0 ) {
|
|
- printf( "round-trip (ms) min/avg/max = %d/%d/%d\n",
|
|
- minms, totalms / nrecv, maxms );
|
|
- }
|
|
- }
|
|
- exit( 0 );
|
|
-}
|
|
-
|
|
+int
|
|
main( ac, av )
|
|
int ac;
|
|
char **av;
|
|
@@ -106,14 +114,29 @@
|
|
struct timeval tv, atv;
|
|
struct nbpnve nn;
|
|
char *obj = NULL, *type = "Workstation", *zone = "*";
|
|
- int satlen, cc;
|
|
- unsigned int seq;
|
|
- long ms;
|
|
+ int cc;
|
|
+ unsigned int satlen, seq;
|
|
+ time_t ms;
|
|
char buf[ 1024 ], *p;
|
|
unsigned char port;
|
|
- extern int errno;
|
|
+ extern char *optarg;
|
|
+ extern int optind;
|
|
|
|
- if ( ac != 2 ) usage( av[ 0 ] );
|
|
+ while (( cc = getopt( ac, av, "c:" )) != EOF ) {
|
|
+ switch ( cc ) {
|
|
+ case 'c' :
|
|
+ count = atoi( optarg );
|
|
+ break;
|
|
+
|
|
+ default :
|
|
+ usage( av[ 0 ] );
|
|
+ exit( 1 );
|
|
+ }
|
|
+ }
|
|
+ if ( ac - optind != 1 ) {
|
|
+ usage( av[ 0 ] );
|
|
+ exit( 1 );
|
|
+ }
|
|
|
|
/*
|
|
* Save the port, since nbp_lookup calls getservbyname() to get the
|
|
@@ -125,21 +148,21 @@
|
|
}
|
|
port = ntohs( se->s_port );
|
|
|
|
- bzero( &target, sizeof( struct sockaddr_at ));
|
|
+ memset( &target, 0, sizeof( struct sockaddr_at ));
|
|
#ifdef BSD4_4
|
|
target.sat_len = sizeof( struct sockaddr_at );
|
|
#endif BSD4_4
|
|
target.sat_family = AF_APPLETALK;
|
|
- if ( !atalk_aton( av[ 1 ], &target.sat_addr )) {
|
|
- if ( nbp_name( av[ 1 ], &obj, &type, &zone ) || !obj ) {
|
|
- fprintf( stderr, "Bad name: %s\n", av[ 1 ] );
|
|
+ if ( !atalk_aton( av[ optind ], &target.sat_addr )) {
|
|
+ if ( nbp_name( av[ optind ], &obj, &type, &zone ) || !obj ) {
|
|
+ fprintf( stderr, "Bad name: %s\n", av[ optind ] );
|
|
exit( 1 );
|
|
}
|
|
if ( nbp_lookup( obj, type, zone, &nn, 1 ) <= 0 ) {
|
|
- fprintf( stderr, "Can't find: %s\n", av[ 1 ] );
|
|
+ fprintf( stderr, "Can't find: %s\n", av[ optind ] );
|
|
exit( 1 );
|
|
}
|
|
- bcopy( &nn.nn_sat, &target, sizeof( struct sockaddr_at ));
|
|
+ memcpy( &target, &nn.nn_sat, sizeof( struct sockaddr_at ));
|
|
}
|
|
target.sat_port = port;
|
|
|
|
@@ -157,7 +180,7 @@
|
|
exit( 1 );
|
|
}
|
|
|
|
- sv.sa_handler = done;
|
|
+ sv.sa_handler = finish;
|
|
sigemptyset( &sv.sa_mask );
|
|
sigaddset( &sv.sa_mask, SIGALRM );
|
|
sv.sa_flags = SA_RESTART;
|
|
@@ -197,9 +220,9 @@
|
|
perror( "gettimeofday" );
|
|
exit( 1 );
|
|
}
|
|
- bcopy( p, &seq, sizeof( unsigned int ));
|
|
+ memcpy( &seq, p, sizeof( unsigned int ));
|
|
p += sizeof( unsigned int );
|
|
- bcopy( p, &atv, sizeof( struct timeval ));
|
|
+ memcpy( &atv, p, sizeof( struct timeval ));
|
|
nrecv++;
|
|
ms = ( tv.tv_sec - atv.tv_sec ) * 1000 +
|
|
( tv.tv_usec - atv.tv_usec ) / 1000;
|
|
@@ -213,11 +236,14 @@
|
|
printf( "%d bytes from %u.%u: aep_seq=%d. time=%d. ms\n",
|
|
cc, ntohs( sat.sat_addr.s_net ), sat.sat_addr.s_node,
|
|
seq, ms );
|
|
+ if (count && seq + 1 >= count) finish();
|
|
}
|
|
}
|
|
|
|
+void
|
|
usage( av0 )
|
|
+ char *av0;
|
|
{
|
|
- fprintf( stderr, "Usage:\t%s ( addr | nbpname )\n", av0 );
|
|
+ fprintf( stderr, "Usage:\t%s [-c count ] ( addr | nbpname )\n", av0 );
|
|
exit( 1 );
|
|
}
|