Cornell University, Summer 1999
Contents
Obligatory Warning
Use this at your own risk. This code was created with no bad intent or malicious purpose in mind. However,
author(s) assume no responsibility for it's use, misuse, or anything that may go wrong in using it or defects
within it, etc, etc.
General Overview
The Tron library is designed to be a general purpose protocol stack. In its current form, it provides a
sockets-based network layer, a network simulation layer, a simple debugging layer, and a probabilistic
broadcast layer based on pbcast (See the Recommended Reading). A protocl stack
provides a simple way of putting together simple network protocols to provide a powerful network layer,
all the while maintaining the simple interface of the protocol stack. For example, an application can
use a protocol stack with a network layer and pbcast layer. It can then add a "compression layer" at a later
point and all packets would be "compressed" without having to change a thing. The application sends through
the top of the protocol stack and receives in a "Deliver" callback. The protocol stack provides a convenient
interface and the layers provide services.
The Tron library is a programming tool. Although the layers it currently provides can be used to solve many
networking and reliability problems, the framework that it provides is far more useful. It is quite simple
to make new layers and stack them together to solve almost any problem. The tron distribution contains the
entire tron library, as well as three example programs. The bcast program can be used to test whether
directed broadcast is working on a network, but it is also an example of using the protocol stack with only
the network layer. The trontest application is another example of using the protocol stack and uses the
pbcast and debug layers as well. Finally, the tronsim application uses the simulation layer instead of the
network layer, and shows that to an application that makes correct use of the protocol stack interface, whether
or not data is sent on a simulated or actual network does not matter.
Tron was created as an M.Eng project. Its name is from the tron command (tron, troff), or perhaps a
certain Disney movie that inspired many to become computer science students. The name really has nothing
to do with protocol stacks or building reliable network applications.
Building the Tron Files
Creating New Applications Using Tron
Creating a new application that uses the tron.lib library requires the following settings in a Visual Studio 6.0
project file (Under Project->Settings):
*Note that the above settings have to be set for both the Debug and Release settings and differ
where obvious. The trondist directory should be the directory in which the trondist.zip file was unzipped into.
New layer types (cLayer class) can either be added to the tron.lib by adding them into the tron workspace, or created in the new applications workspace.
Known IssuesThe largest known issue with this release is that it may not work properly! Due to either a problem with the local network, or a flaw in the network code (the latter being more likely), the applications that perform multicast experience large interruptions in the receiving stream of packets. It was determined that this occurs somewhere below the network layer. The observed behavior is an arrival stream of packets with no loss or out of order delivery followed by an occasional loss of between 50-150 packets at a time. These are packets that are never received by the multicast listeners, but do appear on the sender's loopback. This causes the pbcast layer to break down, since it can handle loss of a given percentage of packets, but not the loss of a large amount of 100 or so at a time. It is unable to catch up and correctly reports a sequence gap in the delivery stream. If someone were to figure out what is wrong then please email tjb13@cornell.edu. Thanks!
Recommended Reading
Special thanks to Werner Vogels for being my project advisor and lending me time and resources. Thanks also to Dan Dumitriu for all of his help and discussion, and to Robert van Renesse for his assistance. Finally, thanks to all who have worked on probabilistic broadcast and similar ideas. Oh, and thanks Anu whether you know it or not (how would Anu solve this?).
Website created by: Ted Bonkenburg ( tjb13@cornell.edu )