add a ping-pong mode. correct a few stupids. add an argument to die() to explain what the error was. Reference: /n/atom/patch/applied/nettest-pingpong Date: Sun May 10 18:25:43 CES 2015 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/nettest.c Sun May 10 18:24:52 2015 +++ /sys/src/cmd/nettest.c Sun May 10 18:24:53 2015 @@ -12,31 +12,30 @@ "01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef" "01234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef"; - uchar flag[127]; -ulong n; -long sleepms; -vlong sleepns; +uint n; +uint sleepms; #define dprint(...) {if(flag['d']) print(__VA_ARGS__);} enum { Blen = 8*1024, + Rlen = 64, }; void usage(void) { - fprint(2, "usage: %s [-l] [-t [-h halg -e encalg]] [-s sleepms] [-n nblocks]\n" - " %s [-t [-h halg -e encalg]] [-a addr] [-s sleepms]\n" - " %s [-t [-h halg -e encalg]] -r addr -n nblocks\n", argv0, argv0, argv0); + fprint(2, "usage: %s -l [-dp] [-t [-h halg -e encalg]] [-s sleepms] [-n nblocks]\n" + " %s [-dp] [-t [-h halg -e encalg]] [-a addr] [-s sleepms]\n" + " %s [-dp] [-t [-h halg -e encalg]] -r addr -n nblocks\n", argv0, argv0, argv0); exits("usage"); } void -die(void) +die(char *s) { - sysfatal("%s: %r", argv0); + sysfatal("%s: %s: %r", argv0, s); } int @@ -65,7 +64,7 @@ void client(void) { - char *dst, b[Blen]; + char *dst, b[Blen], r[Rlen]; int fd, i; atnotify(notef, 1); @@ -74,7 +73,7 @@ dst = ·netmkaddr(raddr, "tcp", service); alarm(3*1000); if((fd = dial(dst, 0, 0, 0)) < 0) - die(); + die("dial"); alarm(0); free(dst); dprint("dialed\n"); @@ -84,8 +83,10 @@ sysfatal("client: pushtls %r"); } for(i = 0; i < n; ++i){ - if(write(fd, b, sizeof b) < 0) - die(); + if(write(fd, b, sizeof b) == -1) + die("write"); + if(flag['p'] && readn(fd, r, sizeof r) != sizeof r) + die("read"); } close(fd); dprint("wrote\n"); @@ -95,8 +96,8 @@ server(void) { int acfd, lcfd, dfd; - char adir[40], ldir[40], b[Blen], *a; - long c; + char adir[40], ldir[40], b[Blen], r[Rlen], *a; + int c; uvlong i, t; double ratemb, maxr, delta; NetConnInfo *nc; @@ -105,15 +106,15 @@ a = ·netmkaddr(laddr, "tcp", service); acfd = announce(a, adir); if(acfd == -1) - die(); + die("announce"); free(a); dprint("listen\n"); if((lcfd = listen(adir, ldir)) < 0) - die(); + die("listen"); dprint("listened\n"); if((dfd = accept(lcfd, ldir)) < 0) - die(); + die("accept"); nc = getnetconninfo(ldir, dfd); dprint("accepted\n"); if(flag['t']){ @@ -126,6 +127,8 @@ c = readn(dfd, b, sizeof b); if(c != sizeof b) break; + if(flag['p'] && write(dfd, r, sizeof r) == -1) + die("write"); if(sleepms) sleep(sleepms); } @@ -140,7 +143,7 @@ ratemb = i/delta/1024/1024; if(sleepms > 0){ maxr = Blen*1000. / sleepms / 1e6; - print("%llud bytes in %g s @ %.2g MB/s (%ldms; limit %.2g MB/s)\n", i, delta, ratemb, sleepms, maxr); + print("%llud bytes in %g s @ %.2g MB/s (%dms; limit %.2g MB/s)\n", i, delta, ratemb, sleepms, maxr); } else print("%llud bytes in %g s @ %.2g MB/s (0ms)\n", i, delta, ratemb); @@ -165,6 +168,7 @@ case 'd': case 'l': case 't': + case 'p': flag[ARGC()] = 1; break; case 'h': @@ -186,7 +190,7 @@ sysfatal("%s: can't find my address", argv0); switch(fork()){ case -1: - die(); + die("fork"); break; case 0: server(); --- /sys/man/8/nettest Sun May 10 18:24:55 2015 +++ /sys/man/8/nettest Sun May 10 18:24:56 2015 @@ -5,6 +5,9 @@ .B nettest .B -l [ +.B -dp +] +[ .B -t [ .B -e @@ -103,6 +106,8 @@ .PP In all modes, TLS may be pushed onto the network file descriptor. The options are +.TF "-s sleepms" +.PD 0 .TP .B -t Enable TLS. @@ -112,6 +117,18 @@ .TP .B "-e \fIencalg\fP" Set the encryption algorithm. The default is clear. +.PP +In all modes, RPC-mode or debugging printing can be enabled. +The options are +.TF "-s sleepms" +.PD 0 +.TP +.B -d +print debugging information +.TP +.B -p +ping-pong. Emulate RPC by sending or expecting +64-byte responses. .SH EXAMPLE To test a reader limited to 8MB/s .IP