diff --git a/comm/termios/ring.termios.c b/comm/termios/ring.termios.c
new file mode 100644
index 0000000000000000000000000000000000000000..2eb49b0dbce49ae5a3c6d1f264871431fe7317c2
--- /dev/null
+++ b/comm/termios/ring.termios.c
@@ -0,0 +1,60 @@
+//
+// ring.termios.c
+//
+// termios communication ring test
+//
+// Neil Gershenfeld 4/4/21
+//
+// This work may be reproduced, modified, distributed,
+// performed, and displayed for any purpose, but must
+// acknowledge this project. Copyright is retained and
+// must be preserved. The work is provided as is; no
+// warranty is provided, and users accept all liability.
+//
+#include <stdio.h>
+#include <fcntl.h>
+#include <termios.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/time.h>
+//
+#define nloop 100
+//
+int main(int argc,char *argv[]) {
+   if (argc != 3) {
+      printf("command line: ring.termios serial_port port_speed\n");
+      return -1;
+      }
+   int speed = atoi(argv[2]);
+   int port = open(argv[1],O_RDWR|O_NOCTTY|O_NDELAY);
+   fcntl(port,F_SETFL,0);
+   struct termios term;
+   tcgetattr(port,&term);
+   term.c_cflag &= ~(PARENB|CSTOPB|CSIZE|CRTSCTS);
+   term.c_cflag |= (CS8|CREAD|CLOCAL);
+   term.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHONL|ISIG);
+   term.c_iflag &= ~(IXON|IXOFF|IXANY|IGNBRK|BRKINT
+      |PARMRK|ISTRIP|INLCR|IGNCR|ICRNL);
+   term.c_oflag &= ~(OPOST|ONLCR);
+   term.c_cc[VTIME] = 0;
+   term.c_cc[VMIN] = 1;
+   cfsetispeed(&term,speed);
+   cfsetospeed(&term,speed);
+   tcsetattr(port,TCSANOW,&term);
+   unsigned char chr = 0;
+   struct timeval start,end;
+   tcflush(port,TCIOFLUSH);
+   gettimeofday(&start,NULL);
+   for (int i = 0; i < nloop; ++i) {
+      while (1) {
+         write(port,&chr,1);
+         read(port,&chr,1);
+         if (chr == 0)
+            break;
+         }
+      }
+   gettimeofday(&end,NULL);
+   printf("byte ring cycles per second: %6.3g\n",nloop*256/((end.tv_sec+end.tv_usec/1e6)-(start.tv_sec+start.tv_usec/1e6)));
+   close(port);
+   return 0; 
+   }
diff --git a/index.html b/index.html
index 93b393a30ef5a9ae93f11db67d995557c96c1dcb..0649d413062c7730b02c197170b4e248f42c0c0f 100644
--- a/index.html
+++ b/index.html
@@ -189,6 +189,14 @@ The communication test measures how quickly two nodes can exchange messages; thi
 <th>date</th>
 </tr>
 
+<tr>
+<td>0.010</td>
+<td><a href=comm/termios/ring.termios.c>i7-8700T, C, termios</a></td>
+<td>USB 2.1</td>
+<td><a href=comm/SerialUSB/ring.SerialUSB.ino>ATSAMD11C, Arduino, SerialUSB</a></td>
+<td>April2021</td>
+</tr>
+
 <tr>
 <td>0.007</td>
 <td><a href=comm/pySerial/ring.pySerial.py>i7-8700T, Python, pySerial</a></td>