#!/usr/bin/env python from mininet.topo import Topo from mininet.cli import CLI from mininet.net import Mininet from mininet.node import RemoteController, OVSKernelSwitch from mininet.log import setLogLevel class TowerTopo( Topo ): """Create a tower topology""" def build( self, k=4, h=6 ): spines = [] leaves = [] hosts = [] # Create the two spine switches spines.append(self.addSwitch('s1')) spines.append(self.addSwitch('s2')) # Create two links between the spine switches self.addLink(spines[0], spines[1]) #TODO add second link between spines when multi-link topos are supported #self.addLink(spines[0], spines[1]) # Now create the leaf switches, their hosts and connect them together i = 1 c = 0 while i <= k: leaves.append(self.addSwitch('s1%d' % i)) for spine in spines: self.addLink(leaves[i-1], spine) j = 1 while j <= h: hosts.append(self.addHost('h%d%d' % (i, j))) self.addLink(hosts[c], leaves[i-1]) j+=1 c+=1 i+=1 topos = { 'tower': TowerTopo } def run(): topo = TowerTopo() net = Mininet( topo=topo, controller=RemoteController, autoSetMacs=True ) net.start() CLI( net ) net.stop() if __name__ == '__main__': setLogLevel( 'info' ) run()