Our current end-host stack can run either as a kernel module or a user-space daemon, and has been demonstrated on Linux, Mac OS X, and Android. Applications integrate by simply binding a PF_SERVAL BSD socket, and we have also implemented a TCP-to-Serval translator for supporting unmodified clients and/or servers.
Here, we show some preliminary demonstrations of the use of Serval:
- Load Balancing: This website is a demo in itself. It is served by two Serval-enabled Nginx webservers through a translator that proxies TCP traffic to Serval’s TCP-like reliable stream transport. Upon connection to this translator, one of these webservers is selected using anycast resolution of the Serval SYN packet through a local service router, and all subsequent data transfer occurs directly between the translator and the webserver. The resolved server instance is shown at the bottom of this page.
- Client Migration: In this demo, a user is running Serval on his Android phone and streaming Google Music over it while walking through Princeton’s campus (using a TCP-to-Serval translator to work with unmodified Android apps). A user-space program on the phone is monitoring the conditions of ongoing flows and available interfaces, and migrating connections between interfaces when conditions warrant.