An introduction to the cnet network simulator

cnet is a network simulator which enables experimentation with data-link, network (routing), transport and session layer protocols. With reference to the OSI/ISO Networking Reference Model, cnet provides the Application and Physical layers. Protocols are required to ``fill-in'' any necessary internal layers and, in particular, to overcome the corrupted and lost frames that cnet's Physical Layer randomly introduces. In addition, different Application and Physical Layers may be provided which exhibit varying statistical characteristics of message generation and data transmission. Simulation sizes may range from 2 nodes to a few hundred nodes.

cnet either displays the entire network under Tcl/Tk or runs rather less visually on an ASCII terminal. Under Tcl/Tk cnet provides a graphical representation of the network under execution and permits a number of attributes of the network to be modified while the simulation is running. Nodes may be re-positioned and selected which results in a sub-window being displayed containing the output and statistics of that node. The node's attributes of message rates and sizes may be modified while the network is running by selecting choice buttons. Similarly, the default attributes of all nodes in the network may be simultaneously modified by selecting and changing global attributes. From a menu each node may be forced to reboot, (impolitely) crash, (politely) shutdown and reboot, pause and (hardware) fail.

Selecting a link results in a sub-window being displayed containing statistics for that link. Links are bidirectional, so ``selecting a link'' means clicking on the link near the end of its source. The link-based attributes of costs and probabilities of error may be modified while the network is running by dragging sliders. Similarly, the attributes of all links in the network may be simultaneously modified by selecting and changing global link attributes.

The current node and link attributes (as possibly modified via the windowing interface) are available to each node in C data structures and variables declared in cnet's header file <cnet.h>. These are initialized when each node is rebooted and updated as each node is scheduled for execution. The contents of these data structures are considered as read-only values and not be modified directly by the protocols. They may be successfully modified via the windowing interface.

cnet requires network protocols to be written in either ANSI-C or the K&R programming language and supports their execution within a single UNIX process. Protocols are invoked directly by cnet itself - not interpreted. Protocols do not need to contain any windowing code.


cnet was written and is maintained by Chris McDonald (chris@cs.uwa.edu.au)