Signed-off-by: Benjamin Hesmans <benjamin.hesmans@uclouvain.be>
This commit is contained in:
Benjamin Hesmans 2015-01-06 15:47:15 +01:00
commit 0974ce2afc
13 changed files with 256 additions and 0 deletions

9
src/conf/topo/0_para_2 Normal file
View File

@ -0,0 +1,9 @@
desc:Simple configuration with two para link
leftSubnet:xxx
rightSubnet:yyy
midSubnet:zzz
#path_x:delay,queueSize(may be calc),bw
error
path_0:10,15,5
path_1:40,10,5
topoType:MultiIf

10
src/conf/topo/1_para_3 Normal file
View File

@ -0,0 +1,10 @@
desc:Simple configuration with two para link
leftSubnet:xxx
rightSubnet:yyy
midSubnet:zzz
#path_x:delay,queueSize(may be calc),bw
error
path_0:10,15,5
path_1:40,10,5
path_2:40,10,5
topoType:MultiIf

View File

View File

@ -0,0 +1,17 @@
class MpLinkCharacteristics:
def __init__(self, id, delay, queueSize, bandwidth):
self.id = id
self.delay = delay
self.queueSize = queueSize
self.bandwidth = bandwidth
def __str__(self):
s = "Link id : " + str(self.id) + "\n"
s = s + "\tDelay : " + str(self.delay) + "\n"
s = s + "\tQueue Size : " + str(self.queueSize) + "\n"
s = s + "\tBandwidth : " + str(self.bandwidth)
return s

5
src/mpMininetBuilder.py Normal file
View File

@ -0,0 +1,5 @@
from mininet.topo import Topo
class MpMininetBuilder(Topo):
def __init__(self):
Topo.__init__( self )

View File

@ -0,0 +1,31 @@
from mpTopo import MpTopo
class MpMultiInterfaceTopo(MpTopo):
def __init__(self, topoBuilder, parameterFile):
MpTopo.__init__(self,topoBuilder, parameterFile)
print("Hello from topo multi if")
self.addHost("Client")
self.addHost("Server")
for l in self.topoParam.linkCharacteristics:
self.addOneSwitchPerLink(l)
def addOneSwitchPerLink(self, link):
self.addSwitch("sw" + str(link.id))
def __str__(self):
s = "Simple multiple interface topolgy \n"
i = 0
n = len(self.topoParam.linkCharacteristics)
for p in self.topoParam.linkCharacteristics:
if i == n // 2:
if n % 2 == 0:
s = s + "c r-----s\n"
s = s + "|-----sw-----|\n"
else:
s = s + "c-----sw-----r-----s\n"
else:
s = s + "|-----sw-----|\n"
i = i + 1
return s

55
src/mpParamTopo.py Normal file
View File

@ -0,0 +1,55 @@
from mpLinkCharacteristics import MpLinkCharacteristics
class MpParamTopo:
def __init__(self, paramFile):
self.paramDic = {}
self.linkCharacteristics = []
print("Create the param Object")
self.loadParamFile(paramFile)
self.loadLinkCharacteristics()
def loadParamFile(self, paramFile):
f = open(paramFile)
i = 0
for l in f:
i = i + 1
if l.startswith("#"):
continue
tab = l.split(":")
if len(tab) == 2:
self.paramDic[tab[0]] = tab[1][:-1]
else:
print("Ignored Line " + str(i))
print(l),
print("In file " + paramFile)
f.close()
def loadLinkCharacteristics(self):
i = 0
for k in self.paramDic:
if k.startswith("path"):
tab = self.paramDic[k].split(",")
if len(tab) == 3:
i = i + 1
path = MpLinkCharacteristics(i,tab[0],
tab[1], tab[2])
self.linkCharacteristics.append(path)
else:
print("Ignored path :")
print(self.paramDic[k])
def getParam(self, key):
if key in self.paramDic:
return self.paramDic[key]
else:
raise Exception("Param not found " + key)
def __str__(self):
s = self.paramDic.__str__()
s = s + "\n"
for p in self.linkCharacteristics[:-1]:
s = s + p.__str__() + "\n"
s = s + self.linkCharacteristics[-1].__str__()
return s

44
src/mpPerf.py Executable file
View File

@ -0,0 +1,44 @@
#!/usr/bin/python
import sys, getopt
from mpParamTopo import MpParamTopo
from mpMultiInterfaceTopo import MpMultiInterfaceTopo
from mpMininetBuilder import MpMininetBuilder
topoParamFile = None
topoType = "mininet"
def printHelp():
print("Help Menu")
def parseArgs(argv):
global topoParamFile
try:
opts, args = getopt.getopt(argv, "hf:", ["topoParam="])
except getopt.GetoptError:
printHelp()
sys.exit(1)
for opt, arg in opts:
if opt == "-h":
printHelp()
sys.exit(1)
elif opt in ("-f","--topoParam"):
print("hllo", arg);
topoParamFile = arg
if __name__ == '__main__':
parseArgs(sys.argv[1:])
if topoParamFile is None:
print("Use command line param")
else:
param = MpParamTopo(topoParamFile)
if topoType == "mininet":
if param.getParam('topoType') == "MultiIf":
mpTopo = MpMultiInterfaceTopo(MpMininetBuilder(), param)
else:
print("Unrecognized topo type")
print(mpTopo)

28
src/mpTopo.py Normal file
View File

@ -0,0 +1,28 @@
class MpTopo:
"""Simple MpTopo"""
def __init__(self, topoBuilder, topoParam):
self.topoBuilder = topoBuilder
self.topoParam = topoParam
def commandTo(self, who, cmd):
pass
def getHost(self, who):
pass
def addHost(self, host):
print("TODO, add host " + host)
self.topoBuilder.addHost(host)
pass
def addSwitch(self, switch):
print("TODO, add switchi " + switch)
self.topoBuilder.addSwitch(switch)
pass
def addLink(self, fromA, toB, **kwargs):
#todo check syntax for **kwargs
self.topoBuilder.addLink(fromA,toB,**kwargs)
pass

9
tex/Makefile Normal file
View File

@ -0,0 +1,9 @@
MAINDOC=main.pdf
MAINDOCSRC= $(MAINDOC:.pdf=.tex)
TEX_FILES= main.tex include/why.tex include/goals.tex
PDFLATEX=pdflatex
all: $(MAINDOC)
$(MAINDOC): $(TEX_FILES)
$(PDFLATEX) $(MAINDOCSRC)

26
tex/include/goals.tex Normal file
View File

@ -0,0 +1,26 @@
\section{Goals}
\subsection{Glob}
It should be easy to test a specific version of MPTCP.
By specific version we mean :
* We should be able to pick a commit
* We should be able to select path manager
* we should be able to express the environment to be tested
- All of them
- a subpart
- just one
- ...
Results should be easy to access without any modifications.
Results should be reproducible : meaning : even configuration and so one should
be some how saved on the repository.
Example of execution
./mpTest --mpCommit xxx --pm yy --pmCommit yyy --conf all
./mpTest --mpCommit xxx --pm yy --pmCommit yyy --conf 42

2
tex/include/why.tex Normal file
View File

@ -0,0 +1,2 @@
\section{Why are we doing this ?}

20
tex/main.tex Normal file
View File

@ -0,0 +1,20 @@
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\title{Tools documentations for MPTCP experiments}
\author{}
\begin{document}
\maketitle
\begin{abstract}
\end{abstract}
\input{include/why}
\input{include/goals}
\end{document}