#!/usr/bin/env python

"""
Copyright 2015 Open Networking Foundation (ONF)

Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>

    TestON is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 2 of the License, or
    (at your option) any later version.

    TestON is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with TestON.  If not, see <http://www.gnu.org/licenses/>.
"""

from mininet.topo import Topo

class ObeliskTopo( Topo ):
    def __init__( self ):
        Topo.__init__( self )
        topSwitch = self.addSwitch('s1',dpid='1000'.zfill(16))
        leftTopSwitch = self.addSwitch('s2',dpid='2000'.zfill(16))
        rightTopSwitch = self.addSwitch('s5',dpid='5000'.zfill(16))
        leftBotSwitch = self.addSwitch('s3',dpid='3000'.zfill(16))
        rightBotSwitch = self.addSwitch('s6',dpid='6000'.zfill(16))
        midBotSwitch = self.addSwitch('s28',dpid='2800'.zfill(16))

        topHost = self.addHost( 'h1' )
        leftTopHost = self.addHost('h2')
        rightTopHost = self.addHost('h5')
        leftBotHost = self.addHost('h3')
        rightBotHost = self.addHost('h6')
        midBotHost = self.addHost('h28')
        self.addLink(topSwitch,topHost)
        self.addLink(leftTopSwitch,leftTopHost)
        self.addLink(rightTopSwitch,rightTopHost)
        self.addLink(leftBotSwitch,leftBotHost)
        self.addLink(rightBotSwitch,rightBotHost)
        self.addLink(midBotSwitch,midBotHost)
        self.addLink(leftTopSwitch,rightTopSwitch)
        self.addLink(topSwitch,leftTopSwitch)
        self.addLink(topSwitch,rightTopSwitch)
        self.addLink(leftTopSwitch,leftBotSwitch)
        self.addLink(rightTopSwitch,rightBotSwitch)
        self.addLink(leftBotSwitch,midBotSwitch)
        self.addLink(midBotSwitch,rightBotSwitch)

        agg1Switch = self.addSwitch('s4',dpid = '3004'.zfill(16))
        agg2Switch = self.addSwitch('s7',dpid = '6007'.zfill(16))
        agg1Host = self.addHost('h4')
        agg2Host = self.addHost('h7')
        self.addLink(agg1Switch,agg1Host)
        self.addLink(agg2Switch,agg2Host)
        self.addLink(agg1Switch, leftBotSwitch)
        self.addLink(agg2Switch, rightBotSwitch)

        for i in range(10):
            num = str(i+8)
            switch = self.addSwitch('s'+num,dpid = ('30'+num.zfill(2)).zfill(16))
            host = self.addHost('h'+num)
            self.addLink(switch, host)
            self.addLink(switch, agg1Switch)

        for i in range(10):
            num = str(i+18)
            switch = self.addSwitch('s'+num,dpid = ('60'+num.zfill(2)).zfill(16))
            host = self.addHost('h'+num)
            self.addLink(switch, host)
            self.addLink(switch, agg2Switch)

topos = { 'obelisk': (lambda: ObeliskTopo() ) }

def run():
    topo = ObeliskTopo()
    net = Mininet( topo=topo, controller=RemoteController, autoSetMacs=True )
    net.start()
    CLI( net )
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    run()
