The Serval stack has been tested and operated on Linux, BSD (Mac OS X), and Android. It can run either as a kernel module or in user-space. Source code for the alpha release of the stack can be downloaded from github, licensed under the GPLv2.
Preliminary instructions for downloading, building, and running the stack can be found in the accompanying README file, with more up-to-date instructions on the Serval Wiki:
Porting applications to Serval involve replacing their use of PF_INET BSD sockets with PF_SERVAL sockets. We have ported a number of applications, including Firefox, Mongoose, memcached, the apache webserver network runtime, opendns, and iperf. The stack code includes Java bindings for Serval sockets, in addition to standard C system calls.
The TCP-to-Serval (and Serval-to-TCP) translator allows unmodified applications and hosts to communicate with Serval-enabled applications (and vice-versa), by terminating a TCP connection and initiating a Serval stream connection to the remote end-host. The current experimental version of the translator can be found in the test application directory of Serval’s github page.
We have used Serval with translators on the Android platform, particularly to demonstrate the transparently migrate the connections of legacy applications between cellular and WiFi networks. On an Android device, iptables rules direct the traffic to any specified TCP port to a locally-running TCP-to-Serval translator, which connects to a remote Serval-to-TCP translator running in our cluster, which in turn communicates with the original, unmodified destination. A few Android apps (including one for easily loading the Serval module, launching the translator, optionally using UDP encapsulation for NAT traversal, and serviceID selection) can be found in the Android application directory of Serval’s github page.
Emulab/ProtoGENI Host Image
For the convenience of Emulab/ProtoGENI experimenters, we have prepared an Emulab host image that comes with a Serval stack preinstalled. Simply setup an Emulab experiment (see, e.g., the Emulab tutorial at http://users.emulab.net/trac/emulab/wiki/Tutorial) and configure your experiment hosts to use the image name “UBUNTU11-64-Serval-2″.
NSDI’12 Experiment Traces
Download the experiment traces from our NSDI’12 paper. [tar.bz2]