wip
Signed-off-by: Benjamin Hesmans <benjamin.hesmans@uclouvain.be>
This commit is contained in:
parent
0974ce2afc
commit
454ac02886
@ -1,6 +1,6 @@
|
||||
desc:Simple configuration with two para link
|
||||
leftSubnet:xxx
|
||||
rightSubnet:yyy
|
||||
leftSubnet:5.5.
|
||||
rightSubnet:6.6.
|
||||
midSubnet:zzz
|
||||
#path_x:delay,queueSize(may be calc),bw
|
||||
error
|
||||
|
38
src/mpConfig.py
Normal file
38
src/mpConfig.py
Normal file
@ -0,0 +1,38 @@
|
||||
class MpConfig:
|
||||
def __init__(self, topo, param):
|
||||
self.topo = topo
|
||||
self.param = param
|
||||
|
||||
def interfaceUpCommand(self, interfaceName, ip, subnet):
|
||||
s = "ifconfig " + interfaceName + " " + ip + " netmask " + \
|
||||
subnet
|
||||
print(s)
|
||||
return s
|
||||
|
||||
def addRouteTableCommand(self, fromIP, id):
|
||||
s = "ip rule add from " + fromIP + " table " + str(id + 1)
|
||||
print(s)
|
||||
return s
|
||||
|
||||
def addRouteScopeLinkCommand(self, network, interfaceName, id):
|
||||
s = "ip route add " + network + " dev " + interfaceName + \
|
||||
" scope link table " + str(id + 1)
|
||||
print(s)
|
||||
return s
|
||||
|
||||
def addRouteDefaultCommand(self, via, id):
|
||||
s = "ip route add default via " + via + " table " + str(id + 1)
|
||||
print(s)
|
||||
return s
|
||||
|
||||
def addRouteDefaultGlobalCommand(self, via, interfaceName):
|
||||
s = "ip route add default scope global nexthop via " + via + \
|
||||
" dev " + interfaceName
|
||||
print(s)
|
||||
return s
|
||||
|
||||
def addRouteDefaultSimple(self, via):
|
||||
s = "ip route add default via " + via
|
||||
print(s)
|
||||
return s
|
||||
|
@ -8,6 +8,13 @@ class MpLinkCharacteristics:
|
||||
self.queueSize = queueSize
|
||||
self.bandwidth = bandwidth
|
||||
|
||||
def asDict(self):
|
||||
d = {}
|
||||
d['delay'] = self.delay
|
||||
d['queueSize'] = self.queueSize
|
||||
d['bandwidth'] = self.bandwidth
|
||||
return d
|
||||
|
||||
def __str__(self):
|
||||
s = "Link id : " + str(self.id) + "\n"
|
||||
s = s + "\tDelay : " + str(self.delay) + "\n"
|
||||
|
@ -1,5 +1,36 @@
|
||||
from mininet.topo import Topo
|
||||
from mininet.net import Mininet
|
||||
from mininet.link import TCLink
|
||||
from mininet.cli import CLI
|
||||
|
||||
class MpMininetBuilder(Topo):
|
||||
def __init__(self):
|
||||
Topo.__init__( self )
|
||||
self.net = None
|
||||
|
||||
def commandTo(self, who, cmd):
|
||||
who.cmd(cmd)
|
||||
|
||||
def startNetwork(self):
|
||||
self.net = Mininet(topo=self,link=TCLink)
|
||||
self.net.start()
|
||||
|
||||
def getCLI(self):
|
||||
if self.net is None:
|
||||
print("Can not get the CLI")
|
||||
else:
|
||||
CLI(self.net)
|
||||
|
||||
def getHost(self, who):
|
||||
if self.net is None:
|
||||
print("Network not available....")
|
||||
raise Exception("Network not ready");
|
||||
else:
|
||||
return self.net.getNodeByName(who)
|
||||
|
||||
def stopNetwork(self):
|
||||
if self.net is None:
|
||||
print("Could not stop network... Nothing to stop)")
|
||||
else:
|
||||
self.net.stop()
|
||||
|
||||
|
99
src/mpMultiInterfaceConfig.py
Normal file
99
src/mpMultiInterfaceConfig.py
Normal file
@ -0,0 +1,99 @@
|
||||
from mpConfig import MpConfig
|
||||
from mpMultiInterfaceTopo import MpMultiInterfaceTopo
|
||||
from mpParamTopo import MpParamTopo
|
||||
from mpTopo import MpTopo
|
||||
|
||||
class MpMultiInterfaceConfig(MpConfig):
|
||||
def __init__(self, topo, param):
|
||||
MpConfig.__init__(self, topo, param)
|
||||
|
||||
def configureNetwork(self):
|
||||
self.configureInterfaces()
|
||||
self.configureRoute()
|
||||
|
||||
def configureRoute(self):
|
||||
i = 0
|
||||
for l in self.topo.switch:
|
||||
cmd = self.addRouteTableCommand(self.getClientIP(i), i)
|
||||
self.topo.commandTo(self.client, cmd)
|
||||
|
||||
cmd = self.addRouteScopeLinkCommand(
|
||||
self.getClientSubnet(i),
|
||||
self.getClientInterface(i), i)
|
||||
self.topo.commandTo(self.client, cmd)
|
||||
|
||||
cmd = self.addRouteDefaultCommand(self.getRouterIPSwitch(i),
|
||||
i)
|
||||
self.topo.commandTo(self.client, cmd)
|
||||
i = i + 1
|
||||
|
||||
cmd = self.addRouteDefaultGlobalCommand(self.getRouterIPSwitch(0),
|
||||
self.getClientInterface(0))
|
||||
self.topo.commandTo(self.client, cmd)
|
||||
|
||||
cmd = self.addRouteDefaultSimple(self.getRouterIPServer())
|
||||
self.topo.commandTo(self.server, cmd)
|
||||
|
||||
|
||||
def configureInterfaces(self):
|
||||
self.client = self.topo.getHost(MpTopo.clientName)
|
||||
self.server = self.topo.getHost(MpTopo.serverName)
|
||||
self.router = self.topo.getHost(MpTopo.routerName)
|
||||
i = 0
|
||||
netmask = "255.255.255.0"
|
||||
for l in self.topo.switch:
|
||||
cmd = self.interfaceUpCommand(
|
||||
self.getClientInterface(i),
|
||||
self.getClientIP(i), netmask)
|
||||
self.topo.commandTo(self.client, cmd)
|
||||
|
||||
cmd = self.interfaceUpCommand(
|
||||
self.getRouterInterfaceSwitch(i),
|
||||
self.getRouterIPSwitch(i), netmask)
|
||||
self.topo.commandTo(self.router, cmd)
|
||||
i = i + 1
|
||||
|
||||
cmd = self.interfaceUpCommand(self.getRouterInterfaceServer(),
|
||||
self.getRouterIPServer(), netmask)
|
||||
self.topo.commandTo(self.router, cmd)
|
||||
|
||||
cmd = self.interfaceUpCommand(self.getServerInterface(),
|
||||
self.getServerIP(), netmask)
|
||||
self.topo.commandTo(self.server, cmd)
|
||||
|
||||
def getClientIP(self, interfaceID):
|
||||
lSubnet = self.param.getParam(MpParamTopo.LSUBNET)
|
||||
clientIP = lSubnet + str(interfaceID) + ".1"
|
||||
return clientIP
|
||||
|
||||
def getClientSubnet(self, interfaceID):
|
||||
lSubnet = self.param.getParam(MpParamTopo.LSUBNET)
|
||||
clientSubnet = lSubnet + str(interfaceID) + ".0/24"
|
||||
return clientSubnet
|
||||
|
||||
def getRouterIPSwitch(self, interfaceID):
|
||||
lSubnet = self.param.getParam(MpParamTopo.LSUBNET)
|
||||
routerIP = lSubnet + str(interfaceID) + ".2"
|
||||
return routerIP
|
||||
|
||||
def getRouterIPServer(self):
|
||||
rSubnet = self.param.getParam(MpParamTopo.RSUBNET)
|
||||
routerIP = rSubnet + "0.2"
|
||||
return routerIP
|
||||
|
||||
def getServerIP(self):
|
||||
rSubnet = self.param.getParam(MpParamTopo.RSUBNET)
|
||||
serverIP = rSubnet + "0.1"
|
||||
return serverIP
|
||||
|
||||
def getRouterInterfaceServer(self):
|
||||
return self.getRouterInterfaceSwitch(len(self.topo.switch))
|
||||
|
||||
def getClientInterface(self, interfaceID):
|
||||
return MpTopo.clientName + "-eth" + str(interfaceID)
|
||||
|
||||
def getRouterInterfaceSwitch(self, interfaceID):
|
||||
return MpTopo.routerName + "-eth" + str(interfaceID)
|
||||
|
||||
def getServerInterface(self):
|
||||
return MpTopo.serverName + "-eth0"
|
@ -4,13 +4,19 @@ class MpMultiInterfaceTopo(MpTopo):
|
||||
def __init__(self, topoBuilder, parameterFile):
|
||||
MpTopo.__init__(self,topoBuilder, parameterFile)
|
||||
print("Hello from topo multi if")
|
||||
self.addHost("Client")
|
||||
self.addHost("Server")
|
||||
self.client = self.addHost(MpTopo.clientName)
|
||||
self.server = self.addHost(MpTopo.serverName)
|
||||
self.router = self.addHost(MpTopo.routerName)
|
||||
self.switch = []
|
||||
for l in self.topoParam.linkCharacteristics:
|
||||
self.addOneSwitchPerLink(l)
|
||||
self.switch.append(self.addOneSwitchPerLink(l))
|
||||
self.addLink(self.client,self.switch[-1])
|
||||
self.addLink(self.switch[-1],self.router, **l.asDict())
|
||||
self.addLink(self.router, self.server)
|
||||
|
||||
def addOneSwitchPerLink(self, link):
|
||||
self.addSwitch("sw" + str(link.id))
|
||||
return self.addSwitch(MpMultiInterfaceTopo.switchNamePrefix +
|
||||
str(link.id))
|
||||
|
||||
def __str__(self):
|
||||
s = "Simple multiple interface topolgy \n"
|
||||
|
@ -2,6 +2,12 @@ from mpLinkCharacteristics import MpLinkCharacteristics
|
||||
|
||||
|
||||
class MpParamTopo:
|
||||
LSUBNET = "leftSubnet"
|
||||
RSUBNET = "rightSubnet"
|
||||
defaultValue = {}
|
||||
defaultValue[LSUBNET] = "10.1."
|
||||
defaultValue[RSUBNET] = "10.2."
|
||||
|
||||
def __init__(self, paramFile):
|
||||
self.paramDic = {}
|
||||
self.linkCharacteristics = []
|
||||
@ -43,6 +49,8 @@ class MpParamTopo:
|
||||
def getParam(self, key):
|
||||
if key in self.paramDic:
|
||||
return self.paramDic[key]
|
||||
elif key in MpParamTopo.defaultValue:
|
||||
return MpParamTopo[key]
|
||||
else:
|
||||
raise Exception("Param not found " + key)
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
import sys, getopt
|
||||
from mpParamTopo import MpParamTopo
|
||||
from mpMultiInterfaceTopo import MpMultiInterfaceTopo
|
||||
from mpMultiInterfaceConfig import MpMultiInterfaceConfig
|
||||
from mpMininetBuilder import MpMininetBuilder
|
||||
|
||||
topoParamFile = None
|
||||
@ -38,7 +39,11 @@ if __name__ == '__main__':
|
||||
if topoType == "mininet":
|
||||
if param.getParam('topoType') == "MultiIf":
|
||||
mpTopo = MpMultiInterfaceTopo(MpMininetBuilder(), param)
|
||||
|
||||
mpConfig = MpMultiInterfaceConfig(mpTopo, param)
|
||||
mpTopo.startNetwork()
|
||||
mpConfig.configureNetwork()
|
||||
mpTopo.getCLI()
|
||||
mpTopo.stopNetwork()
|
||||
else:
|
||||
print("Unrecognized topo type")
|
||||
print(mpTopo)
|
||||
|
@ -1,28 +1,35 @@
|
||||
class MpTopo:
|
||||
switchNamePrefix = "s"
|
||||
clientName = "Client"
|
||||
serverName = "Server"
|
||||
routerName = "Router"
|
||||
|
||||
"""Simple MpTopo"""
|
||||
def __init__(self, topoBuilder, topoParam):
|
||||
self.topoBuilder = topoBuilder
|
||||
self.topoParam = topoParam
|
||||
|
||||
def commandTo(self, who, cmd):
|
||||
pass
|
||||
self.topoBuilder.commandTo(who, cmd)
|
||||
|
||||
def getHost(self, who):
|
||||
pass
|
||||
return self.topoBuilder.getHost(who)
|
||||
|
||||
def addHost(self, host):
|
||||
print("TODO, add host " + host)
|
||||
self.topoBuilder.addHost(host)
|
||||
pass
|
||||
return self.topoBuilder.addHost(host)
|
||||
|
||||
def addSwitch(self, switch):
|
||||
print("TODO, add switchi " + switch)
|
||||
self.topoBuilder.addSwitch(switch)
|
||||
pass
|
||||
return self.topoBuilder.addSwitch(switch)
|
||||
|
||||
def addLink(self, fromA, toB, **kwargs):
|
||||
#todo check syntax for **kwargs
|
||||
print(kwargs)
|
||||
self.topoBuilder.addLink(fromA,toB,**kwargs)
|
||||
pass
|
||||
|
||||
def getCLI(self):
|
||||
self.topoBuilder.getCLI()
|
||||
|
||||
def startNetwork(self):
|
||||
self.topoBuilder.startNetwork()
|
||||
|
||||
def stopNetwork(self):
|
||||
self.topoBuilder.stopNetwork()
|
||||
|
Loading…
Reference in New Issue
Block a user