continue refactoring
This commit is contained in:
parent
4fba49baf9
commit
3944b0c193
1
config/xp/ab
Normal file
1
config/xp/ab
Normal file
@ -0,0 +1 @@
|
|||||||
|
xpType:ab
|
@ -1,6 +1,155 @@
|
|||||||
from .parameter import ExperienceParameter
|
from .parameter import Parameter
|
||||||
from topos.multi_interface import MultiInterfaceTopo
|
from topos.multi_interface import MultiInterfaceTopo
|
||||||
|
|
||||||
|
class ExperienceParameter(Parameter):
|
||||||
|
"""
|
||||||
|
Handler for experience parameters stored in configuration files
|
||||||
|
"""
|
||||||
|
RMEM = "rmem"
|
||||||
|
WMEM = "wmem"
|
||||||
|
SCHED = "sched"
|
||||||
|
CC = "congctrl"
|
||||||
|
AUTOCORK = "autocork"
|
||||||
|
EARLYRETRANS = "earlyRetrans"
|
||||||
|
KERNELPM = "kpm"
|
||||||
|
KERNELPMC = "kpmc" #kernel path manager client / server
|
||||||
|
KERNELPMS = "kpms"
|
||||||
|
USERPMC = "upmc"
|
||||||
|
USERPMS = "upms" #userspace path manager client / server
|
||||||
|
USERPMCARGS = "upmc_args"
|
||||||
|
USERPMSARGS = "upms_args"
|
||||||
|
CLIENTPCAP = "clientPcap"
|
||||||
|
SERVERPCAP = "serverPcap"
|
||||||
|
SNAPLENPCAP = "snaplenPcap"
|
||||||
|
XPTYPE = "xpType"
|
||||||
|
PINGCOUNT = "pingCount"
|
||||||
|
NETPERFTESTLEN = "netperfTestlen"
|
||||||
|
NETPERFTESTNAME = "netperfTestname"
|
||||||
|
NETPERFREQRESSIZE = "netperfReqresSize"
|
||||||
|
|
||||||
|
SIRIRUNTIME = "siriRunTime"
|
||||||
|
SIRIQUERYSIZE = "siriQuerySize"
|
||||||
|
SIRIRESPONSESIZE = "siriResponseSize"
|
||||||
|
SIRIDELAYQUERYRESPONSE = "siriDelayQueryResponse"
|
||||||
|
SIRIMINPAYLOADSIZE = "siriMinPayloadSize"
|
||||||
|
SIRIMAXPAYLOADSIZE = "siriMaxPayloadSize"
|
||||||
|
SIRIINTERVALTIMEMS = "siriIntervalTimeMs"
|
||||||
|
SIRIBUFFERSIZE = "siriBufferSize"
|
||||||
|
SIRIBURSTSIZE = "siriBurstSize"
|
||||||
|
SIRIINTERVALBURSTTIMEMS = "siriIntervalBurstTimeMs"
|
||||||
|
VLCFILE = "vlcFile"
|
||||||
|
VLCTIME = "vlcTime"
|
||||||
|
DITGKBYTES = "ditgKBytes"
|
||||||
|
DITGCONSTANTPACKETSIZE = "ditgConstantPacketSize"
|
||||||
|
DITGMEANPOISSONPACKETSSEC = "ditgMeanPoissonPacketsSec"
|
||||||
|
DITGCONSTANTPACKETSSEC = "ditgConstantPacketsSec"
|
||||||
|
DITGBURSTSONPACKETSSEC = "ditgBurstsOnPacketsSec"
|
||||||
|
DITGBURSTSOFFPACKETSSEC = "ditgBurstsOffPacketsSec"
|
||||||
|
MSGCLIENTSLEEP = "msgClientSleep"
|
||||||
|
MSGSERVERSLEEP = "msgServerSleep"
|
||||||
|
MSGNBREQUESTS = "msgNbRequests"
|
||||||
|
MSGBYTES = "msgBytes"
|
||||||
|
QUICMULTIPATH = "quicMultipath"
|
||||||
|
QUICSIRIRUNTIME = "quicSiriRunTime"
|
||||||
|
PRIOPATH0 = "prioPath0"
|
||||||
|
PRIOPATH1 = "prioPath1"
|
||||||
|
BACKUPPATH0 = "backupPath0"
|
||||||
|
BACKUPPATH1 = "backupPath1"
|
||||||
|
EXPIRATION = "expiration"
|
||||||
|
BUFFERAUTOTUNING = "bufferAutotuning"
|
||||||
|
METRIC = "metric"
|
||||||
|
|
||||||
|
|
||||||
|
# Global sysctl keys
|
||||||
|
SYSCTL_KEY = {
|
||||||
|
RMEM: "net.ipv4.tcp_rmem",
|
||||||
|
WMEM: "net.ipv4.tcp_wmem",
|
||||||
|
KERNELPM: "net.mptcp.mptcp_path_manager",
|
||||||
|
SCHED: "net.mptcp.mptcp_scheduler",
|
||||||
|
CC: "net.ipv4.tcp_congestion_control",
|
||||||
|
AUTOCORK: "net.ipv4.tcp_autocorking",
|
||||||
|
EARLYRETRANS: "net.ipv4.tcp_early_retrans",
|
||||||
|
EXPIRATION: "net.mptcp.mptcp_sched_expiration",
|
||||||
|
BUFFERAUTOTUNING: "net.ipv4.tcp_moderate_rcvbuf",
|
||||||
|
}
|
||||||
|
|
||||||
|
# sysctl keys specific to client and server, independently
|
||||||
|
SYSCTL_KEY_CLIENT = {
|
||||||
|
KERNELPMC: "net.mptcp.mptcp_path_manager",
|
||||||
|
}
|
||||||
|
SYSCTL_KEY_SERVER = {
|
||||||
|
KERNELPMS: "net.mptcp.mptcp_path_manager",
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default values for unspecified experience parameters
|
||||||
|
DEFAULT_PARAMETERS = {
|
||||||
|
RMEM: "10240 87380 16777216",
|
||||||
|
WMEM: "4096 16384 4194304",
|
||||||
|
KERNELPM: "fullmesh",
|
||||||
|
KERNELPMC: "fullmesh",
|
||||||
|
KERNELPMS: "fullmesh",
|
||||||
|
USERPMC: "fullmesh",
|
||||||
|
USERPMS: "fullmesh",
|
||||||
|
USERPMCARGS: "",
|
||||||
|
USERPMSARGS: "",
|
||||||
|
CC: "olia",
|
||||||
|
SCHED: "default",
|
||||||
|
AUTOCORK: "1",
|
||||||
|
EARLYRETRANS: "3",
|
||||||
|
EXPIRATION: "300",
|
||||||
|
BUFFERAUTOTUNING: "1",
|
||||||
|
METRIC: "-1",
|
||||||
|
CLIENTPCAP: "no",
|
||||||
|
SERVERPCAP: "no",
|
||||||
|
SNAPLENPCAP: "65535", # Default snapping value of tcpdump
|
||||||
|
XPTYPE: "none",
|
||||||
|
PINGCOUNT: "5",
|
||||||
|
NETPERFTESTLEN: "10",
|
||||||
|
NETPERFTESTNAME: "TCP_RR",
|
||||||
|
NETPERFREQRESSIZE: "2K,256",
|
||||||
|
SIRIQUERYSIZE: "2500",
|
||||||
|
SIRIRESPONSESIZE: "750",
|
||||||
|
SIRIDELAYQUERYRESPONSE: "0",
|
||||||
|
SIRIMINPAYLOADSIZE: "85",
|
||||||
|
SIRIMAXPAYLOADSIZE: "500",
|
||||||
|
SIRIINTERVALTIMEMS: "333",
|
||||||
|
SIRIBUFFERSIZE: "9",
|
||||||
|
SIRIBURSTSIZE: "0",
|
||||||
|
SIRIINTERVALBURSTTIMEMS: "0",
|
||||||
|
VLCFILE: "bunny_ibmff_360.mpd",
|
||||||
|
VLCTIME: "0",
|
||||||
|
DITGKBYTES: "10000",
|
||||||
|
DITGCONSTANTPACKETSIZE: "1428",
|
||||||
|
DITGMEANPOISSONPACKETSSEC: "0",
|
||||||
|
DITGCONSTANTPACKETSSEC: "0",
|
||||||
|
DITGBURSTSONPACKETSSEC: "0",
|
||||||
|
DITGBURSTSOFFPACKETSSEC: "0",
|
||||||
|
MSGCLIENTSLEEP: "5.0",
|
||||||
|
MSGSERVERSLEEP: "5.0",
|
||||||
|
MSGNBREQUESTS: "5",
|
||||||
|
MSGBYTES: "1200",
|
||||||
|
QUICMULTIPATH: "0",
|
||||||
|
PRIOPATH0: "0",
|
||||||
|
PRIOPATH1: "0",
|
||||||
|
BACKUPPATH0: "0",
|
||||||
|
BACKUPPATH1: "0",
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, parameter_filename):
|
||||||
|
super(ExperienceParameter, self).__init__(parameter_filename)
|
||||||
|
self.default_parameters = ExperienceParameter.DEFAULT_PARAMETERS
|
||||||
|
|
||||||
|
def get(self, key):
|
||||||
|
val = super(ExperienceParameter, self).get(key)
|
||||||
|
if val is None:
|
||||||
|
if key in self.default_parameters:
|
||||||
|
return self.default_parameters[key]
|
||||||
|
else:
|
||||||
|
raise Exception("Parameter not found " + key)
|
||||||
|
else:
|
||||||
|
return val
|
||||||
|
|
||||||
|
|
||||||
class Experience(object):
|
class Experience(object):
|
||||||
"""
|
"""
|
||||||
Base class to instantiate an experience to perform.
|
Base class to instantiate an experience to perform.
|
||||||
@ -8,17 +157,34 @@ class Experience(object):
|
|||||||
This class is not instantiable as it. You must define a child class with the
|
This class is not instantiable as it. You must define a child class with the
|
||||||
`NAME` attribute.
|
`NAME` attribute.
|
||||||
|
|
||||||
|
By default, an Experience relies on an instance of ExperienceParameter to
|
||||||
|
collect the parameters from the experience configuration file. However, an
|
||||||
|
experience may introduce specific parameters in the configuration file. In
|
||||||
|
such case, the inherinting class must override the `PARAMETER_CLASS` class
|
||||||
|
variable to point to another class inheriting from ExperienceParameter.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
experience_parameter Instance of ExperienceParameter
|
experience_parameter Instance of ExperienceParameter
|
||||||
topo Instance of Topo
|
topo Instance of Topo
|
||||||
topo_config Instance of TopoConfig
|
topo_config Instance of TopoConfig
|
||||||
"""
|
"""
|
||||||
|
PARAMETER_CLASS = ExperienceParameter
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
self.experience_parameter = experience_parameter
|
"""
|
||||||
|
Instantiation of this base class only load the experience parameter
|
||||||
|
"""
|
||||||
|
self.experience_parameter = self.__class__.PARAMETER_CLASS(experience_parameter_filename)
|
||||||
self.topo = topo
|
self.topo = topo
|
||||||
self.topo_config = topo_config
|
self.topo_config = topo_config
|
||||||
|
|
||||||
|
def load_parameters(self):
|
||||||
|
"""
|
||||||
|
Load the parameter of interest from self.experience_parameter
|
||||||
|
"""
|
||||||
|
# Nothing to do in the base class
|
||||||
|
pass
|
||||||
|
|
||||||
def classic_run(self):
|
def classic_run(self):
|
||||||
"""
|
"""
|
||||||
Default function to perform the experiment. It consists into three phases:
|
Default function to perform the experiment. It consists into three phases:
|
||||||
@ -203,24 +369,24 @@ class Experience(object):
|
|||||||
|
|
||||||
def save_sysctl(self):
|
def save_sysctl(self):
|
||||||
self.sysctlBUP = {}
|
self.sysctlBUP = {}
|
||||||
self._save_sysctl(ExperienceParameter.sysctlKey, self.sysctlBUP)
|
self._save_sysctl(ExperienceParameter.SYSCTL_KEY, self.sysctlBUP)
|
||||||
self.sysctlBUPC = {}
|
self.sysctlBUPC = {}
|
||||||
self._save_sysctl(ExperienceParameter.sysctlKeyClient, self.sysctlBUPC,
|
self._save_sysctl(ExperienceParameter.SYSCTL_KEY_CLIENT, self.sysctlBUPC,
|
||||||
ns = True, who = self.topo_config.client)
|
ns = True, who = self.topo_config.client)
|
||||||
self.sysctlBUPS = {}
|
self.sysctlBUPS = {}
|
||||||
self._save_sysctl(ExperienceParameter.sysctlKeyServer, self.sysctlBUPS,
|
self._save_sysctl(ExperienceParameter.SYSCTL_KEY_SERVER, self.sysctlBUPS,
|
||||||
ns = True, who = self.topo_config.server)
|
ns = True, who = self.topo_config.server)
|
||||||
|
|
||||||
def _save_sysctl(self, sysctlDic, sysctlBUP, ns = False, who = None):
|
def _save_sysctl(self, sysctlDic, sysctlBUP, ns = False, who = None):
|
||||||
for k in sysctlDic:
|
for k in sysctlDic:
|
||||||
sysctlKey = sysctlDic[k]
|
SYSCTL_KEY = sysctlDic[k]
|
||||||
cmd = self.cmdReadSysctl(sysctlKey)
|
cmd = self.cmdReadSysctl(SYSCTL_KEY)
|
||||||
if not ns:
|
if not ns:
|
||||||
val = self.topo.command_global(cmd)
|
val = self.topo.command_global(cmd)
|
||||||
else:
|
else:
|
||||||
val = self.topo.command_to(who, cmd)
|
val = self.topo.command_to(who, cmd)
|
||||||
if val == "Error":
|
if val == "Error":
|
||||||
print("oooops can't get sysctl " + sysctlKey)
|
print("oooops can't get sysctl " + SYSCTL_KEY)
|
||||||
else:
|
else:
|
||||||
# For Python3 compatibility
|
# For Python3 compatibility
|
||||||
if type(val) is bytes:
|
if type(val) is bytes:
|
||||||
@ -238,45 +404,45 @@ class Experience(object):
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
def write_sysctl(self):
|
def write_sysctl(self):
|
||||||
self._write_sysctl(ExperienceParameter.sysctlKey, self.sysctlBUP)
|
self._write_sysctl(ExperienceParameter.SYSCTL_KEY, self.sysctlBUP)
|
||||||
self._write_sysctl(ExperienceParameter.sysctlKeyClient, self.sysctlBUPC,
|
self._write_sysctl(ExperienceParameter.SYSCTL_KEY_CLIENT, self.sysctlBUPC,
|
||||||
ns = True, who = self.topo_config.client)
|
ns = True, who = self.topo_config.client)
|
||||||
self._write_sysctl(ExperienceParameter.sysctlKeyServer, self.sysctlBUPS,
|
self._write_sysctl(ExperienceParameter.SYSCTL_KEY_SERVER, self.sysctlBUPS,
|
||||||
ns = True, who = self.topo_config.server)
|
ns = True, who = self.topo_config.server)
|
||||||
|
|
||||||
def _write_sysctl(self, sysctlDic, sysctlBUP, ns = False, who = None):
|
def _write_sysctl(self, sysctlDic, sysctlBUP, ns = False, who = None):
|
||||||
for k in sysctlBUP:
|
for k in sysctlBUP:
|
||||||
sysctlKey = sysctlDic[k]
|
SYSCTL_KEY = sysctlDic[k]
|
||||||
sysctlValue = self.experience_parameter.get(k)
|
sysctlValue = self.experience_parameter.get(k)
|
||||||
cmd = self.cmd_write_sysctl(sysctlKey,sysctlValue)
|
cmd = self.cmd_write_sysctl(SYSCTL_KEY,sysctlValue)
|
||||||
if not ns:
|
if not ns:
|
||||||
val = self.topo.command_global(cmd)
|
val = self.topo.command_global(cmd)
|
||||||
else:
|
else:
|
||||||
val = self.topo.command_to(who, cmd)
|
val = self.topo.command_to(who, cmd)
|
||||||
if val == "Error":
|
if val == "Error":
|
||||||
print("oooops can't set sysctl " + sysctlKey)
|
print("oooops can't set sysctl " + SYSCTL_KEY)
|
||||||
|
|
||||||
|
|
||||||
def backUpSysctl(self):
|
def backUpSysctl(self):
|
||||||
self._backUpSysctl(ExperienceParameter.sysctlKey, self.sysctlBUP)
|
self._backUpSysctl(ExperienceParameter.SYSCTL_KEY, self.sysctlBUP)
|
||||||
self._backUpSysctl(ExperienceParameter.sysctlKeyClient, self.sysctlBUPC,
|
self._backUpSysctl(ExperienceParameter.SYSCTL_KEY_CLIENT, self.sysctlBUPC,
|
||||||
ns = True, who = self.topo_config.client)
|
ns = True, who = self.topo_config.client)
|
||||||
self._backUpSysctl(ExperienceParameter.sysctlKeyServer, self.sysctlBUPS,
|
self._backUpSysctl(ExperienceParameter.SYSCTL_KEY_SERVER, self.sysctlBUPS,
|
||||||
ns = True, who = self.topo_config.server)
|
ns = True, who = self.topo_config.server)
|
||||||
|
|
||||||
|
|
||||||
def _backUpSysctl(self, sysctlDic, sysctlBUP, ns = False, who = None):
|
def _backUpSysctl(self, sysctlDic, sysctlBUP, ns = False, who = None):
|
||||||
for k in sysctlBUP:
|
for k in sysctlBUP:
|
||||||
sysctlKey = sysctlDic[k]
|
SYSCTL_KEY = sysctlDic[k]
|
||||||
sysctlValue = sysctlBUP[k]
|
sysctlValue = sysctlBUP[k]
|
||||||
cmd = self.cmd_write_sysctl(sysctlKey,sysctlValue)
|
cmd = self.cmd_write_sysctl(SYSCTL_KEY,sysctlValue)
|
||||||
if not ns:
|
if not ns:
|
||||||
val = self.topo.command_global(cmd)
|
val = self.topo.command_global(cmd)
|
||||||
else:
|
else:
|
||||||
val = self.topo.command_to(who, cmd)
|
val = self.topo.command_to(who, cmd)
|
||||||
|
|
||||||
if val == "Error":
|
if val == "Error":
|
||||||
print("oooops can't set sysctl " + sysctlKey)
|
print("oooops can't set sysctl " + SYSCTL_KEY)
|
||||||
|
|
||||||
|
|
||||||
def runTcpDump(self):
|
def runTcpDump(self):
|
||||||
@ -292,3 +458,48 @@ class Experience(object):
|
|||||||
"tcpdump -i any -s " + snaplenpcap + " -w server.pcap &")
|
"tcpdump -i any -s " + snaplenpcap + " -w server.pcap &")
|
||||||
if spcap == "yes" or cpcap == "yes":
|
if spcap == "yes" or cpcap == "yes":
|
||||||
self.topo.command_to(self.topo_config.client,"sleep 5")
|
self.topo.command_to(self.topo_config.client,"sleep 5")
|
||||||
|
|
||||||
|
|
||||||
|
class RandomFileParameter(ExperienceParameter):
|
||||||
|
"""
|
||||||
|
Parameters for the RandomFileExperience
|
||||||
|
"""
|
||||||
|
FILE = "file" # file to fetch; if random, we create a file with random data called random.
|
||||||
|
RANDOM_SIZE = "file_size" # in KB
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename):
|
||||||
|
super(RandomFileParameter, self).__init__(experience_parameter_filename)
|
||||||
|
self.default_parameters.update({
|
||||||
|
RandomFileParameter.FILE: "random",
|
||||||
|
RandomFileParameter.RANDOM_SIZE: "1024",
|
||||||
|
})
|
||||||
|
|
||||||
|
class RandomFileExperience(Experience):
|
||||||
|
"""
|
||||||
|
Enable a experience to use random files
|
||||||
|
|
||||||
|
This class is not directly instantiable
|
||||||
|
"""
|
||||||
|
PARAMETER_CLASS = RandomFileParameter
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
|
super(RandomFileExperience, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
|
self.load_parameters()
|
||||||
|
self.ping()
|
||||||
|
super(RandomFileExperience, self).classic_run()
|
||||||
|
|
||||||
|
def load_parameters(self):
|
||||||
|
super(RandomFileExperience, self).load_parameters()
|
||||||
|
self.file = self.experience_parameter.get(RandomFileParameter.FILE)
|
||||||
|
self.random_size = self.experience_parameter.get(RandomFileParameter.RANDOM_SIZE)
|
||||||
|
|
||||||
|
def prepare(self):
|
||||||
|
super(RandomFileExperience, self).prepare()
|
||||||
|
if self.file == "random":
|
||||||
|
self.topo.command_to(self.topo_config.client,
|
||||||
|
"dd if=/dev/urandom of=random bs=1K count={}".format(self.random_size))
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
super(RandomFileExperience, self).clean()
|
||||||
|
if self.file == "random":
|
||||||
|
self.topo.command_to(self.topo_config.client, "rm random*")
|
||||||
|
@ -1,223 +1,45 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
class Parameter(object):
|
class Parameter(object):
|
||||||
def __init__(self, paramFile):
|
"""
|
||||||
self.paramDic = {}
|
Generic handler for parameters stored in configuration files
|
||||||
print("Create the param Object")
|
|
||||||
if paramFile is None:
|
Attributes:
|
||||||
print("default param...")
|
parameters dictionary containing the value for configuration parameters
|
||||||
|
"""
|
||||||
|
def __init__(self, parameter_filename):
|
||||||
|
self.parameters = {}
|
||||||
|
if parameter_filename is None:
|
||||||
|
logging.warning("No parameter file provided; using default parameters")
|
||||||
else:
|
else:
|
||||||
self.loadParamFile(paramFile)
|
logging.info("Extract parameters from file {}".format(parameter_filename))
|
||||||
|
self.load_parameter_file(parameter_filename)
|
||||||
|
|
||||||
def loadParamFile(self, paramFile):
|
def load_parameter_file(self, parameter_filename):
|
||||||
f = open(paramFile)
|
with open(parameter_filename) as f:
|
||||||
i = 0
|
for line in f.readlines():
|
||||||
for l in f:
|
# Ignore comments
|
||||||
i = i + 1
|
if line.startswith("#"):
|
||||||
if l.startswith("#"):
|
continue
|
||||||
continue
|
|
||||||
|
|
||||||
tab = l.split(":")
|
try:
|
||||||
if len(tab) == 2:
|
# Also get rid of trailing characters
|
||||||
k = tab[0]
|
key, value = line.strip().split(":")
|
||||||
val = tab[1].rstrip()
|
if key in self.parameters:
|
||||||
if k in self.paramDic:
|
if not isinstance(self.parameters[key], list):
|
||||||
if not isinstance(self.paramDic[k], list):
|
self.parameters[key] = [self.parameters[key]]
|
||||||
self.paramDic[k] = [self.paramDic[k]]
|
self.parameters[key].append(value)
|
||||||
self.paramDic[k].append(val)
|
else:
|
||||||
else:
|
self.parameters[key] = value
|
||||||
self.paramDic[k] = val
|
except ValueError as e:
|
||||||
else:
|
logging.warning(
|
||||||
print("Ignored Line " + str(i))
|
"Got error '{}' for line '{}'; ignore it".format(e, line))
|
||||||
print(l),
|
|
||||||
print("In file " + paramFile)
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
def get(self, key):
|
def get(self, key):
|
||||||
if key in self.paramDic:
|
"""
|
||||||
return self.paramDic[key]
|
Get the parameter with key `key`. If it does not exist, return None
|
||||||
return None
|
"""
|
||||||
|
return self.parameters.get(key)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
s = self.paramDic.__str__()
|
return self.parameters.__str__()
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
class ExperienceParameter(Parameter):
|
|
||||||
|
|
||||||
RMEM = "rmem"
|
|
||||||
WMEM = "wmem"
|
|
||||||
SCHED = "sched"
|
|
||||||
CC = "congctrl"
|
|
||||||
AUTOCORK = "autocork"
|
|
||||||
EARLYRETRANS = "earlyRetrans"
|
|
||||||
KERNELPM = "kpm"
|
|
||||||
KERNELPMC = "kpmc" #kernel path manager client / server
|
|
||||||
KERNELPMS = "kpms"
|
|
||||||
USERPMC = "upmc"
|
|
||||||
USERPMS = "upms" #userspace path manager client / server
|
|
||||||
USERPMCARGS = "upmc_args"
|
|
||||||
USERPMSARGS = "upms_args"
|
|
||||||
CLIENTPCAP = "clientPcap"
|
|
||||||
SERVERPCAP = "serverPcap"
|
|
||||||
SNAPLENPCAP = "snaplenPcap"
|
|
||||||
XPTYPE = "xpType"
|
|
||||||
PINGCOUNT = "pingCount"
|
|
||||||
DDIBS = "ddIBS"
|
|
||||||
DDOBS = "ddIBS"
|
|
||||||
DDCOUNT = "ddCount"
|
|
||||||
PVRATELIMIT= "pvRateLimit"
|
|
||||||
PVG = "pvG" #patched version of pv
|
|
||||||
PVZ = "pvZ"
|
|
||||||
NCSERVERPORT = "ncServerPort"
|
|
||||||
NCCLIENTPORT = "ncClientPort"
|
|
||||||
CHANGEPV = "changePv"
|
|
||||||
CHANGEPVAT = "changePvAt"
|
|
||||||
HTTPSFILE = "file" # file to wget, if random : we create a file with random data called random.
|
|
||||||
HTTPSRANDOMSIZE = "file_size" # if file is set to random, define the size of the random file
|
|
||||||
EPLOADTESTDIR = "epload_test_dir"
|
|
||||||
HTTPFILE = "http_file"
|
|
||||||
HTTPRANDOMSIZE = "http_file_size"
|
|
||||||
NETPERFTESTLEN = "netperfTestlen"
|
|
||||||
NETPERFTESTNAME = "netperfTestname"
|
|
||||||
NETPERFREQRESSIZE = "netperfReqresSize"
|
|
||||||
ABCONCURRENTREQUESTS = "abConccurentRequests"
|
|
||||||
ABTIMELIMIT = "abTimelimit"
|
|
||||||
SIRIRUNTIME = "siriRunTime"
|
|
||||||
SIRIQUERYSIZE = "siriQuerySize"
|
|
||||||
SIRIRESPONSESIZE = "siriResponseSize"
|
|
||||||
SIRIDELAYQUERYRESPONSE = "siriDelayQueryResponse"
|
|
||||||
SIRIMINPAYLOADSIZE = "siriMinPayloadSize"
|
|
||||||
SIRIMAXPAYLOADSIZE = "siriMaxPayloadSize"
|
|
||||||
SIRIINTERVALTIMEMS = "siriIntervalTimeMs"
|
|
||||||
SIRIBUFFERSIZE = "siriBufferSize"
|
|
||||||
SIRIBURSTSIZE = "siriBurstSize"
|
|
||||||
SIRIINTERVALBURSTTIMEMS = "siriIntervalBurstTimeMs"
|
|
||||||
VLCFILE = "vlcFile"
|
|
||||||
VLCTIME = "vlcTime"
|
|
||||||
DITGKBYTES = "ditgKBytes"
|
|
||||||
DITGCONSTANTPACKETSIZE = "ditgConstantPacketSize"
|
|
||||||
DITGMEANPOISSONPACKETSSEC = "ditgMeanPoissonPacketsSec"
|
|
||||||
DITGCONSTANTPACKETSSEC = "ditgConstantPacketsSec"
|
|
||||||
DITGBURSTSONPACKETSSEC = "ditgBurstsOnPacketsSec"
|
|
||||||
DITGBURSTSOFFPACKETSSEC = "ditgBurstsOffPacketsSec"
|
|
||||||
IPERFTIME = "iperfTime"
|
|
||||||
IPERFPARALLEL = "iperfParallel"
|
|
||||||
MSGCLIENTSLEEP = "msgClientSleep"
|
|
||||||
MSGSERVERSLEEP = "msgServerSleep"
|
|
||||||
MSGNBREQUESTS = "msgNbRequests"
|
|
||||||
MSGBYTES = "msgBytes"
|
|
||||||
QUICMULTIPATH = "quicMultipath"
|
|
||||||
QUICSIRIRUNTIME = "quicSiriRunTime"
|
|
||||||
PRIOPATH0 = "prioPath0"
|
|
||||||
PRIOPATH1 = "prioPath1"
|
|
||||||
BACKUPPATH0 = "backupPath0"
|
|
||||||
BACKUPPATH1 = "backupPath1"
|
|
||||||
EXPIRATION = "expiration"
|
|
||||||
BUFFERAUTOTUNING = "bufferAutotuning"
|
|
||||||
METRIC = "metric"
|
|
||||||
|
|
||||||
|
|
||||||
# global sysctl
|
|
||||||
sysctlKey = {}
|
|
||||||
sysctlKey[RMEM] = "net.ipv4.tcp_rmem"
|
|
||||||
sysctlKey[WMEM] = "net.ipv4.tcp_wmem"
|
|
||||||
sysctlKey[KERNELPM] = "net.mptcp.mptcp_path_manager"
|
|
||||||
sysctlKey[SCHED] = "net.mptcp.mptcp_scheduler"
|
|
||||||
sysctlKey[CC] = "net.ipv4.tcp_congestion_control"
|
|
||||||
sysctlKey[AUTOCORK] = "net.ipv4.tcp_autocorking"
|
|
||||||
sysctlKey[EARLYRETRANS] = "net.ipv4.tcp_early_retrans"
|
|
||||||
sysctlKey[EXPIRATION] = "net.mptcp.mptcp_sched_expiration"
|
|
||||||
sysctlKey[BUFFERAUTOTUNING] = "net.ipv4.tcp_moderate_rcvbuf"
|
|
||||||
|
|
||||||
|
|
||||||
sysctlKeyClient = {}
|
|
||||||
sysctlKeyClient[KERNELPMC] = "net.mptcp.mptcp_path_manager"
|
|
||||||
sysctlKeyServer = {}
|
|
||||||
sysctlKeyServer[KERNELPMS] = "net.mptcp.mptcp_path_manager"
|
|
||||||
|
|
||||||
defaultValue = {}
|
|
||||||
|
|
||||||
defaultValue[RMEM] = "10240 87380 16777216"
|
|
||||||
defaultValue[WMEM] = "4096 16384 4194304"
|
|
||||||
defaultValue[KERNELPM] = "fullmesh"
|
|
||||||
defaultValue[KERNELPMC] = "fullmesh"
|
|
||||||
defaultValue[KERNELPMS] = "fullmesh"
|
|
||||||
defaultValue[USERPMC] = "fullmesh"
|
|
||||||
defaultValue[USERPMS] = "fullmesh"
|
|
||||||
defaultValue[USERPMCARGS] = ""
|
|
||||||
defaultValue[USERPMSARGS] = ""
|
|
||||||
defaultValue[CC] = "olia"
|
|
||||||
defaultValue[SCHED] = "default"
|
|
||||||
defaultValue[AUTOCORK] = "1"
|
|
||||||
defaultValue[EARLYRETRANS] = "3"
|
|
||||||
defaultValue[EXPIRATION] = "300"
|
|
||||||
defaultValue[BUFFERAUTOTUNING] = "1"
|
|
||||||
defaultValue[METRIC] = "-1"
|
|
||||||
|
|
||||||
defaultValue[CLIENTPCAP] = "no"
|
|
||||||
defaultValue[SERVERPCAP] = "no"
|
|
||||||
defaultValue[SNAPLENPCAP] = "65535" # Default snapping value of tcpdump
|
|
||||||
defaultValue[XPTYPE] = "none"
|
|
||||||
defaultValue[PINGCOUNT] = "5"
|
|
||||||
defaultValue[DDIBS] = "1k"
|
|
||||||
defaultValue[DDOBS] = "1k"
|
|
||||||
defaultValue[DDCOUNT] = "5000" #5k * 1k = 5m
|
|
||||||
defaultValue[PVRATELIMIT] = "400k"
|
|
||||||
defaultValue[PVZ] = "10000"
|
|
||||||
defaultValue[PVG] = "10000"
|
|
||||||
defaultValue[NCSERVERPORT] = "33666"
|
|
||||||
defaultValue[NCCLIENTPORT] = "33555"
|
|
||||||
defaultValue[CHANGEPV] = "no"
|
|
||||||
defaultValue[HTTPSFILE] = "random"
|
|
||||||
defaultValue[HTTPSRANDOMSIZE] = "1024"
|
|
||||||
defaultValue[EPLOADTESTDIR] = "/bla/bla/bla"
|
|
||||||
defaultValue[HTTPFILE] = "random"
|
|
||||||
defaultValue[HTTPRANDOMSIZE] = "1024"
|
|
||||||
defaultValue[NETPERFTESTLEN] = "10"
|
|
||||||
defaultValue[NETPERFTESTNAME] = "TCP_RR"
|
|
||||||
defaultValue[NETPERFREQRESSIZE] = "2K,256"
|
|
||||||
defaultValue[ABCONCURRENTREQUESTS] = "50"
|
|
||||||
defaultValue[ABTIMELIMIT] = "20"
|
|
||||||
defaultValue[SIRIQUERYSIZE] = "2500"
|
|
||||||
defaultValue[SIRIRESPONSESIZE] = "750"
|
|
||||||
defaultValue[SIRIDELAYQUERYRESPONSE] = "0"
|
|
||||||
defaultValue[SIRIMINPAYLOADSIZE] = "85"
|
|
||||||
defaultValue[SIRIMAXPAYLOADSIZE] = "500"
|
|
||||||
defaultValue[SIRIINTERVALTIMEMS] = "333"
|
|
||||||
defaultValue[SIRIBUFFERSIZE] = "9"
|
|
||||||
defaultValue[SIRIBURSTSIZE] = "0"
|
|
||||||
defaultValue[SIRIINTERVALBURSTTIMEMS] = "0"
|
|
||||||
defaultValue[VLCFILE] = "bunny_ibmff_360.mpd"
|
|
||||||
defaultValue[VLCTIME] = "0"
|
|
||||||
defaultValue[DITGKBYTES] = "10000"
|
|
||||||
defaultValue[DITGCONSTANTPACKETSIZE] = "1428"
|
|
||||||
defaultValue[DITGMEANPOISSONPACKETSSEC] = "0"
|
|
||||||
defaultValue[DITGCONSTANTPACKETSSEC] = "0"
|
|
||||||
defaultValue[DITGBURSTSONPACKETSSEC] = "0"
|
|
||||||
defaultValue[DITGBURSTSOFFPACKETSSEC] = "0"
|
|
||||||
defaultValue[IPERFTIME] = "10"
|
|
||||||
defaultValue[IPERFPARALLEL] = "1"
|
|
||||||
defaultValue[MSGCLIENTSLEEP] = "5.0"
|
|
||||||
defaultValue[MSGSERVERSLEEP] = "5.0"
|
|
||||||
defaultValue[MSGNBREQUESTS] = "5"
|
|
||||||
defaultValue[MSGBYTES] = "1200"
|
|
||||||
defaultValue[QUICMULTIPATH] = "0"
|
|
||||||
defaultValue[PRIOPATH0] = "0"
|
|
||||||
defaultValue[PRIOPATH1] = "0"
|
|
||||||
defaultValue[BACKUPPATH0] = "0"
|
|
||||||
defaultValue[BACKUPPATH1] = "0"
|
|
||||||
|
|
||||||
def __init__(self, paramFile):
|
|
||||||
super(ExperienceParameter, self).__init__(paramFile)
|
|
||||||
|
|
||||||
def get(self, key):
|
|
||||||
val = super(ExperienceParameter, self).get(key)
|
|
||||||
if val is None:
|
|
||||||
if key in ExperienceParameter.defaultValue:
|
|
||||||
return ExperienceParameter.defaultValue[key]
|
|
||||||
else:
|
|
||||||
raise Exception("Parameter not found " + key)
|
|
||||||
else:
|
|
||||||
return val
|
|
||||||
|
|
||||||
|
|
||||||
|
26
core/topo.py
26
core/topo.py
@ -119,13 +119,13 @@ class TopoParameter(Parameter):
|
|||||||
RSUBNET = "rightSubnet"
|
RSUBNET = "rightSubnet"
|
||||||
netemAt = "netemAt_"
|
netemAt = "netemAt_"
|
||||||
changeNetem = "changeNetem"
|
changeNetem = "changeNetem"
|
||||||
defaultValue = {}
|
DEFAULT_PARAMETERS = {}
|
||||||
defaultValue[LSUBNET] = "10.1."
|
DEFAULT_PARAMETERS[LSUBNET] = "10.1."
|
||||||
defaultValue[RSUBNET] = "10.2."
|
DEFAULT_PARAMETERS[RSUBNET] = "10.2."
|
||||||
defaultValue[changeNetem] = "false"
|
DEFAULT_PARAMETERS[changeNetem] = "false"
|
||||||
|
|
||||||
def __init__(self, paramFile):
|
def __init__(self, parameter_filename):
|
||||||
Parameter.__init__(self, paramFile)
|
Parameter.__init__(self, parameter_filename)
|
||||||
self.linkCharacteristics = []
|
self.linkCharacteristics = []
|
||||||
self.loadLinkCharacteristics()
|
self.loadLinkCharacteristics()
|
||||||
self.loadNetemAt()
|
self.loadNetemAt()
|
||||||
@ -134,10 +134,10 @@ class TopoParameter(Parameter):
|
|||||||
def loadNetemAt(self):
|
def loadNetemAt(self):
|
||||||
if not self.get(TopoParameter.changeNetem) == "yes":
|
if not self.get(TopoParameter.changeNetem) == "yes":
|
||||||
return
|
return
|
||||||
for k in sorted(self.paramDic):
|
for k in sorted(self.parameters):
|
||||||
if k.startswith(TopoParameter.netemAt):
|
if k.startswith(TopoParameter.netemAt):
|
||||||
i = int(k[len(TopoParameter.netemAt):])
|
i = int(k[len(TopoParameter.netemAt):])
|
||||||
val = self.paramDic[k]
|
val = self.parameters[k]
|
||||||
if not isinstance(val, list):
|
if not isinstance(val, list):
|
||||||
tmp = val
|
tmp = val
|
||||||
val = []
|
val = []
|
||||||
@ -159,9 +159,9 @@ class TopoParameter(Parameter):
|
|||||||
|
|
||||||
def loadLinkCharacteristics(self):
|
def loadLinkCharacteristics(self):
|
||||||
i = 0
|
i = 0
|
||||||
for k in sorted(self.paramDic):
|
for k in sorted(self.parameters):
|
||||||
if k.startswith("path"):
|
if k.startswith("path"):
|
||||||
tab = self.paramDic[k].split(",")
|
tab = self.parameters[k].split(",")
|
||||||
bup = False
|
bup = False
|
||||||
loss = "0.0"
|
loss = "0.0"
|
||||||
if len(tab) == 5:
|
if len(tab) == 5:
|
||||||
@ -180,13 +180,13 @@ class TopoParameter(Parameter):
|
|||||||
i = i + 1
|
i = i + 1
|
||||||
else:
|
else:
|
||||||
print("Ignored path :")
|
print("Ignored path :")
|
||||||
print(self.paramDic[k])
|
print(self.parameters[k])
|
||||||
|
|
||||||
def get(self, key):
|
def get(self, key):
|
||||||
val = Parameter.get(self, key)
|
val = Parameter.get(self, key)
|
||||||
if val is None:
|
if val is None:
|
||||||
if key in TopoParameter.defaultValue:
|
if key in TopoParameter.DEFAULT_PARAMETERS:
|
||||||
return TopoParameter.defaultValue[key]
|
return TopoParameter.DEFAULT_PARAMETERS[key]
|
||||||
else:
|
else:
|
||||||
raise Exception("Param not found " + key)
|
raise Exception("Param not found " + key)
|
||||||
else:
|
else:
|
||||||
|
@ -8,4 +8,14 @@ pkg_dir = os.path.dirname(__file__)
|
|||||||
for (module_loader, name, ispkg) in pkgutil.iter_modules([pkg_dir]):
|
for (module_loader, name, ispkg) in pkgutil.iter_modules([pkg_dir]):
|
||||||
importlib.import_module('.' + name, __package__)
|
importlib.import_module('.' + name, __package__)
|
||||||
|
|
||||||
EXPERIENCES = {cls.NAME: cls for cls in Experience.__subclasses__()}
|
# Track direct inheritance
|
||||||
|
EXPERIENCES = {}
|
||||||
|
|
||||||
|
def _get_all_subclasses(BaseClass):
|
||||||
|
for cls in BaseClass.__subclasses__():
|
||||||
|
if hasattr(cls, "NAME"):
|
||||||
|
EXPERIENCES[cls.NAME] = cls
|
||||||
|
|
||||||
|
_get_all_subclasses(cls)
|
||||||
|
|
||||||
|
_get_all_subclasses(Experience)
|
@ -1,19 +1,30 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import RandomFileExperience, RandomFileParameter, ExperienceParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
class AB(Experience):
|
|
||||||
|
class ABParameter(RandomFileParameter):
|
||||||
|
CONCURRENT_REQUESTS = "abConccurentRequests"
|
||||||
|
TIME_LIMIT = "abTimelimit"
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename):
|
||||||
|
super(ABParameter, self).__init__(experience_parameter_filename)
|
||||||
|
self.default_parameters.update({
|
||||||
|
ABParameter.CONCURRENT_REQUESTS: "50",
|
||||||
|
ABParameter.TIME_LIMIT: "20",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
class AB(RandomFileExperience):
|
||||||
NAME = "ab"
|
NAME = "ab"
|
||||||
|
PARAMETER_CLASS = ABParameter
|
||||||
|
|
||||||
SERVER_LOG = "ab_server.log"
|
SERVER_LOG = "ab_server.log"
|
||||||
CLIENT_LOG = "ab_client.log"
|
CLIENT_LOG = "ab_client.log"
|
||||||
AB_BIN = "ab"
|
AB_BIN = "ab"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(AB, self).__init__(experience_parameter, topo, topo_config)
|
super(AB, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
|
||||||
self.ping()
|
|
||||||
super(AB, self).classic_run()
|
|
||||||
|
|
||||||
def ping(self):
|
def ping(self):
|
||||||
self.topo.command_to(self.topo_config.client,
|
self.topo.command_to(self.topo_config.client,
|
||||||
@ -30,49 +41,39 @@ class AB(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.HTTPFILE)
|
super(AB, self).load_parameters()
|
||||||
self.random_size = self.experience_parameter.get(ExperienceParameter.HTTPRANDOMSIZE)
|
self.concurrent_requests = self.experience_parameter.get(ABParameter.CONCURRENT_REQUESTS)
|
||||||
self.concurrent_requests = self.experience_parameter.get(ExperienceParameter.ABCONCURRENTREQUESTS)
|
self.time_limit = self.experience_parameter.get(ABParameter.TIME_LIMIT)
|
||||||
self.timelimit = self.experience_parameter.get(ExperienceParameter.ABTIMELIMIT)
|
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
Experience.prepare(self)
|
super(AB, self).prepare()
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
self.topo.command_to(self.topo_config.client, "rm " + \
|
||||||
AB.CLIENT_LOG )
|
AB.CLIENT_LOG )
|
||||||
self.topo.command_to(self.topo_config.server, "rm " + \
|
self.topo.command_to(self.topo_config.server, "rm " + \
|
||||||
AB.SERVER_LOG )
|
AB.SERVER_LOG )
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client,
|
|
||||||
"dd if=/dev/urandom of=random bs=1K count=" + \
|
|
||||||
self.random_size)
|
|
||||||
|
|
||||||
def getAbServerCmd(self):
|
def get_ab_server_cmd(self):
|
||||||
s = "python " + os.path.dirname(os.path.abspath(__file__)) + \
|
s = "python {}/../utils/http_server.py &> {} 2>&1 &".format(
|
||||||
"/utils/http_server.py &>" + AB.SERVER_LOG + "&"
|
os.path.dirname(os.path.abspath(__file__)), AB.SERVER_LOG)
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def getAbClientCmd(self):
|
def get_ab_client_cmd(self):
|
||||||
s = AB.AB_BIN + " -c " + self.concurrent_requests + " -t " + \
|
s = "{} -c {} -t {} http://{}/{} &> {}".format(AB.AB_BIN, self.concurrent_requests,
|
||||||
self.timelimit + " http://" + self.topo_config.getServerIP() + "/" + self.file + \
|
self.time_limit, self.topo_config.getServerIP(), self.file, AB.CLIENT_LOG)
|
||||||
" &>" + AB.CLIENT_LOG
|
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
Experience.clean(self)
|
super(AB, self).clean()
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client, "rm random*")
|
|
||||||
#todo use cst
|
|
||||||
#self.topo.command_to(self.topo_config.server, "killall netcat")
|
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = self.getAbServerCmd()
|
cmd = self.get_ab_server_cmd()
|
||||||
self.topo.command_to(self.topo_config.server, cmd)
|
self.topo.command_to(self.topo_config.server, cmd)
|
||||||
|
print("Wait for the HTTP server to be up, this can take quite a while...")
|
||||||
self.topo.command_to(self.topo_config.client, "sleep 2")
|
self.topo.command_to(self.topo_config.client, "sleep 15")
|
||||||
cmd = self.getAbClientCmd()
|
cmd = self.get_ab_client_cmd()
|
||||||
self.topo.command_to(self.topo_config.client, cmd)
|
self.topo.command_to(self.topo_config.client, cmd)
|
||||||
self.topo.command_to(self.topo_config.client, "sleep 2")
|
self.topo.command_to(self.topo_config.client, "sleep 2")
|
||||||
|
self.topo.get_cli()
|
||||||
|
@ -14,9 +14,9 @@ class DITG(Experience):
|
|||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(DITG, self).__init__(experience_parameter, topo, topo_config)
|
super(DITG, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(DITG, self).classic_run()
|
super(DITG, self).classic_run()
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ class DITG(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.kbytes = self.experience_parameter.get(ExperienceParameter.DITGKBYTES)
|
self.kbytes = self.experience_parameter.get(ExperienceParameter.DITGKBYTES)
|
||||||
self.constant_packet_size = self.experience_parameter.get(ExperienceParameter.DITGCONSTANTPACKETSIZE)
|
self.constant_packet_size = self.experience_parameter.get(ExperienceParameter.DITGCONSTANTPACKETSIZE)
|
||||||
self.mean_poisson_packets_sec = self.experience_parameter.get(ExperienceParameter.DITGMEANPOISSONPACKETSSEC)
|
self.mean_poisson_packets_sec = self.experience_parameter.get(ExperienceParameter.DITGMEANPOISSONPACKETSSEC)
|
||||||
|
@ -1,8 +1,19 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import Experience, ExperienceParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
class EploadParameter(ExperienceParameter):
|
||||||
|
TEST_DIR = "test_dir"
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename):
|
||||||
|
super(EploadParameter, self).__init__(experience_parameter_filename)
|
||||||
|
self.default_parameters.update({
|
||||||
|
TEST_DIR: "/bla/bla/bla",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class Epload(Experience):
|
class Epload(Experience):
|
||||||
NAME = "epload"
|
NAME = "epload"
|
||||||
|
PARAMETER_CLASS = EploadParameter
|
||||||
|
|
||||||
SERVER_LOG = "http_server.log"
|
SERVER_LOG = "http_server.log"
|
||||||
EPLOAD_LOG = "epload.log"
|
EPLOAD_LOG = "epload.log"
|
||||||
@ -10,9 +21,9 @@ class Epload(Experience):
|
|||||||
EPLOAD_EMULATOR="/home/mininet/epload/epload/emulator/run.js"
|
EPLOAD_EMULATOR="/home/mininet/epload/epload/emulator/run.js"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(Epload, self).__init__(experience_parameter, topo, topo_config)
|
super(Epload, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(Epload, self).classic_run()
|
super(Epload, self).classic_run()
|
||||||
|
|
||||||
@ -31,8 +42,8 @@ class Epload(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.epload_test_dir = self.experience_parameter.get(ExperienceParameter.EPLOADTESTDIR)
|
self.test_dir = self.experience_parameter.get(EploadParameter.TEST_DIR)
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(Epload, self).prepare()
|
super(Epload, self).prepare()
|
||||||
@ -54,19 +65,19 @@ class Epload(Experience):
|
|||||||
def getEploadClientCmd(self):
|
def getEploadClientCmd(self):
|
||||||
s = Epload.NODE_BIN + " " + Epload.EPLOAD_EMULATOR + \
|
s = Epload.NODE_BIN + " " + Epload.EPLOAD_EMULATOR + \
|
||||||
" http " + \
|
" http " + \
|
||||||
self.epload_test_dir + " &>" + Epload.EPLOAD_LOG
|
self.test_dir + " &>" + Epload.EPLOAD_LOG
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def getSubHostCmd(self):
|
def getSubHostCmd(self):
|
||||||
s = "for f in `ls " + self.epload_test_dir + "/*`; do " + \
|
s = "for f in `ls " + self.test_dir + "/*`; do " + \
|
||||||
" sed -i 's/@host@/" + self.topo_config.getServerIP() + "/' " + \
|
" sed -i 's/@host@/" + self.topo_config.getServerIP() + "/' " + \
|
||||||
"$f; done"
|
"$f; done"
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def getSubBackHostCmd(self):
|
def getSubBackHostCmd(self):
|
||||||
s = "for f in `ls " + self.epload_test_dir + "/*`; do " + \
|
s = "for f in `ls " + self.test_dir + "/*`; do " + \
|
||||||
" sed -i 's/" + self.topo_config.getServerIP() + "/@host@/' " + \
|
" sed -i 's/" + self.topo_config.getServerIP() + "/@host@/' " + \
|
||||||
"$f; done"
|
"$f; done"
|
||||||
print(s)
|
print(s)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import ExperienceParameter, RandomFileExperience, RandomFileParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
class HTTP(Experience):
|
class HTTP(RandomFileExperience):
|
||||||
NAME = "http"
|
NAME = "http"
|
||||||
|
|
||||||
SERVER_LOG = "http_server.log"
|
SERVER_LOG = "http_server.log"
|
||||||
@ -9,11 +9,9 @@ class HTTP(Experience):
|
|||||||
WGET_BIN = "wget"
|
WGET_BIN = "wget"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(HTTP, self).__init__(experience_parameter, topo, topo_config)
|
# Just rely on RandomFileExperiment
|
||||||
self.loadParam()
|
super(HTTP, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.ping()
|
|
||||||
super(HTTP, self).classic_run()
|
|
||||||
|
|
||||||
def ping(self):
|
def ping(self):
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
self.topo.command_to(self.topo_config.client, "rm " + \
|
||||||
@ -30,9 +28,9 @@ class HTTP(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.HTTPFILE)
|
# Just rely on RandomFileExperiment
|
||||||
self.random_size = self.experience_parameter.get(ExperienceParameter.HTTPRANDOMSIZE)
|
super(HTTP, self).load_parameters()
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(HTTP, self).prepare()
|
super(HTTP, self).prepare()
|
||||||
@ -40,26 +38,20 @@ class HTTP(Experience):
|
|||||||
HTTP.CLIENT_LOG )
|
HTTP.CLIENT_LOG )
|
||||||
self.topo.command_to(self.topo_config.server, "rm " + \
|
self.topo.command_to(self.topo_config.server, "rm " + \
|
||||||
HTTP.SERVER_LOG )
|
HTTP.SERVER_LOG )
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client,
|
|
||||||
"dd if=/dev/urandom of=random bs=1K count=" + \
|
|
||||||
self.random_size)
|
|
||||||
|
|
||||||
def getHTTPServerCmd(self):
|
def getHTTPServerCmd(self):
|
||||||
s = "/etc/init.d/apache2 restart &>" + HTTP.SERVER_LOG + "&"
|
s = "/etc/init.d/apache2 restart &> {}&".format(HTTP.SERVER_LOG)
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def getHTTPClientCmd(self):
|
def getHTTPClientCmd(self):
|
||||||
s = "(time " + HTTP.WGET_BIN + " http://" + self.topo_config.getServerIP() + \
|
s = "(time {} http://{}/{} --no-check-certificate) &> {}".format(HTTP.WGET_BIN,
|
||||||
"/" + self.file + " --no-check-certificate) &>" + HTTP.CLIENT_LOG
|
self.topo_config.getServerIP(), self.file, HTTP.CLIENT_LOG)
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super(HTTP, self).clean()
|
super(HTTP, self).clean()
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client, "rm random*")
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = self.getHTTPServerCmd()
|
cmd = self.getHTTPServerCmd()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import ExperienceParameter, RandomFileExperience, RandomFileParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
class HTTPS(Experience):
|
class HTTPS(RandomFileExperience):
|
||||||
NAME = "https"
|
NAME = "https"
|
||||||
|
|
||||||
SERVER_LOG = "https_server.log"
|
SERVER_LOG = "https_server.log"
|
||||||
@ -9,11 +9,9 @@ class HTTPS(Experience):
|
|||||||
WGET_BIN = "wget"
|
WGET_BIN = "wget"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(HTTPS, self).__init__(experience_parameter, topo, topo_config)
|
# Just rely on RandomFileExperiment
|
||||||
self.loadParam()
|
super(HTTPS, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.ping()
|
|
||||||
super(HTTPS, self).classic_run()
|
|
||||||
|
|
||||||
def ping(self):
|
def ping(self):
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
self.topo.command_to(self.topo_config.client, "rm " + \
|
||||||
@ -30,9 +28,9 @@ class HTTPS(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.HTTPSFILE)
|
# Just rely on RandomFileExperiment
|
||||||
self.random_size = self.experience_parameter.get(ExperienceParameter.HTTPSRANDOMSIZE)
|
super(HTTPS, self).load_parameters()
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(HTTPS, self).prepare()
|
super(HTTPS, self).prepare()
|
||||||
@ -40,10 +38,6 @@ class HTTPS(Experience):
|
|||||||
HTTPS.CLIENT_LOG )
|
HTTPS.CLIENT_LOG )
|
||||||
self.topo.command_to(self.topo_config.server, "rm " + \
|
self.topo.command_to(self.topo_config.server, "rm " + \
|
||||||
HTTPS.SERVER_LOG )
|
HTTPS.SERVER_LOG )
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client,
|
|
||||||
"dd if=/dev/urandom of=random bs=1K count=" + \
|
|
||||||
self.random_size)
|
|
||||||
|
|
||||||
def getHTTPSServerCmd(self):
|
def getHTTPSServerCmd(self):
|
||||||
s = "python {}/../utils/https_server.py {}/../utils/server.pem &> {}&".format(os.path.dirname(os.path.abspath(__file__)),
|
s = "python {}/../utils/https_server.py {}/../utils/server.pem &> {}&".format(os.path.dirname(os.path.abspath(__file__)),
|
||||||
@ -59,8 +53,6 @@ class HTTPS(Experience):
|
|||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super(HTTPS, self).clean()
|
super(HTTPS, self).clean()
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client, "rm random*")
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = self.getHTTPSServerCmd()
|
cmd = self.getHTTPSServerCmd()
|
||||||
@ -68,7 +60,7 @@ class HTTPS(Experience):
|
|||||||
self.topo.command_to(self.topo_config.server, cmd)
|
self.topo.command_to(self.topo_config.server, cmd)
|
||||||
|
|
||||||
print("Waiting for the server to run")
|
print("Waiting for the server to run")
|
||||||
self.topo.command_to(self.topo_config.client, "sleep 15")
|
self.topo.command_to(self.topo_config.client, "sleep 2")
|
||||||
cmd = self.getHTTPSClientCmd()
|
cmd = self.getHTTPSClientCmd()
|
||||||
self.topo.command_to(self.topo_config.client, "netstat -sn > netstat_client_before")
|
self.topo.command_to(self.topo_config.client, "netstat -sn > netstat_client_before")
|
||||||
self.topo.command_to(self.topo_config.client, cmd)
|
self.topo.command_to(self.topo_config.client, cmd)
|
||||||
|
@ -1,17 +1,29 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import Experience, ExperienceParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
class IPerfParameter(ExperienceParameter):
|
||||||
|
TIME = "iperfTime"
|
||||||
|
PARALLEL = "iperfParallel"
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename):
|
||||||
|
super(IPerfParameter, self).__init__(experience_parameter_filename)
|
||||||
|
self.default_parameters.update({
|
||||||
|
IPerfParameter.TIME: "10",
|
||||||
|
IPerfParameter.PARALLEL: "1",
|
||||||
|
})
|
||||||
|
|
||||||
class IPerf(Experience):
|
class IPerf(Experience):
|
||||||
NAME = "iperf"
|
NAME = "iperf"
|
||||||
|
PARAMETER_CLASS = IPerfParameter
|
||||||
|
|
||||||
IPERF_LOG = "iperf.log"
|
IPERF_LOG = "iperf.log"
|
||||||
SERVER_LOG = "server.log"
|
SERVER_LOG = "server.log"
|
||||||
IPERF_BIN = "iperf3"
|
IPERF_BIN = "iperf3"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(IPerf, self).__init__(experience_parameter, topo, topo_config)
|
super(IPerf, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(IPerf, self).classic_run()
|
super(IPerf, self).classic_run()
|
||||||
|
|
||||||
@ -30,9 +42,9 @@ class IPerf(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.time = self.experience_parameter.get(ExperienceParameter.IPERFTIME)
|
self.time = self.experience_parameter.get(IPerfParameter.TIME)
|
||||||
self.parallel = self.experience_parameter.get(ExperienceParameter.IPERFPARALLEL)
|
self.parallel = self.experience_parameter.get(IPerfParameter.PARALLEL)
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(IPerf, self).prepare()
|
super(IPerf, self).prepare()
|
||||||
|
@ -9,9 +9,9 @@ class Msg(Experience):
|
|||||||
CLIENT_ERR = "msg_client.err"
|
CLIENT_ERR = "msg_client.err"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(Msg, self).__init__(experience_parameter, topo, topo_config)
|
super(Msg, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(Msg, self).classic_run()
|
super(Msg, self).classic_run()
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ class Msg(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.client_sleep = self.experience_parameter.get(ExperienceParameter.MSGCLIENTSLEEP)
|
self.client_sleep = self.experience_parameter.get(ExperienceParameter.MSGCLIENTSLEEP)
|
||||||
self.server_sleep = self.experience_parameter.get(ExperienceParameter.MSGSERVERSLEEP)
|
self.server_sleep = self.experience_parameter.get(ExperienceParameter.MSGSERVERSLEEP)
|
||||||
self.nb_requests = self.experience_parameter.get(ExperienceParameter.MSGNBREQUESTS)
|
self.nb_requests = self.experience_parameter.get(ExperienceParameter.MSGNBREQUESTS)
|
||||||
|
@ -5,30 +5,49 @@ Should be the mother of ExperienceNCPV, shame on me, should rewrite
|
|||||||
ExperienceNCPV as daughter class of this one.
|
ExperienceNCPV as daughter class of this one.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
class NCParameter(ExperienceParameter):
|
||||||
|
DD_IBS = "ddIBS"
|
||||||
|
DD_OBS = "ddIBS"
|
||||||
|
DD_COUNT = "ddCount"
|
||||||
|
SERVER_PORT = "ncServerPort"
|
||||||
|
CLIENT_PORT = "ncClientPort"
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename):
|
||||||
|
super(NCParameter, self).__init__(experience_parameter_filename)
|
||||||
|
self.default_parameters.update({
|
||||||
|
NCParameter.DD_IBS: "1k",
|
||||||
|
NCParameter.DD_OBS: "1k",
|
||||||
|
NCParameter.DD_COUNT: "5000", #5k * 1k = 5m
|
||||||
|
NCParameter.SERVER_PORT: "33666",
|
||||||
|
NCParameter.CLIENT_PORT: "33555",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class NC(Experience):
|
class NC(Experience):
|
||||||
NAME = "nc"
|
NAME = "nc"
|
||||||
|
PARAMETER_CLASS = NCParameter
|
||||||
|
|
||||||
SERVER_NC_LOG = "netcat_server"
|
SERVER_NC_LOG = "netcat_server"
|
||||||
CLIENT_NC_LOG = "netcat_client"
|
CLIENT_NC_LOG = "netcat_client"
|
||||||
NC_BIN = "netcat"
|
NC_BIN = "netcat"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(NC, self).__init__(experience_parameter, topo, topo_config)
|
super(NC, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
super(NC, self).classic_run()
|
super(NC, self).classic_run()
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.ddibs = self.experience_parameter.get(ExperienceParameter.DDIBS)
|
self.ddibs = self.experience_parameter.get(NCParameter.DD_IBS)
|
||||||
self.ddobs = self.experience_parameter.get(ExperienceParameter.DDOBS)
|
self.ddobs = self.experience_parameter.get(NCParameter.DD_OBS)
|
||||||
self.ddcount = self.experience_parameter.get(ExperienceParameter.DDCOUNT)
|
self.ddcount = self.experience_parameter.get(NCParameter.DD_COUNT)
|
||||||
self.ncServerPort = self.experience_parameter.get(ExperienceParameter.NCSERVERPORT)
|
self.ncServerPort = self.experience_parameter.get(NCParameter.SERVER_PORT)
|
||||||
self.ncClientPort = []
|
self.ncClientPort = []
|
||||||
for k in sorted(self.experience_parameter.paramDic):
|
for k in sorted(self.experience_parameter.paramDic):
|
||||||
if k.startswith(ExperienceParameter.NCCLIENTPORT):
|
if k.startswith(NCParameter.CLIENT_PORT):
|
||||||
port = self.experience_parameter.paramDic[k]
|
port = self.experience_parameter.paramDic[k]
|
||||||
self.ncClientPort.append(port)
|
self.ncClientPort.append(port)
|
||||||
if len(self.ncClientPort) == 0:
|
if len(self.ncClientPort) == 0:
|
||||||
d = self.experience_parameter.get(ExperienceParameter.NCCLIENTPORT)
|
d = self.experience_parameter.get(NCParameter.CLIENT_PORT)
|
||||||
self.ncClientPort.append(d)
|
self.ncClientPort.append(d)
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
|
@ -1,4 +1,21 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from .nc import NC, NCParameter, ExperienceParameter
|
||||||
|
|
||||||
|
|
||||||
|
class NCPVParameter(NCParameter):
|
||||||
|
RATE_LIMIT= "pvRateLimit"
|
||||||
|
G = "pvG" #patched version of pv
|
||||||
|
Z = "pvZ"
|
||||||
|
CHANGE_PV = "changePv"
|
||||||
|
CHANGE_PV_AT = "changePvAt"
|
||||||
|
|
||||||
|
def __init__(self, experience_parameter_filename):
|
||||||
|
super(NCPVParameter, self).__init__(experience_parameter_filename)
|
||||||
|
self.default_parameters.update({
|
||||||
|
NCPVParameter.RATE_LIMIT: "400k",
|
||||||
|
NCPVParameter.G: "10000",
|
||||||
|
NCPVParameter.Z: "10000",
|
||||||
|
NCPVParameter.CHANGE_PV: "no",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class MpPvAt(object):
|
class MpPvAt(object):
|
||||||
@ -12,11 +29,12 @@ class MpPvAt(object):
|
|||||||
") will be " + self.cmd
|
") will be " + self.cmd
|
||||||
|
|
||||||
|
|
||||||
class NCPV(Experience):
|
class NCPV(NC):
|
||||||
"""
|
"""
|
||||||
NC PV : NetCat and Pipe Viewer
|
NC PV : NetCat and Pipe Viewer
|
||||||
"""
|
"""
|
||||||
NAME = "ncpv"
|
NAME = "ncpv"
|
||||||
|
PARAMETER_CLASS = NCPVParameter
|
||||||
|
|
||||||
SERVER_NC_LOG = "netcat_server"
|
SERVER_NC_LOG = "netcat_server"
|
||||||
CLIENT_NC_LOG = "netcat_client"
|
CLIENT_NC_LOG = "netcat_client"
|
||||||
@ -24,9 +42,9 @@ class NCPV(Experience):
|
|||||||
PV_BIN = "/usr/local/bin/pv"
|
PV_BIN = "/usr/local/bin/pv"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(NCPV, self).__init__(experience_parameter, topo, topo_config)
|
super(NCPV, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(NCPV, self).classic_run()
|
super(NCPV, self).classic_run()
|
||||||
|
|
||||||
@ -45,23 +63,11 @@ class NCPV(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
|
super(NCPV, self).load_parameters()
|
||||||
self.pvg = self.experience_parameter.get(ExperienceParameter.PVG)
|
self.pvg = self.experience_parameter.get(ExperienceParameter.PVG)
|
||||||
self.pvz = self.experience_parameter.get(ExperienceParameter.PVZ)
|
self.pvz = self.experience_parameter.get(ExperienceParameter.PVZ)
|
||||||
self.pvRateLimit = self.experience_parameter.get(ExperienceParameter.PVRATELIMIT)
|
self.pvRateLimit = self.experience_parameter.get(ExperienceParameter.PVRATELIMIT)
|
||||||
self.ddibs = self.experience_parameter.get(ExperienceParameter.DDIBS)
|
|
||||||
self.ddobs = self.experience_parameter.get(ExperienceParameter.DDOBS)
|
|
||||||
self.ddcount = self.experience_parameter.get(ExperienceParameter.DDCOUNT)
|
|
||||||
self.ncServerPort = self.experience_parameter.get(ExperienceParameter.NCSERVERPORT)
|
|
||||||
self.pvRateLimit = self.experience_parameter.get(ExperienceParameter.PVRATELIMIT)
|
|
||||||
self.ncClientPort = []
|
|
||||||
for k in sorted(self.experience_parameter.paramDic):
|
|
||||||
if k.startswith(ExperienceParameter.NCCLIENTPORT):
|
|
||||||
port = self.experience_parameter.paramDic[k]
|
|
||||||
self.ncClientPort.append(port)
|
|
||||||
if len(self.ncClientPort) == 0:
|
|
||||||
d = self.experience_parameter.get(ExperienceParameter.NCCLIENTPORT)
|
|
||||||
self.ncClientPort.append(d)
|
|
||||||
self.loadPvAt()
|
self.loadPvAt()
|
||||||
|
|
||||||
def loadPvAt(self):
|
def loadPvAt(self):
|
||||||
@ -106,15 +112,11 @@ class NCPV(Experience):
|
|||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(NCPV, self).prepare()
|
super(NCPV, self).prepare()
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
|
||||||
NCPV.CLIENT_NC_LOG )
|
|
||||||
self.topo.command_to(self.topo_config.server, "rm " + \
|
|
||||||
NCPV.SERVER_NC_LOG )
|
|
||||||
|
|
||||||
def getNCServerCmd(self, id):
|
def getNCServerCmd(self, id):
|
||||||
s = NCPV.NC_BIN + " -d " + \
|
s = NC.NC_BIN + " -d " + \
|
||||||
" -l " + self.ncServerPort + \
|
" -l " + self.ncServerPort + \
|
||||||
" 1>/dev/null 2>" + NCPV.SERVER_NC_LOG + \
|
" 1>/dev/null 2>" + NC.SERVER_NC_LOG + \
|
||||||
"_" + str(id) + ".log &"
|
"_" + str(id) + ".log &"
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
@ -123,10 +125,10 @@ class NCPV(Experience):
|
|||||||
s = "dd if=/dev/urandom ibs=" + self.ddibs + \
|
s = "dd if=/dev/urandom ibs=" + self.ddibs + \
|
||||||
" obs=" + self.ddobs + \
|
" obs=" + self.ddobs + \
|
||||||
" count=" + self.ddcount + \
|
" count=" + self.ddcount + \
|
||||||
" | " + NCPV.PV_BIN + \
|
" | " + NC.PV_BIN + \
|
||||||
" -g " + self.pvg + " -z " + self.pvz + \
|
" -g " + self.pvg + " -z " + self.pvz + \
|
||||||
" -q --rate-limit " + self.pvRateLimit + \
|
" -q --rate-limit " + self.pvRateLimit + \
|
||||||
" | " + NCPV.NC_BIN + " " + \
|
" | " + NC.NC_BIN + " " + \
|
||||||
" -p " + self.ncClientPort[id] + " " + \
|
" -p " + self.ncClientPort[id] + " " + \
|
||||||
self.topo_config.getServerIP() + " " + \
|
self.topo_config.getServerIP() + " " + \
|
||||||
self.ncServerPort + " " + \
|
self.ncServerPort + " " + \
|
||||||
@ -134,13 +136,13 @@ class NCPV(Experience):
|
|||||||
"_" + str(id) + ".log"
|
"_" + str(id) + ".log"
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def getPvPidCmd(self):
|
def getPvPidCmd(self):
|
||||||
s = "pgrep -n pv"
|
s = "pgrep -n pv"
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super(NCPV, self).clean()
|
super(NCPV, self).clean()
|
||||||
self.topo.command_to(self.topo_config.server, "killall netcat")
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
for i in range(0, len(self.ncClientPort)):
|
for i in range(0, len(self.ncClientPort)):
|
||||||
|
@ -10,9 +10,9 @@ class Netperf(Experience):
|
|||||||
NETSERVER_BIN = "netserver"
|
NETSERVER_BIN = "netserver"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(Netperf, self).__init__(experience_parameter, topo, topo_config)
|
super(Netperf, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(Netperf, self).classic_run()
|
super(Netperf, self).classic_run()
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ class Netperf(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.testlen = self.experience_parameter.get(ExperienceParameter.NETPERFTESTLEN)
|
self.testlen = self.experience_parameter.get(ExperienceParameter.NETPERFTESTLEN)
|
||||||
self.testname = self.experience_parameter.get(ExperienceParameter.NETPERFTESTNAME)
|
self.testname = self.experience_parameter.get(ExperienceParameter.NETPERFTESTNAME)
|
||||||
self.reqres_size = self.experience_parameter.get(ExperienceParameter.NETPERFREQRESSIZE)
|
self.reqres_size = self.experience_parameter.get(ExperienceParameter.NETPERFREQRESSIZE)
|
||||||
|
@ -3,8 +3,8 @@ from core.experience import Experience, ExperienceParameter
|
|||||||
class NoneExperience(Experience):
|
class NoneExperience(Experience):
|
||||||
NAME = "none"
|
NAME = "none"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(NoneExperience, self).__init__(experience_parameter, topo, topo_config)
|
super(NoneExperience, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
super(NoneExperience, self).classic_run()
|
super(NoneExperience, self).classic_run()
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
|
@ -5,8 +5,8 @@ class Ping(Experience):
|
|||||||
|
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(Ping, self).__init__(experience_parameter, topo, topo_config)
|
super(Ping, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
super(Ping, self).classic_run()
|
super(Ping, self).classic_run()
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import RandomFileExperience, RandomFileParameter, ExperienceParameter
|
||||||
from topos.multi_interface_cong import MultiInterfaceCongConfig
|
from topos.multi_interface_cong import MultiInterfaceCongConfig
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
class QUIC(Experience):
|
class QUIC(RandomFileExperience):
|
||||||
NAME = "quic"
|
NAME = "quic"
|
||||||
|
|
||||||
GO_BIN = "/usr/local/go/bin/go"
|
GO_BIN = "/usr/local/go/bin/go"
|
||||||
@ -15,11 +15,9 @@ class QUIC(Experience):
|
|||||||
CERTPATH = "~/go/src/github.com/lucas-clemente/quic-go/example/"
|
CERTPATH = "~/go/src/github.com/lucas-clemente/quic-go/example/"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(QUIC, self).__init__(experience_parameter, topo, topo_config)
|
# Just rely on RandomFileExperience
|
||||||
self.loadParam()
|
super(QUIC, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.ping()
|
|
||||||
super(QUIC, self).classic_run()
|
|
||||||
|
|
||||||
def ping(self):
|
def ping(self):
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
self.topo.command_to(self.topo_config.client, "rm " + \
|
||||||
@ -36,9 +34,8 @@ class QUIC(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.HTTPSFILE)
|
super(QUIC, self).load_parameters()
|
||||||
self.random_size = self.experience_parameter.get(ExperienceParameter.HTTPSRANDOMSIZE)
|
|
||||||
self.multipath = self.experience_parameter.get(ExperienceParameter.QUICMULTIPATH)
|
self.multipath = self.experience_parameter.get(ExperienceParameter.QUICMULTIPATH)
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
@ -47,10 +44,6 @@ class QUIC(Experience):
|
|||||||
QUIC.CLIENT_LOG )
|
QUIC.CLIENT_LOG )
|
||||||
self.topo.command_to(self.topo_config.server, "rm " + \
|
self.topo.command_to(self.topo_config.server, "rm " + \
|
||||||
QUIC.SERVER_LOG )
|
QUIC.SERVER_LOG )
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client,
|
|
||||||
"dd if=/dev/urandom of=random bs=1K count=" + \
|
|
||||||
self.random_size)
|
|
||||||
|
|
||||||
def getQUICServerCmd(self):
|
def getQUICServerCmd(self):
|
||||||
s = QUIC.GO_BIN + " run " + QUIC.SERVER_GO_FILE
|
s = QUIC.GO_BIN + " run " + QUIC.SERVER_GO_FILE
|
||||||
@ -69,7 +62,7 @@ class QUIC(Experience):
|
|||||||
|
|
||||||
def getCongServerCmd(self, congID):
|
def getCongServerCmd(self, congID):
|
||||||
s = "python " + os.path.dirname(os.path.abspath(__file__)) + \
|
s = "python " + os.path.dirname(os.path.abspath(__file__)) + \
|
||||||
"/utils/https_server.py &> https_server" + str(congID) + ".log &"
|
"/../utils/https_server.py &> https_server" + str(congID) + ".log &"
|
||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
@ -81,8 +74,6 @@ class QUIC(Experience):
|
|||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super(QUIC, self).clean()
|
super(QUIC, self).clean()
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client, "rm random*")
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = self.getQUICServerCmd()
|
cmd = self.getQUICServerCmd()
|
||||||
|
@ -12,9 +12,9 @@ class QUICSiri(Experience):
|
|||||||
SERVER_GO_FILE = "~/go/src/github.com/lucas-clemente/quic-go/example/siri/siri.go"
|
SERVER_GO_FILE = "~/go/src/github.com/lucas-clemente/quic-go/example/siri/siri.go"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(QUICSiri, self).__init__(experience_parameter, topo, topo_config)
|
super(QUICSiri, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(QUICSiri, self).classic_run()
|
super(QUICSiri, self).classic_run()
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ class QUICSiri(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.run_time = self.experience_parameter.get(ExperienceParameter.QUICSIRIRUNTIME)
|
self.run_time = self.experience_parameter.get(ExperienceParameter.QUICSIRIRUNTIME)
|
||||||
self.multipath = self.experience_parameter.get(ExperienceParameter.QUICMULTIPATH)
|
self.multipath = self.experience_parameter.get(ExperienceParameter.QUICMULTIPATH)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import RandomFileExperience, RandomFileParameter, ExperienceParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
class SendFile(Experience):
|
class SendFile(RandomFileExperience):
|
||||||
NAME = "sendfile"
|
NAME = "sendfile"
|
||||||
|
|
||||||
SERVER_LOG = "sendfile_server.log"
|
SERVER_LOG = "sendfile_server.log"
|
||||||
@ -9,11 +9,9 @@ class SendFile(Experience):
|
|||||||
WGET_BIN = "./client"
|
WGET_BIN = "./client"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(SendFile, self).__init__(experience_parameter, topo, topo_config)
|
# Just rely on RandomFileExperience
|
||||||
self.loadParam()
|
super(SendFile, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.ping()
|
|
||||||
super(SendFile, self).classic_run()
|
|
||||||
|
|
||||||
def ping(self):
|
def ping(self):
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
self.topo.command_to(self.topo_config.client, "rm " + \
|
||||||
@ -30,9 +28,8 @@ class SendFile(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.HTTPSFILE)
|
super(SendFile, self).load_parameters()
|
||||||
self.random_size = self.experience_parameter.get(ExperienceParameter.HTTPSRANDOMSIZE)
|
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(SendFile, self).prepare()
|
super(SendFile, self).prepare()
|
||||||
@ -40,10 +37,6 @@ class SendFile(Experience):
|
|||||||
SendFile.CLIENT_LOG )
|
SendFile.CLIENT_LOG )
|
||||||
self.topo.command_to(self.topo_config.server, "rm " + \
|
self.topo.command_to(self.topo_config.server, "rm " + \
|
||||||
SendFile.SERVER_LOG )
|
SendFile.SERVER_LOG )
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client,
|
|
||||||
"dd if=/dev/urandom of=random bs=1K count=" + \
|
|
||||||
self.random_size)
|
|
||||||
|
|
||||||
def getSendFileServerCmd(self):
|
def getSendFileServerCmd(self):
|
||||||
s = "./server &>" + SendFile.SERVER_LOG + "&"
|
s = "./server &>" + SendFile.SERVER_LOG + "&"
|
||||||
@ -57,8 +50,6 @@ class SendFile(Experience):
|
|||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super(SendFile, self).clean()
|
super(SendFile, self).clean()
|
||||||
if self.file == "random":
|
|
||||||
self.topo.command_to(self.topo_config.client, "rm random*")
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = self.getSendFileServerCmd()
|
cmd = self.getSendFileServerCmd()
|
||||||
|
@ -10,9 +10,9 @@ class Siri(Experience):
|
|||||||
JAVA_BIN = "java"
|
JAVA_BIN = "java"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(Siri, self).__init__(experience_parameter, topo, topo_config)
|
super(Siri, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(Siri, self).classic_run()
|
super(Siri, self).classic_run()
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ class Siri(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.run_time = self.experience_parameter.get(ExperienceParameter.SIRIRUNTIME)
|
self.run_time = self.experience_parameter.get(ExperienceParameter.SIRIRUNTIME)
|
||||||
self.query_size = self.experience_parameter.get(ExperienceParameter.SIRIQUERYSIZE)
|
self.query_size = self.experience_parameter.get(ExperienceParameter.SIRIQUERYSIZE)
|
||||||
self.response_size = self.experience_parameter.get(ExperienceParameter.SIRIRESPONSESIZE)
|
self.response_size = self.experience_parameter.get(ExperienceParameter.SIRIRESPONSESIZE)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from core.experience import Experience, ExperienceParameter
|
from core.experience import ExperienceParameter, RandomFileExperience, RandomFileParameter
|
||||||
import os
|
import os
|
||||||
|
|
||||||
class SiriHTTP(Experience):
|
class SiriHTTP(RandomFileExperience):
|
||||||
NAME = "sirihttp"
|
NAME = "sirihttp"
|
||||||
|
|
||||||
HTTP_SERVER_LOG = "http_server.log"
|
HTTP_SERVER_LOG = "http_server.log"
|
||||||
@ -13,11 +13,9 @@ class SiriHTTP(Experience):
|
|||||||
JAVA_BIN = "java"
|
JAVA_BIN = "java"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(SiriHTTP, self).__init__(experience_parameter, topo, topo_config)
|
# Just rely on RandomFileExperiment
|
||||||
self.loadParam()
|
super(SiriHTTP, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.ping()
|
|
||||||
super(SiriHTTP, self).classic_run()
|
|
||||||
|
|
||||||
def ping(self):
|
def ping(self):
|
||||||
self.topo.command_to(self.topo_config.client, "rm " + \
|
self.topo.command_to(self.topo_config.client, "rm " + \
|
||||||
@ -34,7 +32,9 @@ class SiriHTTP(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
|
# Start collecting parameters of RandomFileExperiment
|
||||||
|
super(SiriHTTP, self).load_parameters()
|
||||||
self.run_time = self.experience_parameter.get(ExperienceParameter.SIRIRUNTIME)
|
self.run_time = self.experience_parameter.get(ExperienceParameter.SIRIRUNTIME)
|
||||||
self.query_size = self.experience_parameter.get(ExperienceParameter.SIRIQUERYSIZE)
|
self.query_size = self.experience_parameter.get(ExperienceParameter.SIRIQUERYSIZE)
|
||||||
self.response_size = self.experience_parameter.get(ExperienceParameter.SIRIRESPONSESIZE)
|
self.response_size = self.experience_parameter.get(ExperienceParameter.SIRIRESPONSESIZE)
|
||||||
@ -45,8 +45,6 @@ class SiriHTTP(Experience):
|
|||||||
self.buffer_size = self.experience_parameter.get(ExperienceParameter.SIRIBUFFERSIZE)
|
self.buffer_size = self.experience_parameter.get(ExperienceParameter.SIRIBUFFERSIZE)
|
||||||
self.burst_size = self.experience_parameter.get(ExperienceParameter.SIRIBURSTSIZE)
|
self.burst_size = self.experience_parameter.get(ExperienceParameter.SIRIBURSTSIZE)
|
||||||
self.interval_burst_time_ms = self.experience_parameter.get(ExperienceParameter.SIRIINTERVALBURSTTIMEMS)
|
self.interval_burst_time_ms = self.experience_parameter.get(ExperienceParameter.SIRIINTERVALBURSTTIMEMS)
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.HTTPFILE)
|
|
||||||
self.random_size = self.experience_parameter.get(ExperienceParameter.HTTPRANDOMSIZE)
|
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
super(SiriHTTP, self).prepare()
|
super(SiriHTTP, self).prepare()
|
||||||
|
@ -13,9 +13,9 @@ class SiriMsg(Experience):
|
|||||||
JAVA_BIN = "java"
|
JAVA_BIN = "java"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(SiriMsg, self).__init__(experience_parameter, topo, topo_config)
|
super(SiriMsg, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(SiriMsg, self).classic_run()
|
super(SiriMsg, self).classic_run()
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ class SiriMsg(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.run_time = self.experience_parameter.get(ExperienceParameter.SIRIRUNTIME)
|
self.run_time = self.experience_parameter.get(ExperienceParameter.SIRIRUNTIME)
|
||||||
self.query_size = self.experience_parameter.get(ExperienceParameter.SIRIQUERYSIZE)
|
self.query_size = self.experience_parameter.get(ExperienceParameter.SIRIQUERYSIZE)
|
||||||
self.response_size = self.experience_parameter.get(ExperienceParameter.SIRIRESPONSESIZE)
|
self.response_size = self.experience_parameter.get(ExperienceParameter.SIRIRESPONSESIZE)
|
||||||
|
@ -9,9 +9,9 @@ class VLC(Experience):
|
|||||||
VLC_BIN = "/home/mininet/vlc/vlc"
|
VLC_BIN = "/home/mininet/vlc/vlc"
|
||||||
PING_OUTPUT = "ping.log"
|
PING_OUTPUT = "ping.log"
|
||||||
|
|
||||||
def __init__(self, experience_parameter, topo, topo_config):
|
def __init__(self, experience_parameter_filename, topo, topo_config):
|
||||||
super(VLC, self).__init__(experience_parameter, topo, topo_config)
|
super(VLC, self).__init__(experience_parameter_filename, topo, topo_config)
|
||||||
self.loadParam()
|
self.load_parameters()
|
||||||
self.ping()
|
self.ping()
|
||||||
super(VLC, self).classic_run()
|
super(VLC, self).classic_run()
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ class VLC(Experience):
|
|||||||
print(s)
|
print(s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def loadParam(self):
|
def load_parameters(self):
|
||||||
self.file = self.experience_parameter.get(ExperienceParameter.VLCFILE)
|
self.file = self.experience_parameter.get(ExperienceParameter.VLCFILE)
|
||||||
self.time = self.experience_parameter.get(ExperienceParameter.VLCTIME)
|
self.time = self.experience_parameter.get(ExperienceParameter.VLCTIME)
|
||||||
|
|
||||||
|
13
runner.py
13
runner.py
@ -20,13 +20,12 @@ class Runner(object):
|
|||||||
All the operations are done when calling the constructor.
|
All the operations are done when calling the constructor.
|
||||||
"""
|
"""
|
||||||
def __init__(self, builder_type, topo_parameter_file, experience_parameter_file):
|
def __init__(self, builder_type, topo_parameter_file, experience_parameter_file):
|
||||||
self.experience_parameter = ExperienceParameter(experience_parameter_file)
|
|
||||||
self.topo_parameter = TopoParameter(topo_parameter_file)
|
self.topo_parameter = TopoParameter(topo_parameter_file)
|
||||||
self.set_builder(builder_type)
|
self.set_builder(builder_type)
|
||||||
self.set_topo()
|
self.set_topo()
|
||||||
self.set_topo_config()
|
self.set_topo_config()
|
||||||
self.start_topo()
|
self.start_topo()
|
||||||
self.run_experience()
|
self.run_experience(experience_parameter_file)
|
||||||
self.stop_topo()
|
self.stop_topo()
|
||||||
|
|
||||||
def set_builder(self, builder_type):
|
def set_builder(self, builder_type):
|
||||||
@ -69,13 +68,15 @@ class Runner(object):
|
|||||||
self.topo.start_network()
|
self.topo.start_network()
|
||||||
self.topo_config.configure_network()
|
self.topo_config.configure_network()
|
||||||
|
|
||||||
def run_experience(self):
|
def run_experience(self, experience_parameter_file):
|
||||||
"""
|
"""
|
||||||
Match the name of the experiement and launch it
|
Match the name of the experiement and launch it
|
||||||
"""
|
"""
|
||||||
xp = self.experience_parameter.get(ExperienceParameter.XPTYPE)
|
# Well, we need to load twice the experience parameters, is it really annoying?
|
||||||
|
xp = ExperienceParameter(experience_parameter_file).get(ExperienceParameter.XPTYPE)
|
||||||
|
print(EXPERIENCES)
|
||||||
if xp in EXPERIENCES:
|
if xp in EXPERIENCES:
|
||||||
EXPERIENCES[xp](self.experience_parameter, self.topo, self.topo_config)
|
EXPERIENCES[xp](experience_parameter_file, self.topo, self.topo_config)
|
||||||
else:
|
else:
|
||||||
raise Exception("Unknown experience {}".format(xp))
|
raise Exception("Unknown experience {}".format(xp))
|
||||||
|
|
||||||
@ -94,7 +95,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
parser.add_argument("--topo_param_file", "-t", required=True,
|
parser.add_argument("--topo_param_file", "-t", required=True,
|
||||||
help="path to the topo parameter file")
|
help="path to the topo parameter file")
|
||||||
parser.add_argument("--experience_param_file", "-x", required=True,
|
parser.add_argument("--experience_param_file", "-x",
|
||||||
help="path to the experience parameter file")
|
help="path to the experience parameter file")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
@ -9,27 +9,19 @@ SimpleHTTPServer.py - simple HTTP server supporting SSL.
|
|||||||
usage: python SimpleHTTPServer.py
|
usage: python SimpleHTTPServer.py
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import socket, os
|
import sys
|
||||||
try:
|
if sys.version_info[0] == 3:
|
||||||
# Python 2
|
|
||||||
from SocketServer import BaseServer
|
|
||||||
from BaseHTTPServer import HTTPServer
|
|
||||||
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
|
||||||
except ImportError:
|
|
||||||
# Python 3
|
# Python 3
|
||||||
from socketserver import BaseServer
|
import http.server
|
||||||
from http.server import HTTPServer, SimpleHTTPRequestHandler
|
server_address = ('', 80)
|
||||||
|
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
|
||||||
from OpenSSL import SSL
|
print("Serving HTTP on 0.0.0.0 port 80...")
|
||||||
|
|
||||||
def test(HandlerClass=SimpleHTTPRequestHandler,
|
|
||||||
ServerClass=HTTPServer):
|
|
||||||
server_address = ('', 80) # (address, port)
|
|
||||||
httpd = ServerClass(server_address, HandlerClass)
|
|
||||||
sa = httpd.socket.getsockname()
|
|
||||||
print("Serving HTTP on", sa[0], "port", sa[1], "...")
|
|
||||||
httpd.serve_forever()
|
httpd.serve_forever()
|
||||||
|
else:
|
||||||
|
# Python2
|
||||||
|
import BaseHTTPServer, SimpleHTTPServer
|
||||||
|
import os
|
||||||
|
|
||||||
|
httpd = BaseHTTPServer.HTTPServer(('', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
|
||||||
if __name__ == '__main__':
|
print("Serving HTTP on 0.0.0.0 port 80...")
|
||||||
test()
|
httpd.serve_forever()
|
Loading…
Reference in New Issue
Block a user