Are these updates from OAR? Do you want to scope them with #ifdef #endif for RTEMS? Or this is clone-and-own software now?
Why not import from network-demos? On Tue, Jun 8, 2021 at 10:12 AM Stephen Clark <stephen.cl...@oarcorp.com> wrote: > > Updated the TTCP code to match the ttcp.c in RTEMS network-demos > repository (https://git.rtems.org/network-demos/). > --- > rtemsbsd/ttcp/ttcp.c | 91 +++++++++++++++++++++++++++++++------------- > 1 file changed, 65 insertions(+), 26 deletions(-) > > diff --git a/rtemsbsd/ttcp/ttcp.c b/rtemsbsd/ttcp/ttcp.c > index 305a7c7d..dc62c64b 100644 > --- a/rtemsbsd/ttcp/ttcp.c > +++ b/rtemsbsd/ttcp/ttcp.c > @@ -35,8 +35,9 @@ > * Distribution Status - > * Public Domain. Distribution Unlimited. > */ > + > #ifndef lint > -static char RCSid[] = "ttcp.c $Revision$"; > +/* static char RCSid[] = "ttcp.c $Revision$"; */ > #endif > > #define BSD43 > @@ -44,6 +45,8 @@ static char RCSid[] = "ttcp.c $Revision$"; > /* #define BSD41a */ > /* #define SYSV */ /* required on SGI IRIX releases before 3.3 */ > > +#define ENABLE_NANOSLEEP_DELAY > + > #include <stdio.h> > #include <signal.h> > #include <ctype.h> > @@ -54,8 +57,12 @@ static char RCSid[] = "ttcp.c $Revision$"; > #include <netinet/tcp.h> > #include <arpa/inet.h> > #include <netdb.h> > +#include <string.h> > #include <sys/time.h> /* struct timeval */ > > +#include <unistd.h> > +#include <stdlib.h> > + > #if defined(SYSV) > #include <sys/times.h> > #include <sys/param.h> > @@ -71,7 +78,13 @@ struct sockaddr_in sinme; > struct sockaddr_in sinhim; > struct sockaddr_in frominet; > > -int domain, fromlen; > +/* these make it easier to avoid warnings */ > +struct sockaddr *sinhim_p = (struct sockaddr *) &sinhim; > +struct sockaddr *sinme_p = (struct sockaddr *) &sinme; > +struct sockaddr *frominet_p = (struct sockaddr *) &frominet; > + > +int domain; > +socklen_t fromlen; > int fd; /* fd of network socket */ > > int buflen = 8 * 1024; /* length of buffer */ > @@ -97,6 +110,7 @@ char fmt = 'K'; /* output format: k = > kilobits, K = kilobytes, > * m = megabits, M = megabytes, > * g = gigabits, G = gigabytes */ > int touchdata = 0; /* access data after reading */ > +long milliseconds = 0; /* delay in milliseconds */ > > struct hostent *addr; > extern int errno; > @@ -124,6 +138,7 @@ Options specific to -t:\n\ > Options specific to -r:\n\ > -B for -s, only output full blocks as specified by -l (for > TAR)\n\ > -T \"touch\": access each byte as it's read\n\ > + -m ## delay for specified milliseconds between each write\n\ > "; > > char stats[128]; > @@ -133,7 +148,7 @@ double cput, realt; /* user, real time (seconds) > */ > > void err(); > void mes(); > -int pattern(); > +void pattern(); > void prep_timer(); > double read_timer(); > int Nread(); > @@ -147,7 +162,18 @@ sigpipe() > { > } > > -main(argc,argv) > +void millisleep(long msec) > +{ > +#if defined(ENABLE_NANOSLEEP_DELAY) > + struct timespec req; > + > + req.tv_sec = msec / 1000; > + req.tv_nsec = (msec % 1000) * 1000000; > + > + nanosleep( &req, NULL ); > +#endif > +} > +int main(argc,argv) > int argc; > char **argv; > { > @@ -156,7 +182,7 @@ char **argv; > > if (argc < 2) goto usage; > > - while ((c = getopt(argc, argv, "drstuvBDTb:f:l:n:p:A:O:")) != -1) { > + while ((c = getopt(argc, argv, "drstuvBDTb:f:l:m:n:p:A:O:")) != -1) { > switch (c) { > > case 'B': > @@ -179,6 +205,12 @@ char **argv; > "ttcp: -D option ignored: TCP_NODELAY socket option not supported\n"); > #endif > break; > + case 'm': > + milliseconds = atoi(optarg); > + #if !defined(ENABLE_NANOSLEEP_DELAY) > + fprintf(stderr, "millisecond delay > disabled\n"); > + #endif > + break; > case 'n': > nbuf = atoi(optarg); > break; > @@ -285,7 +317,7 @@ char **argv; > err("socket"); > mes("socket"); > > - if (bind(fd, &sinme, sizeof(sinme)) < 0) > + if (bind(fd, sinme_p, sizeof(sinme)) < 0) > err("bind"); > > #if defined(SO_SNDBUF) || defined(SO_RCVBUF) > @@ -305,7 +337,9 @@ char **argv; > #endif > > if (!udp) { > +#if !defined(__rtems__) > signal(SIGPIPE, sigpipe); > +#endif > if (trans) { > /* We are the client if transmitting */ > if (options) { > @@ -326,7 +360,7 @@ char **argv; > mes("nodelay"); > } > #endif > - if(connect(fd, &sinhim, sizeof(sinhim) ) < 0) > + if(connect(fd, sinhim_p, sizeof(sinhim) ) < 0) > err("connect"); > mes("connect"); > } else { > @@ -348,11 +382,11 @@ char **argv; > } > fromlen = sizeof(frominet); > domain = AF_INET; > - if((fd=accept(fd, &frominet, &fromlen) ) < 0) > + if((fd=accept(fd, frominet_p, &fromlen) ) < 0) > err("accept"); > { struct sockaddr_in peer; > - int peerlen = sizeof(peer); > - if (getpeername(fd, (struct sockaddr_in *) &peer, > + socklen_t peerlen = sizeof(peer); > + if (getpeername(fd, (struct sockaddr *) &peer, > &peerlen) < 0) { > err("getpeername"); > } > @@ -368,8 +402,10 @@ char **argv; > if (trans) { > pattern( buf, buflen ); > if(udp) (void)Nwrite( fd, buf, 4 ); /* rcvr start */ > - while (nbuf-- && Nwrite(fd,buf,buflen) == buflen) > + while (nbuf-- && Nwrite(fd,buf,buflen) == buflen) { > nbytes += buflen; > + millisleep( milliseconds ); > + } > if(udp) (void)Nwrite( fd, buf, 4 ); /* rcvr end */ > } else { > if (udp) { > @@ -423,7 +459,7 @@ char **argv; > nbytes, cput, outfmt(nbytes/cput)); > } > fprintf(stdout, > - "ttcp%s: %d I/O calls, msec/call = %.2f, calls/sec = %.2f\n", > + "ttcp%s: %ld I/O calls, msec/call = %.2f, calls/sec = %.2f\n", > trans?"-t":"-r", > numCalls, > 1024.0 * realt/((double)numCalls), > @@ -431,7 +467,7 @@ char **argv; > fprintf(stdout,"ttcp%s: %s\n", trans?"-t":"-r", stats); > if (verbose) { > fprintf(stdout, > - "ttcp%s: buffer address %#x\n", > + "ttcp%s: buffer address %p\n", > trans?"-t":"-r", > buf); > } > @@ -440,6 +476,7 @@ char **argv; > usage: > fprintf(stderr,Usage); > exit(1); > + return 0; > } > > void > @@ -459,7 +496,7 @@ char *s; > fprintf(stderr,"ttcp%s: %s\n", trans?"-t":"-r", s); > } > > -pattern( cp, cnt ) > +void pattern( cp, cnt ) > register char *cp; > register int cnt; > { > @@ -554,6 +591,7 @@ prep_timer() > double > read_timer(str,len) > char *str; > +int len; > { > struct timeval timedol; > struct rusage ru1; > @@ -614,13 +652,13 @@ prusage(r0, r1, e, b, outp) > > case 'U': > tvsub(&tdiff, &r1->ru_utime, &r0->ru_utime); > - sprintf(outp,"%d.%01d", tdiff.tv_sec, > tdiff.tv_usec/100000); > + sprintf(outp,"%ld.%01ld", tdiff.tv_sec, > tdiff.tv_usec/100000); > END(outp); > break; > > case 'S': > tvsub(&tdiff, &r1->ru_stime, &r0->ru_stime); > - sprintf(outp,"%d.%01d", tdiff.tv_sec, > tdiff.tv_usec/100000); > + sprintf(outp,"%ld.%01ld", tdiff.tv_sec, > tdiff.tv_usec/100000); > END(outp); > break; > > @@ -642,18 +680,18 @@ prusage(r0, r1, e, b, outp) > break; > > case 'X': > - sprintf(outp,"%d", t == 0 ? 0 : > (r1->ru_ixrss-r0->ru_ixrss)/t); > + sprintf(outp,"%ld", t == 0 ? 0 : > (r1->ru_ixrss-r0->ru_ixrss)/t); > END(outp); > break; > > case 'D': > - sprintf(outp,"%d", t == 0 ? 0 : > + sprintf(outp,"%ld", t == 0 ? 0 : > > (r1->ru_idrss+r1->ru_isrss-(r0->ru_idrss+r0->ru_isrss))/t); > END(outp); > break; > > case 'K': > - sprintf(outp,"%d", t == 0 ? 0 : > + sprintf(outp,"%ld", t == 0 ? 0 : > ((r1->ru_ixrss+r1->ru_isrss+r1->ru_idrss) - > (r0->ru_ixrss+r0->ru_idrss+r0->ru_isrss))/t); > END(outp); > @@ -743,16 +781,16 @@ register char *cp; > /* > * N R E A D > */ > -Nread( fd, buf, count ) > +int Nread( fd, buf, count ) > int fd; > void *buf; > int count; > { > struct sockaddr_in from; > - int len = sizeof(from); > + socklen_t len = sizeof(from); > register int cnt; > if( udp ) { > - cnt = recvfrom( fd, buf, count, 0, &from, &len ); > + cnt = recvfrom( fd, buf, count, 0, (struct sockaddr *)&from, > &len ); > numCalls++; > } else { > if( b_flag ) > @@ -774,7 +812,7 @@ int count; > /* > * N W R I T E > */ > -Nwrite( fd, buf, count ) > +int Nwrite( fd, buf, count ) > int fd; > void *buf; > int count; > @@ -782,9 +820,10 @@ int count; > register int cnt; > if( udp ) { > again: > - cnt = sendto( fd, buf, count, 0, &sinhim, sizeof(sinhim) ); > + cnt = sendto( fd, buf, count, 0, sinhim_p, sizeof(sinhim) ); > numCalls++; > if( cnt<0 && errno == ENOBUFS ) { > + printf("ttcp: out of buffers -- delaying\n"); /*JRS*/ > delay(18000); > errno = 0; > goto again; > @@ -797,13 +836,13 @@ again: > } > > void > -delay(us) > +delay(int us) > { > struct timeval tv; > > tv.tv_sec = 0; > tv.tv_usec = us; > - (void)select( 1, (char *)0, (char *)0, (char *)0, &tv ); > + (void)select( 1, (fd_set *)0, (fd_set *)0, (fd_set *)0, &tv ); > } > > /* > -- > 2.27.0 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel