This project has been completed and therefore the project web page is no longer maintained actively. It is mirrored here for historical purposes. Check out www.primessf.net for new development in SSFNet.
DaSSFNet is a C++ implementation of SSFNet, which is a collection of simulation components for modeling communication networks. DaSSFNet is implemented on top of DaSSF, our high-performance parallel simulator. DaSSFNet implements network simulation infrastructure, which helps construct large-scale network models from components like hosts and router. DaSSFNet contains various network protocols, including IP, TCP, UDP, HTTP, etc.
With the support of DaSSF, DaSSFNet is capable of running very large network models both on shared-memory multiprocessors and on distributed-memory clusters. Compared against other network simulators, such as NS and JavaSim, DaSSFNet achieves much better performance both in terms of speed and memory consumption. Its smaller memory footprint and its capability of parallelization make DaSSF amenable to simulating very large network models that have never been achieved before.
In SSFNet, whether it's C++ or Java, one uses Domain Modeling Language or DML to describe the network model. The web site http://www.ssfnet.org contains an excellent tutorial on writing DML models.
DaSSFNet is fully compatible with Java SSFNet. All models written for Java SSFNet can be used by DaSSFNet without modification.
DaSSFNet does have a major setback: there is no routing protocol implemented in DaSSFNet---protocols like BGP and OSPF. Fortunately, DaSSFNet is able to set up the host's forwarding table from DML scripts. The routing table is obtained from running the same model in Java SSFNet. We managed to dump the routing tables for all hosts and routers during the simulation, in DML format. We use the dumped forwarding tables in the DaSSFNet simulation. This obviously create a few problems:
The Java SSFNet which we modified to dump the forwarding table can be obtained by sending request to firstname.lastname@example.org.
We made DaSSFNet and its source code publicly available to all interested researchers. You can use it, copy it, modify it, or redistribute it. There's basically no limitation on what you can do with the software. In doing so, you should understand that we don't have any warranty and liability of any kind whatsoever. We welcome feedbacks from the users. Please send your comments to email@example.com.
The latest version of DaSSFNet is 2.0. Download it from ftp://ftp.cs.dartmouth.edu/pub/jasonliu/ssfnet/dassfnet-2.0.tgz. We don't intend to support earlier versions of DaSSFNet. They are kept on the ftp server only for historical reasons.
Follow the following steps to get DaSSFNet working on your computer:
1. DaSSFNet is implemented on top of DaSSF. To make it work, you need to download and install DaSSF. Go to DaSSF's Home Page and get the latest version of DaSSF.
2. Install DaSSF following the instructions given in DaSSF User's Manual. DaSSFNet requires both --with-ltime-longlong and --with-stl options when configuring DaSSF. The following shows an example of how to install DaSSF after you download it (assuming x.y.z is the version number). The steps may differ on different operating systems.
3. Set the environment variable DaSSF_HOME and point it to the DaSSF's root directory.
4. Untar DaSSFNet into a directory. Type make depend and make to compile it.
5. The result of the compilation is an executable file. If you are building DaSSFNet on a PC/Linux machine, the executable file is named dassf-X86-LINUX. Now, you can run an SSF model (encoded in a DML file, e.g. model.dml) with the following command:
./dassfnet-X86-LINUX start_time end_time model.dmlNote that multiple DML files are allowed as well. Simply list all the file names at the end of the command line.
We use a serious network model as an example to illustrate how to use DaSSFNet for network simulations. The model is a network of more 10,000 hosts and routers. The model has three types of traffic models: one for pure TCP, one for pure UDP, and one for a mixture of TCP and UDP. We are going to run this model on a cluster of ten Linux workstations using MPI. Click here for details.
We prepared a simple tutorial for you to understand the network model:
DaSSFNet was originally implemented by Mehmet Iyigun and Michael Khankin as their undergrad thesis projects with the goal of creating a C++ counterpart of Java SSFNet. Mehmet implemented the network simulation infrastructure; Michael ported TCP. An initial study suggests that DaSSFNet achieves must better performance when compared to the Java counterpart.
DaSSFNet was later revived by Guanhua Yan, who did a lot of work in TCP validation and performance tuning. TCP is a very complicated protocol--easy to understand but hard to make a correct full-fledged implementation. With his effort, the result of DaSSFNet is made consistent with the Java's version.
During the process, Jason Liu helped solved many performance problems. In particular, the original simulator was reorganized in such a way that made possible for running on parallel architectures, both for shared-memory multiprocessors and distributed-memory cluster of workstations. He also ported both UDP and HTTP protocols to DaSSFNet.
The entire project is under the supervision of Professor David M. Nicol.
1. Get to DaSSF's home page at http://www.cs.dartmouth.edu/research/DaSSF/ for detailed information and updates on DaSSF.
2. Guanhua maintains a web page for DaSSFNet at http://www.cs.dartmouth.edu/~ghyan/dassfnet/overview.htm. Check it out.
3. http://www.ssfnet.org is the ultimate resource for research on SSFNet.