.. | ||
boxplots | ||
resultcache | ||
__all__.autotests.json | ||
.gitignore | ||
bcube.json | ||
bcube.pdf | ||
bcube.pdf.bw.txt | ||
bcube.py | ||
bcubeswitched.json | ||
bcubeswitched.pdf | ||
bcubeswitched.pdf.bw.txt | ||
bcubeswitched.py | ||
bigtopo.json | ||
bigtopo.pdf | ||
bigtopo.pdf.bw.txt | ||
bigtopo.py | ||
bipartite.json | ||
bipartite.pdf | ||
bipartite.pdf.bw.txt | ||
bipartite.py | ||
clos.json | ||
clos.pdf | ||
clos.pdf.bw.txt | ||
clos.py | ||
clos5.json | ||
clos5.pdf | ||
clos5.pdf.bw.txt | ||
clos5.py | ||
counteriter.py | ||
dcell.json | ||
dcell.pdf | ||
dcell.pdf.bw.txt | ||
dcell.py | ||
dcellswitched.json | ||
dcellswitched.pdf | ||
dcellswitched.pdf.bw.txt | ||
dcellswitched.py | ||
fattree.json | ||
fattree.pdf | ||
fattree.pdf.bw.txt | ||
fattree.py | ||
graphtools.py | ||
grid.json | ||
grid.pdf | ||
grid.pdf.bw.txt | ||
grid.py | ||
id2ip.py | ||
latencycontroller.py | ||
Makefile | ||
principle.json | ||
principle.mn | ||
principle.pdf | ||
principle.py | ||
README.md | ||
requirements.txt | ||
simpletree.json | ||
simpletree.pdf | ||
simpletree.pdf.bw.txt | ||
simpletree.py | ||
sortundirectednodepair.py | ||
topoautostandalonetest.py | ||
topoautotest.py | ||
topoboxplot.py | ||
topocreatebcube.py | ||
topocreatebcubeswitched.py | ||
topocreatebig.py | ||
topocreatebipartite.py | ||
topocreateclos.py | ||
topocreateclos5.py | ||
topocreatedcell.py | ||
topocreatedcellswitched.py | ||
topocreatefattree.py | ||
topocreategrid.py | ||
topocreatesimpletree.py | ||
topomn2json.py | ||
toporender.py | ||
toporenderpdfgraph.py | ||
topotable.py | ||
topoviewer.py | ||
variables.ini |
Mininet+Ryu Routing algorithm Comparator
A bunch of scripts and files that describe topology creation, the topologies, the testing data, real-time graph rendering, table creation and chart creation.
How to replicate these results
- Install Mininet, Ryu and Python3
-
- Untested on Mininet compiled against Python2
-
- Untested on Ryu compiled against Python2
- Either run
pip3 install -r requirements.txt
with enough privileges on your system or install those requirements from your package manager. - Run
make
as root.
Files which are safe to delete
rm -rf boxplots
rm -rf resultcache
rm -rf *.json
rm -rf *.pdf
rm -rf *.pdf.bw.txt
rm -rf *.state
Or, you can simply run make clear
to run them all.
How to add more algorithms to the comparison:
- On
latencycontroller.py
, create your algorithm as a class child of AbstractPathEvaluator (example:MyPathEvaluator
), where you override “__call__(self, ...)
” with your algorithm. - On
latencycontroller.py
, add the class you created as an entry of thepath_evaluators
dict (example: “'my_path_eval': MyPathEvaluator,
”). - Add the key in the previous dict for your class into the
ALGOS
list (example: “'my_path_eval',
”).
That's it.
How to add more topologies to the comparison:
From miniedit
- Create a topology and save it; we're going to use
my_topo.mn
in this example. - Add a recipe to
Makefile
:my_topo.json:
./topomn2json.py my_topo
- Add that same last line to the end of
generatetopos
recipe. - Add add
my_topo.json
as a requirement fortestall
recipe. - Add
my_topo.json
at the end of thetopoautostandalonetest.py
line of thetestall
recipe.
With generator script
- Create a copy from an existing one, such as
topocreatesimpletree.py
. - Give your name to the copy, such as
topocreatemy.py
. - Edit your
topocreatemy.py
to the default value be the name you want, such asmy_topo
. - Edit
create_topo
on yourtopocreatemy.py
to return the topology you want. - Add a recipe to
Makefile
:my_topo.json:
./topocreatemy.py
- Add that same last line to the end of
generatetopos
recipe. - Add add
my_topo.json
as a requirement fortestall
recipe. - Add
my_topo.json
at the end of thetopoautostandalonetest.py
line of thetestall
recipe.
How to visualize the topology
Assumption: you already have a recipe for “my_topo.json
” created and configured on the Makefile
.
For articles
- Run
make my_topo.pdf
.
For presentations, with (almost) real-time updates
- Run
make viewer
.
Your topology will show on screen as soon as your controller starts up.
- About node color meaning:
-
- Light green nodes are hosts.
-
- Pink nodes are switches which weren't already initialized by the controller.
-
- Cyan nodes are switches which were already initialized by the controller.
- About edge color meaning:
-
- If the edge has its green channel on, that edge is connected to a switch which color is light red.
-
- If the edge has its red channel on, that's the route OSPF would choose.
-
- If the edge has its blue channel on, its intensity indicates what fraction of the traffic is being routed on there.
- The node labels indicates the fraction of the link that is being used. As all links are Full-Duplex links, it ranges from 0 to 2.
Starting up the controller:
ryu-manager latencycontroller.py my_topo.json