On Tue, Jun 8, 2021, 12:12 PM Gedare Bloom <ged...@rtems.org> wrote: > Are these updates from OAR? Do you want to scope them with #ifdef > #endif for RTEMS? Or this is clone-and-own software now? >
Yes. The code is old a s has warnings which need to be fixed. Because this program gets compiled natively when running benchmarks. It takes a Tx and Rx side to run. One is on your host. I have no idea how to mark things like this The old version was clone and own. This may just be a newer version of that but it needs to run on various hosts and RTEMS. > > Why not import from network-demos? I thought it would be best to do a fresh port using that as guidance so there was less chance of picking up cruft along the way. --joel > > > 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 >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel