def updateRoutes( self, lsAlgorithm, switches, linkWeights ): display.section("Adding Flow table entries...") log.infoln('Switch\t Protocols\t Dst-Address\t Actions') log.infoln('-------------------------------------------------------') weights = [ ( 's'+str(i[0]), 's'+str(i[1]), i[2] ) for i in linkWeights ] # For each switch for sourceSwitch in switches: routes = lsAlgorithm( sourceSwitch, weights ) # Compute the least cost route for each destination for route in routes: # Least cost paths to destinations dstSwitch = last(route) dstHost = 'h%s' % dstSwitch[1:] dstAddress = self.IP(dstHost) ## Switches to the connected host flows srcHost = 'h%s' % sourceSwitch[1:] srcAddress = self.IP(srcHost) (iPort, oPort) = self.connectionPorts( srcHost, sourceSwitch ) log.debugln('Source:', (sourceSwitch, srcHost, srcAddress, oPort)) log.debugln('Destination', (dstSwitch, dstHost, dstAddress, oPort)) self.flows.add( sourceSwitch, srcAddress, oPort ) ## Switches to switches flows prev = sourceSwitch for i in range( 1, len(route) ): current = route[i] (iPort, oPort) = self.connectionPorts( prev, current ) self.flows.add( prev, dstAddress, iPort ) prev = current
def add(self, switch, dstAddress, oPort): # Log example: 's1 ARP, IP 192.168.1.1 output:3' log.infoln('%s\t\t %s\t %s\t output:%s' % (switch, ', '.join(self.protocols), dstAddress, oPort)) return [ self.do('add-flow %s %s,nw_dst=%s,actions=output:%s' % (switch, protocol.lower(), dstAddress, oPort)) for protocol in self.protocols ]
def prepareNetwork(self, preset, **kwargs): log.do("Prepare TestNet from %s." % preset) topology = preset() log.infoln(topology.longDescription()) network = Mininet(topo=topology, controller=RemoteController('c0', ip='127.0.0.1', port=6653), ipBase='10.10.0.0/16', autoSetMacs=True, **kwargs) log.infoln("Built TestNet topology from template class %s" % type(topology)) log.done("Network<id%s> is ready to start." % id(network)) return network
def do_weights( self, _ ): display.section("Weights") log.infoln('Link\t\tWeight') log.infoln('--------------------') for (i, j, w) in self.mn.topo._slinks: log.infoln('{s%s, s%s}\t%s' % (i, j, w))
def clean( self ): cleanup() log.infoln('Cleaned up old files')
def enableNetworkAddressTranslation(self, network): log.infoln("Adding and configuring NAT...") network.addNAT().configDefault()
def reassignAddresses(self, network): log.infoln('Reassigning host IP addresses.') for i in irange(1, len(network.switches)): switch = network.nameToNode[s(i)] host = network.nameToNode[h(i)] host.setIP('10.10.%s.%s' % (i, i))