This page describes an open-source software tool for the research paper described on the home page.
A primary contribution of our paper is the design and implementation of a novel
simulation architecture and a practical network simulator tool. The simulator
tool has been released as open-source software and has been merged into
Shadow, an open-source network simulation project
hosted on Github. Shadow uses our simulator
design as of
v2.0.0-pre.0 and later.
Because Shadow is actively developed at the time of this writing, it has continued to improve and mature after the conclusion of our research project and publication of our paper. Therefore, there are multiple versions to consider:
If your goal is to use our tool for your own research, then you will likely want to download the latest and greatest version of Shadow following the latest guidance. We refer you to the Shadow website and the Shadow Github page.
Shadow at tag
v2.0.0-pre.4contains the design described in the paper, and this is the version we used to carry out our experiments.
v2.0.0-pre.4can be installed as described in the corresponding documentation or using Docker following our instructions below.
v2.0.0-pre.4is not the most recent version of Shadow, so you should only use it if you are trying to precisely reproduce the results in our paper.
Our paper uses Shadow at tag
pidfd_open syscall: this syscall was added in Linux kernel v5.3
(published on 2019-09-15). Please ensure that your docker host machine is
running Linux v5.3 or later, e.g., using
uname -a. (The lastest version
of Shadow from the Shadow Github page does
pidfd_open and does not have this requirement.)
To install Shadow
v2.0.0-pre.4 using Docker, first
install Docker and
and then run these commands:
git clone https://github.com/netsim-atc2022/netsim-atc2022.github.io.git cd netsim-atc2022.github.io/setup bash build_simulator.sh
Once the above commands complete successfully, you should be able to get a shell in a container with:
docker run \ --privileged \ --tmpfs /dev/shm:rw,nosuid,nodev,exec,size=10g \ -it netsim:simulator \ bash
Once inside the container, you can check that the installation is working:
/phantom/bin/shadow --help /phantom/bin/shadow /root/test.yaml > shadow.log cat shadow.data/hosts/client1/client1.curl.1000.stdout
You should see an HTML directory listing similar to the following:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Directory listing for /</title> </head> <body> <h1>Directory listing for /</h1> <hr> <ul> <li><a href="server.python3.8.1000.shimlog">server.python3.8.1000.shimlog</a></li> <li><a href="server.python3.8.1000.stderr">server.python3.8.1000.stderr</a></li> <li><a href="server.python3.8.1000.stdout">server.python3.8.1000.stdout</a></li> </ul> <hr> </body> </html>
exit to leave the container.