apply correctly policing on the MultiInterface topo
This commit is contained in:
parent
897b7ebf7f
commit
71010be455
@ -156,6 +156,15 @@ class MpExperience:
|
|||||||
cmd = l.buildNetemCmd(rif)
|
cmd = l.buildNetemCmd(rif)
|
||||||
print(cmd)
|
print(cmd)
|
||||||
self.mpTopo.commandTo(rbox, cmd)
|
self.mpTopo.commandTo(rbox, cmd)
|
||||||
|
ilif = self.mpConfig.getMidL2RIncomingInterface(i)
|
||||||
|
irif = self.mpConfig.getMidR2LIncomingInterface(i)
|
||||||
|
cmd = l.buildPolicingCmd(ilif)
|
||||||
|
print(cmd)
|
||||||
|
self.mpTopo.commandTo(lbox, cmd)
|
||||||
|
cmd = l.buildPolicingCmd(irif)
|
||||||
|
print(cmd)
|
||||||
|
self.mpTopo.commandTo(rbox, cmd)
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
@ -54,14 +54,23 @@ class MpLinkCharacteristics:
|
|||||||
cmd = cmd + "sleep " + str(n.delta)
|
cmd = cmd + "sleep " + str(n.delta)
|
||||||
cmd = cmd + " && tc qdisc del dev " + ifname + " root "
|
cmd = cmd + " && tc qdisc del dev " + ifname + " root "
|
||||||
cmd = cmd + " && tc qdisc add dev {} root handle 5:0 tbf rate {}mbit burst 15000 latency {}ms".format(ifname, self.bandwidth, self.queuingDelay)
|
cmd = cmd + " && tc qdisc add dev {} root handle 5:0 tbf rate {}mbit burst 15000 latency {}ms".format(ifname, self.bandwidth, self.queuingDelay)
|
||||||
cmd = cmd + " && tc qdisc add dev {} handle ffff: ingress".format(ifname)
|
|
||||||
cmd = cmd + " && tc filter add dev {} parent ffff: u32 match u32 0 0 police rate {}mbit burst {} drop".format(ifname, self.bandwidth, int(self.queueSize) * 1500)
|
|
||||||
|
|
||||||
cmd = cmd + " && tc qdisc add dev {} parent 5:0 handle 10: netem {} delay {}ms limit 1000000 &&".format(ifname, n.cmd, self.delay)
|
cmd = cmd + " && tc qdisc add dev {} parent 5:0 handle 10: netem {} delay {}ms limit 1000000 &&".format(ifname, n.cmd, self.delay)
|
||||||
|
|
||||||
cmd = cmd + " true &"
|
cmd = cmd + " true &"
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
|
def buildPolicingCmd(self, ifname):
|
||||||
|
cmd = ""
|
||||||
|
for n in self.netemAt:
|
||||||
|
cmd = cmd + "sleep {}".format(n.delta)
|
||||||
|
cmd = cmd + " && tc qdisc del dev {} ingress".format(ifname)
|
||||||
|
cmd = cmd + " && tc qdisc add dev {} handle ffff: ingress".format(ifname)
|
||||||
|
cmd = cmd + " && tc filter add dev {} parent fff: u32 match u32 0 0 police rate {}mbit burst {} drop && ".format(ifname, self.bandwidth, int(self.queueSize) * 1500)
|
||||||
|
|
||||||
|
cmd = cmd + " true &"
|
||||||
|
return cmd
|
||||||
|
|
||||||
def asDict(self):
|
def asDict(self):
|
||||||
d = {}
|
d = {}
|
||||||
d['bw'] = float(self.bandwidth)
|
d['bw'] = float(self.bandwidth)
|
||||||
|
@ -9,7 +9,7 @@ class MpMultiInterfaceConfig(MpConfig):
|
|||||||
|
|
||||||
def configureRoute(self):
|
def configureRoute(self):
|
||||||
i = 0
|
i = 0
|
||||||
for l in self.topo.switch:
|
for l in self.topo.switchClient:
|
||||||
cmd = self.addRouteTableCommand(self.getClientIP(i), i)
|
cmd = self.addRouteTableCommand(self.getClientIP(i), i)
|
||||||
self.topo.commandTo(self.client, cmd)
|
self.topo.commandTo(self.client, cmd)
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ class MpMultiInterfaceConfig(MpConfig):
|
|||||||
i = 0
|
i = 0
|
||||||
netmask = "255.255.255.0"
|
netmask = "255.255.255.0"
|
||||||
links = self.topo.getLinkCharacteristics()
|
links = self.topo.getLinkCharacteristics()
|
||||||
for l in self.topo.switch:
|
for l in self.topo.switchClient:
|
||||||
cmd = self.interfaceUpCommand(
|
cmd = self.interfaceUpCommand(
|
||||||
self.getClientInterface(i),
|
self.getClientInterface(i),
|
||||||
self.getClientIP(i), netmask)
|
self.getClientIP(i), netmask)
|
||||||
@ -52,6 +52,10 @@ class MpMultiInterfaceConfig(MpConfig):
|
|||||||
self.getClientInterface(i))
|
self.getClientInterface(i))
|
||||||
self.topo.commandTo(self.client, cmd)
|
self.topo.commandTo(self.client, cmd)
|
||||||
|
|
||||||
|
i = i + 1
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
for l in self.topo.switchServer:
|
||||||
cmd = self.interfaceUpCommand(
|
cmd = self.interfaceUpCommand(
|
||||||
self.getRouterInterfaceSwitch(i),
|
self.getRouterInterfaceSwitch(i),
|
||||||
self.getRouterIPSwitch(i), netmask)
|
self.getRouterIPSwitch(i), netmask)
|
||||||
@ -99,10 +103,10 @@ class MpMultiInterfaceConfig(MpConfig):
|
|||||||
return serverIP
|
return serverIP
|
||||||
|
|
||||||
def getClientInterfaceCount(self):
|
def getClientInterfaceCount(self):
|
||||||
return len(self.topo.switch)
|
return len(self.topo.switchClient)
|
||||||
|
|
||||||
def getRouterInterfaceServer(self):
|
def getRouterInterfaceServer(self):
|
||||||
return self.getRouterInterfaceSwitch(len(self.topo.switch))
|
return self.getRouterInterfaceSwitch(len(self.topo.switchServer))
|
||||||
|
|
||||||
def getClientInterface(self, interfaceID):
|
def getClientInterface(self, interfaceID):
|
||||||
return MpTopo.clientName + "-eth" + str(interfaceID)
|
return MpTopo.clientName + "-eth" + str(interfaceID)
|
||||||
@ -113,14 +117,26 @@ class MpMultiInterfaceConfig(MpConfig):
|
|||||||
def getServerInterface(self):
|
def getServerInterface(self):
|
||||||
return MpTopo.serverName + "-eth0"
|
return MpTopo.serverName + "-eth0"
|
||||||
|
|
||||||
|
def getSwitchClientName(self, id):
|
||||||
|
return MpTopo.switchNamePrefix + str(2 * id)
|
||||||
|
|
||||||
|
def getSwitchServerName(self, id):
|
||||||
|
return MpTopo.switchNamePrefix + str(2 * id + 1)
|
||||||
|
|
||||||
def getMidLeftName(self, id):
|
def getMidLeftName(self, id):
|
||||||
return MpTopo.switchNamePrefix + str(id)
|
return self.getSwitchClientName(id)
|
||||||
|
|
||||||
def getMidRightName(self, id):
|
def getMidRightName(self, id):
|
||||||
return MpTopo.routerName
|
return self.getSwitchServerName(id)
|
||||||
|
|
||||||
def getMidL2RInterface(self, id):
|
def getMidL2RInterface(self, id):
|
||||||
return self.getMidLeftName(id) + "-eth2"
|
return self.getMidLeftName(id) + "-eth2"
|
||||||
|
|
||||||
def getMidR2LInterface(self, id):
|
def getMidR2LInterface(self, id):
|
||||||
return self.getMidRightName(id) + "-eth" + str(id)
|
return self.getMidRightName(id) + "-eth1"
|
||||||
|
|
||||||
|
def getMidL2RIncomingInterface(self, id):
|
||||||
|
return self.getMidLeftName(id) + "-eth1"
|
||||||
|
|
||||||
|
def getMidR2LIncomingInterface(self, id):
|
||||||
|
return self.getMidRightName(id) + "-eth2"
|
||||||
|
@ -7,16 +7,23 @@ class MpMultiInterfaceTopo(MpTopo):
|
|||||||
self.client = self.addHost(MpTopo.clientName)
|
self.client = self.addHost(MpTopo.clientName)
|
||||||
self.server = self.addHost(MpTopo.serverName)
|
self.server = self.addHost(MpTopo.serverName)
|
||||||
self.router = self.addHost(MpTopo.routerName)
|
self.router = self.addHost(MpTopo.routerName)
|
||||||
self.switch = []
|
self.switchClient = []
|
||||||
|
self.switchServer = []
|
||||||
for l in self.topoParam.linkCharacteristics:
|
for l in self.topoParam.linkCharacteristics:
|
||||||
self.switch.append(self.addOneSwitchPerLink(l))
|
self.switchClient.append(self.addSwitch1ForLink(l))
|
||||||
self.addLink(self.client,self.switch[-1])
|
self.addLink(self.client,self.switchClient[-1])
|
||||||
self.addLink(self.switch[-1],self.router, **l.asDict())
|
self.switchServer.append(self.addSwitch2ForLink(l))
|
||||||
|
self.addLink(self.switchClient[-1], self.switchServer[-1], **l.asDict())
|
||||||
|
self.addLink(self.switchServer[-1],self.router)
|
||||||
self.addLink(self.router, self.server)
|
self.addLink(self.router, self.server)
|
||||||
|
|
||||||
def addOneSwitchPerLink(self, link):
|
def addSwitch1ForLink(self, link):
|
||||||
return self.addSwitch(MpMultiInterfaceTopo.switchNamePrefix +
|
return self.addSwitch(MpMultiInterfaceTopo.switchNamePrefix +
|
||||||
str(link.id))
|
str(2 * link.id))
|
||||||
|
|
||||||
|
def addSwitch2ForLink(self, link):
|
||||||
|
return self.addSwitch(MpMultiInterfaceTopo.switchNamePrefix +
|
||||||
|
str(2 * link.id + 1))
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
s = "Simple multiple interface topolgy \n"
|
s = "Simple multiple interface topolgy \n"
|
||||||
@ -26,11 +33,11 @@ class MpMultiInterfaceTopo(MpTopo):
|
|||||||
if i == n // 2:
|
if i == n // 2:
|
||||||
if n % 2 == 0:
|
if n % 2 == 0:
|
||||||
s = s + "c r-----s\n"
|
s = s + "c r-----s\n"
|
||||||
s = s + "|-----sw-----|\n"
|
s = s + "|--sw----sw--|\n"
|
||||||
else:
|
else:
|
||||||
s = s + "c-----sw-----r-----s\n"
|
s = s + "c--sw----sw--r-----s\n"
|
||||||
else:
|
else:
|
||||||
s = s + "|-----sw-----|\n"
|
s = s + "|--sw----sw--|\n"
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
return s
|
return s
|
||||||
|
Loading…
Reference in New Issue
Block a user