The ALF approach used to build ALFred (presented in JSAC'98) results in an architecture where a single process made of the application and its end-to-end transmission control is implemented in the user space of the operating system. This application level process interfaces the network protocols over the in-kernel UDP/IP.
In ALFred each Application Data Unit type has its own requirements in terms of QoS. In other words we can associate quite completely different communication protocols to different data flows. For example in the JukeBox server, the commands "start" a clip or "abort" a clip have to be reliably transmitted whereas the audio clip is more concerned with real-time characteristics. We have decided in the present prototype of ALFred to have one automaton per ADU type and one automaton for the application. This is a first approximation towards a single synchronous automaton that could be entirely written in Esterel.
For the time being the application and its underlying protocols automata communicate via an asynchronous queue. This was done for efficiency purposes. Note that it will be quite simple to integrate the different modules in Esterel: instead of giving the received ADU to an application queue just use a synchronous signal in Esterel to send it to the application module. Then put all the modules in parallel, and modulus some renamings, you will have a single integrated automaton to handle the application and its communication sub-system. The main drawback here is that a synchonized method is needed to run the automaton shared between application and network events handlers. This could dramatically interfere with scheduling of packets in the network. But it should become clear soon, at the light of this current version of the compiler, how to implement this single automaton without altering the scheduling of transmissions.
In our framework the ADUs are represented by Esterel signals that convey values of type the associated ADU type (also declared in the same Esterel module). All the features of the transmission of ADUs are associated to their ADU type. Suppose you have defined a certain ADU type to handle specific data transmission. You have then two choices to packetize your data which are expressed in the way you are naming your ADUs (signal names).
startproc could start some distant procedure and be declared in the type COMMAND. This way you can make complex structures that can be attached to the same
type and hence transmitted on the same flow with the same characteristics.
AUDIO can be declared in the type AUDIO. ALFred will know then that he has to handle byte arrays of length given by the application. In that case the ADU type own only one signal which has exactly the same name than its type
Two sets of requirements can be specified for a given type of transmission.
A high-level set of parameters can be set up by every body, even non-specialists in protocols. We give in the following the current high-level parameters implemented in ALFred and their possible values:
Note that if you select reliable/in-sequence/non real-time/unicast the TCP protocol will be used and if you select non-reliable/out-of-sequence/non-real-time/unicast the UDP protocol will be used.
This first phase should roughly select the protocol mechanisms which seems the most appropriate for the transmission. Then in a second phase, the user can set more detailed parameters concerning more directly the relevant protocol mechanisms. For exemple, in the current version of ALFred you can set the following parameters (not all implemented yet):
The application should in turn adapt to the current conditions of the network for more efficiency. In ALFred the protocols adapt differently to congestion event from the network according to the type of transmission they implement. The congestion event is generaly triggered by the loss parameter and might entail different reactions, for example:
Note that use in ALFred the mechanism developed by Bengt Ahlgren (SICS) to probe the network for the following parameters: