Today's computer users are mobile. People read e-mail at home and at the office. Laptops can communicate over in-building wireless networks one minute, and be connected to cable networks the next. Users expect to be able to take advantage of whatever communication facilities are available where they are.
The challenge that this presents lies in the widely varying characteristics of these environments. A user who has a 100Mbps ethernet connection at her desk can become frustrated by the poor response time when she uses the same computer over a wireless link, or telephone modem. The goal of the Shoshin wireless group is to address this frustration.

A goal for connecting these separate parts into a cohesive unit is shown above. Consider the example of a web browser application:
Upon initialization, the application registers with the API. First, it requests the nominal throughput of the current connection, and finds that it is 2Mbps. Considering this a slow connection, it sends a request to its proxy that, whenever possible, all images larger than 1KB be converted to black and white. It requests that the API notify it, should the nominal bandwidth change. If the exception handler receives such a notification, it decides whether the new communications device should be handled differently, and sends whatever requests are considered appropriate to the proxy. The exception handler is executing in a different thread from the rest of the client application, so this response will not affect the internal behaviour of the browser in any way.
During operation of the browser, the user might start to download an HTML document. The browser considers this of high priority, since the user is waiting for it; so, after opening a connection to the proxy, it registers the port number with the network traffic manager as a high-priority transfer. Upon receiving and parsing this document, however, several in-line images are identified. These are considered of slightly lower priority so, after opening the connection(s) with the proxy, the port number(s) are registered with the network traffic manager requiring 20% of the nominal bandwidth.
When the network traffic manager receives notification that a port requires a particular transfer rate, it sends a message to its proxy on the network gateway. The proxy will alter the TCP window sizes that are propagated to the outside network from all streams on the managed network, preventing this stream from interfering with other traffic by using more than the required bandwidth, and slowing lower-priority traffic to prevent it from receiving less.
In order to study the effectiveness of our ideas, we have developed some software utilities, and installed hardware to allow both practical and theoretical testing.
The physical networking environment follows (a blowup of the radio portion is also available):

sho-wave net has antennas both on the second floor (outside the CS office) and in the lab. mobile-ip net has its only antenna in the third floor hallway, next to the ICR hardware lab. This configuration allows roaming through much of the Davis Centre, and gives double coverage to the inside of the Shoshin lab, allowing handoffs to be forced without having to walk around. The radio network uses Lucent Technology's WaveLAN. The base stations are WavePOINTs, and the five remote terminals are IBM Thinkpads with WaveLAN and 10base2 Ethernet PCMCIA cards.
Roaming between antennas on a single network is handled by the WaveLAN PCMCIA drivers (under LINUX), and roaming between antennas on different networks is made possible by MobileIP. MobileIP agents exist on sho.net (129.97.40), mobile-ip.net (129.97.246), and sho-wave.net (129.97.228).
It is not always practical, however, to use the physical network to test ideas. For more theoretical (hence, more repeatable) experiments, we have a wireless network simulator. This simulates various classes of traffic sources, and can be used to analyse traffic patterns for CDPD and WaveLAN networks.
We also have a network emulator that alters the behaviour of the ethernet connection of an AIX-based RS6000. By using the results of the simulator to improve the emulator's channel model, and studying the traffic patterns from a user on the emulated machine to improve the simulator's traffic models, these tools are used to improve eachother.
A common source of frustration is incorrect assumptions, made at design-time, about the locations of system bottlenecks. A solution to this problem is to identify multiple possible bottlenecks, decide what behaviour is appropriate in each situation, and have the application chose an appropriate behaviour at run-time. To handle this problem, we have developed a connection-quality daemon.
The connection-quality daemon accepts requests from user-processes, and monitors the desired network characteristics. When these values meet the user-specified criteria, an alert is sent to a second thread in the user-process. This allows the process to change its behaviour, dynamically adapting to changing network conditions. Uses of this daemon are discussed below.