In this demo, a user is running Serval on his Android phone and streaming Google Music over it while walking through Princeton’s campus. (The phone runs a TCP-to-Serval translator, and iptable rules redirect all TCP traffic through this translator. We translate the Serval connection back to TCP at another gateway running in our datacenter.)
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. In this below figure, cellular traffic is shown in blue, while Wifi traffic is in green (connected and receiving) and red (connected but not receiving). The opacity of each data point is an indicator of the throughput achieved at that location. Here, Wifi is preferred when it can offer sufficient throughput, as the cellular link is traffic-shaped given cellular bandwidth caps.
The application is running unmodified, and sees no disruption of playback as flows are migrated from cellular to Wifi links, and vice versa. Most of the red areas occur before a switch to cellular as the Android OS has to first shut down the WiFi interface before bringing up the cellular interface, giving a few moments of no connectivity that is unnoticed due to the application’s normal buffering. Doing some rough math, if this walk is done twice a day for twenty days a month, about 2GB of cellular data usage could be saved by using WiFi, which would be the difference between being throttled and not.