diff --git a/src/conf/sendfile/topo b/src/conf/sendfile/topo new file mode 100644 index 0000000..a789977 --- /dev/null +++ b/src/conf/sendfile/topo @@ -0,0 +1,8 @@ +leftSubnet:10.0. +rightSubnet:10.1. +path_0:10,30,10 +path_1:40,40,16 +changeNetem:yes +netemAt_0:2,delay 10ms limit 30 loss 20% +netemAt_0:5,delay 10ms limit 30 +topoType:MultiIf diff --git a/src/conf/sendfile/xp b/src/conf/sendfile/xp new file mode 100644 index 0000000..93223fa --- /dev/null +++ b/src/conf/sendfile/xp @@ -0,0 +1,6 @@ +xpType:sendfile +clientPcap:yes +kpms:fullmesh +kpmc:fullmesh +sched:metric +rmem:300000 300000 300000 diff --git a/src/mpExperience.py b/src/mpExperience.py index f6b99ba..4687908 100644 --- a/src/mpExperience.py +++ b/src/mpExperience.py @@ -10,6 +10,7 @@ class MpExperience: EPLOAD = "epload" NETPERF = "netperf" AB = "ab" + SENDFILE = "sendfile" def __init__(self, xpParam, mpTopo, mpConfig): self.xpParam = xpParam diff --git a/src/mpExperienceSendFile.py b/src/mpExperienceSendFile.py new file mode 100644 index 0000000..e82e344 --- /dev/null +++ b/src/mpExperienceSendFile.py @@ -0,0 +1,76 @@ +from mpExperience import MpExperience +from mpParamXp import MpParamXp +from mpPvAt import MpPvAt +import os + +class MpExperienceSendFile(MpExperience): + SERVER_LOG = "sendfile_server.log" + CLIENT_LOG = "sendfile_client.log" + WGET_BIN = "./client" + PING_OUTPUT = "ping.log" + + def __init__(self, xpParamFile, mpTopo, mpConfig): + MpExperience.__init__(self, xpParamFile, mpTopo, mpConfig) + self.loadParam() + self.ping() + MpExperience.classicRun(self) + + def ping(self): + self.mpTopo.commandTo(self.mpConfig.client, "rm " + \ + MpExperienceSendFile.PING_OUTPUT ) + count = self.xpParam.getParam(MpParamXp.PINGCOUNT) + for i in range(0, self.mpConfig.getClientInterfaceCount()): + cmd = self.pingCommand(self.mpConfig.getClientIP(i), + self.mpConfig.getServerIP(), n = count) + self.mpTopo.commandTo(self.mpConfig.client, cmd) + + def pingCommand(self, fromIP, toIP, n=5): + s = "ping -c " + str(n) + " -I " + fromIP + " " + toIP + \ + " >> " + MpExperienceSendFile.PING_OUTPUT + print(s) + return s + + def loadParam(self): + """ + todo : param LD_PRELOAD ?? + """ + self.file = self.xpParam.getParam(MpParamXp.HTTPSFILE) + self.random_size = self.xpParam.getParam(MpParamXp.HTTPSRANDOMSIZE) + + def prepare(self): + MpExperience.prepare(self) + self.mpTopo.commandTo(self.mpConfig.client, "rm " + \ + MpExperienceSendFile.CLIENT_LOG ) + self.mpTopo.commandTo(self.mpConfig.server, "rm " + \ + MpExperienceSendFile.SERVER_LOG ) + if self.file == "random": + self.mpTopo.commandTo(self.mpConfig.client, + "dd if=/dev/urandom of=random bs=1K count=" + \ + self.random_size) + + def getSendFileServerCmd(self): + s = "./server &>" + MpExperienceSendFile.SERVER_LOG + "&" + print(s) + return s + + def getSendFileClientCmd(self): + s = MpExperienceSendFile.WGET_BIN + " " + self.mpConfig.getServerIP() + " &>" + MpExperienceSendFile.CLIENT_LOG + print(s) + return s + + def clean(self): + MpExperience.clean(self) + if self.file == "random": + self.mpTopo.commandTo(self.mpConfig.client, "rm random*") + #todo use cst + #self.mpTopo.commandTo(self.mpConfig.server, "killall netcat") + + + def run(self): + cmd = self.getSendFileServerCmd() + self.mpTopo.commandTo(self.mpConfig.server, cmd) + + self.mpTopo.commandTo(self.mpConfig.client, "sleep 0.1") + cmd = self.getSendFileClientCmd() + self.mpTopo.commandTo(self.mpConfig.client, cmd) + self.mpTopo.commandTo(self.mpConfig.client, "sleep 2") diff --git a/src/mpXpRunner.py b/src/mpXpRunner.py index 3afe343..48fec28 100644 --- a/src/mpXpRunner.py +++ b/src/mpXpRunner.py @@ -10,6 +10,7 @@ from mpExperienceNCPV import MpExperienceNCPV from mpExperienceNC import MpExperienceNC from mpExperienceHTTPS import MpExperienceHTTPS from mpExperienceHTTP import MpExperienceHTTP +from mpExperienceSendFile import MpExperienceSendFile from mpExperienceEpload import MpExperienceEpload from mpExperienceNetperf import MpExperienceNetperf from mpExperienceAb import MpExperienceAb @@ -95,6 +96,9 @@ class MpXpRunner: elif xp == MpExperience.AB: MpExperienceAb(self.xpParam, self.mpTopo, self.mpTopoConfig) + elif xp == MpExperience.SENDFILE: + MpExperienceSendFile(self.xpParam, self.mpTopo, + self.mpTopoConfig) else: print("Unfound xp type..." + xp)