#!/usr/bin/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/>.
"""

"""
Set up the SDN-IP topology as same as it on Internet2
"""

"""
AS 64513, (SDN AS)
AS 64514, reachable by 10.0.4.1
AS 64515, reachable by 10.0.5.1
AS 64516, reachable by 10.0.6.1
"""

from mininet.net import Mininet
from mininet.log import setLogLevel, info
from mininet.cli import CLI
from mininet.node import Host, RemoteController
from mininet.topo import Topo
from mininet.util import quietRun

QUAGGA_DIR = '/usr/lib/quagga'
QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
QUAGGA_CONFIG_DIR = '~/OnosSystemTest/TestON/tests/USECASE/USECASE_SdnipFunction/dependencies/'
# onos1IP = '10.254.1.201'
numSw = 39

class VLANHost( Host ):
    def config( self, vlan=100, intfName=None, **params ):
        r = super( Host, self ).config( **params )
        intf = self.intf( intfName )
        self.cmd( 'ifconfig %s inet 0' % intf )
        self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
        self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
        newName = '%s.%d' % ( intf, vlan )
        intf.name = newName
        self.nameToIntf[ newName ] = intf
        return r


class SDNTopo( Topo ):
    "SDN Topology"

    def __init__( self, *args, **kwargs ):

        Topo.__init__( self, *args, **kwargs )

        # BGP peer hosts
        p64514 = self.addHost( 'p64514' )
        p64515 = self.addHost( 'p64515' )
        p64516 = self.addHost( 'p64516' )

        p64517 = self.addHost( 'p64517', cls=VLANHost, vlan=20 )
        p64518 = self.addHost( 'p64518', cls=VLANHost, vlan=20 )
        p64519 = self.addHost( 'p64519', cls=VLANHost, vlan=10 )
        p64520 = self.addHost( 'p64520', cls=VLANHost, vlan=10 )

        '''
        sw1 = self.addSwitch( 'SEAT', dpid = '00000000000000a1' )
        sw2 = self.addSwitch( 'PORT', dpid = '00000000000000a2' )
        sw3 = self.addSwitch( 'SUNN', dpid = '00000000000000a3' )
        sw4 = self.addSwitch( 'RENO', dpid = '00000000000000a4' )
        sw5 = self.addSwitch( 'LOSA', dpid = '00000000000000a5' )
        sw6 = self.addSwitch( 'MISS', dpid = '00000000000000a6' )
        sw7 = self.addSwitch( 'LASV', dpid = '00000000000000a7' )
        sw8 = self.addSwitch( 'SALT', dpid = '00000000000000a8' )
        sw9 = self.addSwitch( 'PHOE', dpid = '00000000000000a9' )
        sw10 = self.addSwitch( 'TUCS', dpid = '0000000000000a10' )
        sw11 = self.addSwitch( 'DENV', dpid = '0000000000000a11' )
        sw12 = self.addSwitch( 'ELPA', dpid = '0000000000000a12' )
        sw13 = self.addSwitch( 'MINN', dpid = '0000000000000a13' )
        sw14 = self.addSwitch( 'KANS', dpid = '0000000000000a14' )
        sw15 = self.addSwitch( 'TULS', dpid = '0000000000000a15' )
        sw16 = self.addSwitch( 'DALL', dpid = '0000000000000a16' )
        sw17 = self.addSwitch( 'HOUH', dpid = '0000000000000a17' )
        sw18 = self.addSwitch( 'COLU', dpid = '0000000000000a18' )
        sw19 = self.addSwitch( 'JCSN', dpid = '0000000000000a19' )
        sw20 = self.addSwitch( 'BATO', dpid = '0000000000000a20' )
        sw21 = self.addSwitch( 'EQCH', dpid = '0000000000000a21' )
        sw22 = self.addSwitch( 'STAR', dpid = '0000000000000a22' )
        sw23 = self.addSwitch( 'CHIC', dpid = '0000000000000a23' )
        sw24 = self.addSwitch( 'INDI', dpid = '0000000000000a24' )
        sw25 = self.addSwitch( 'CINC', dpid = '0000000000000a25' )
        sw26 = self.addSwitch( 'LOUI', dpid = '0000000000000a26' )
        sw27 = self.addSwitch( 'ATLA', dpid = '0000000000000a27' )
        sw28 = self.addSwitch( 'JACK', dpid = '0000000000000a28' )
        sw29 = self.addSwitch( 'CLEV', dpid = '0000000000000a29' )
        sw30 = self.addSwitch( 'PITT', dpid = '0000000000000a30' )
        sw31 = self.addSwitch( 'ASHB', dpid = '0000000000000a31' )
        sw32 = self.addSwitch( 'WASH', dpid = '0000000000000a32' )
        sw33 = self.addSwitch( 'RALE', dpid = '0000000000000a33' )
        sw34 = self.addSwitch( 'CHAR', dpid = '0000000000000a34' )
        sw35 = self.addSwitch( 'ALBA', dpid = '0000000000000a35' )
        sw36 = self.addSwitch( 'BOST', dpid = '0000000000000a36' )
        sw37 = self.addSwitch( 'HART', dpid = '0000000000000a37' )
        sw38 = self.addSwitch( 'NEWY', dpid = '0000000000000a38' )
        sw39 = self.addSwitch( 'PHIL', dpid = '0000000000000a39' )
        '''
        sw1 = self.addSwitch( 'sw1', dpid = '00000000000000a1' )
        sw2 = self.addSwitch( 'sw2', dpid = '00000000000000a2' )
        sw3 = self.addSwitch( 'sw3', dpid = '00000000000000a3' )
        sw4 = self.addSwitch( 'sw4', dpid = '00000000000000a4' )
        sw5 = self.addSwitch( 'sw5', dpid = '00000000000000a5' )
        sw6 = self.addSwitch( 'sw6', dpid = '00000000000000a6' )
        sw7 = self.addSwitch( 'sw7', dpid = '00000000000000a7' )
        sw8 = self.addSwitch( 'sw8', dpid = '00000000000000a8' )
        sw9 = self.addSwitch( 'sw9', dpid = '00000000000000a9' )
        sw10 = self.addSwitch( 'sw10', dpid = '0000000000000a10' )
        sw11 = self.addSwitch( 'sw11', dpid = '0000000000000a11' )
        sw12 = self.addSwitch( 'sw12', dpid = '0000000000000a12' )
        sw13 = self.addSwitch( 'sw13', dpid = '0000000000000a13' )
        sw14 = self.addSwitch( 'sw14', dpid = '0000000000000a14' )
        sw15 = self.addSwitch( 'sw15', dpid = '0000000000000a15' )
        sw16 = self.addSwitch( 'sw16', dpid = '0000000000000a16' )
        sw17 = self.addSwitch( 'sw17', dpid = '0000000000000a17' )
        sw18 = self.addSwitch( 'sw18', dpid = '0000000000000a18' )
        sw19 = self.addSwitch( 'sw19', dpid = '0000000000000a19' )
        sw20 = self.addSwitch( 'sw20', dpid = '0000000000000a20' )
        sw21 = self.addSwitch( 'sw21', dpid = '0000000000000a21' )
        sw22 = self.addSwitch( 'sw22', dpid = '0000000000000a22' )
        sw23 = self.addSwitch( 'sw23', dpid = '0000000000000a23' )
        sw24 = self.addSwitch( 'sw24', dpid = '0000000000000a24' )
        sw25 = self.addSwitch( 'sw25', dpid = '0000000000000a25' )
        sw26 = self.addSwitch( 'sw26', dpid = '0000000000000a26' )
        sw27 = self.addSwitch( 'sw27', dpid = '0000000000000a27' )
        sw28 = self.addSwitch( 'sw28', dpid = '0000000000000a28' )
        sw29 = self.addSwitch( 'sw29', dpid = '0000000000000a29' )
        sw30 = self.addSwitch( 'sw30', dpid = '0000000000000a30' )
        sw31 = self.addSwitch( 'sw31', dpid = '0000000000000a31' )
        sw32 = self.addSwitch( 'sw32', dpid = '0000000000000a32' )
        sw33 = self.addSwitch( 'sw33', dpid = '0000000000000a33' )
        sw34 = self.addSwitch( 'sw34', dpid = '0000000000000a34' )
        sw35 = self.addSwitch( 'sw35', dpid = '0000000000000a35' )
        sw36 = self.addSwitch( 'sw36', dpid = '0000000000000a36' )
        sw37 = self.addSwitch( 'sw37', dpid = '0000000000000a37' )
        sw38 = self.addSwitch( 'sw38', dpid = '0000000000000a38' )
        sw39 = self.addSwitch( 'sw39', dpid = '0000000000000a39' )


        # Add a layer2 switch for control plane connectivity
        # This switch isn't part of the SDN topology
        # We'll use the ovs-controller to turn this into a learning switch
        swCtl100 = self.addSwitch( 'swCtl100', dpid = '0000000000000100' )


        # BGP speaker hosts
        spk1 = self.addHost( 'spk1' )
        spk2 = self.addHost( 'spk2', cls=VLANHost, vlan=20 )
        spk3 = self.addHost( 'spk3', cls=VLANHost, vlan=10 )

        root = self.addHost( 'root', inNamespace = False , ip = '0' )

        # hosts behind each AS
        h64514 = self.addHost( 'h64514' )
        h64515 = self.addHost( 'h64515' )
        h64516 = self.addHost( 'h64516' )

        #VLAN hosts behind each AS
        h64517 = self.addHost( 'h64517', cls=VLANHost, vlan=20 )
        h64518 = self.addHost( 'h64518', cls=VLANHost, vlan=20 )
        h64519 = self.addHost( 'h64519', cls=VLANHost, vlan=10 )
        h64520 = self.addHost( 'h64520', cls=VLANHost, vlan=10 )

        self.addLink( 'spk1', sw24 )
        self.addLink( 'spk2', sw24 )
        self.addLink( 'spk3', sw24 )

        # connect all switches
        self.addLink( sw1, sw2 )
        self.addLink( sw1, sw6 )
        self.addLink( sw1, sw8 )
        self.addLink( sw2, sw3 )
        self.addLink( sw3, sw4 )
        self.addLink( sw3, sw5 )
        self.addLink( sw4, sw8 )
        self.addLink( sw5, sw7 )
        self.addLink( sw5, sw9 )
        self.addLink( sw6, sw13 )
        self.addLink( sw7, sw8 )
        self.addLink( sw8, sw11 )
        self.addLink( sw9, sw10 )
        self.addLink( sw10, sw12 )
        self.addLink( sw11, sw12 )
        self.addLink( sw11, sw14 )
        self.addLink( sw12, sw17 )
        self.addLink( sw13, sw14 )
        self.addLink( sw13, sw21 )
        self.addLink( sw14, sw15 )
        self.addLink( sw14, sw18 )
        self.addLink( sw14, sw23 )
        self.addLink( sw15, sw16 )
        self.addLink( sw16, sw17 )
        self.addLink( sw17, sw19 )
        self.addLink( sw17, sw20 )
        self.addLink( sw18, sw23 )
        self.addLink( sw19, sw27 )
        self.addLink( sw20, sw28 )
        self.addLink( sw21, sw22 )
        self.addLink( sw21, sw29 )
        self.addLink( sw22, sw23 )
        self.addLink( sw23, sw24 )
        self.addLink( sw23, sw31 )
        self.addLink( sw24, sw25 )
        self.addLink( sw25, sw26 )
        self.addLink( sw26, sw27 )
        self.addLink( sw27, sw28 )
        self.addLink( sw27, sw34 )
        self.addLink( sw29, sw30 )
        self.addLink( sw29, sw35 )
        self.addLink( sw30, sw31 )
        self.addLink( sw31, sw32 )
        self.addLink( sw32, sw33 )
        self.addLink( sw32, sw39 )
        self.addLink( sw33, sw34 )
        self.addLink( sw35, sw36 )
        self.addLink( sw36, sw37 )
        self.addLink( sw37, sw38 )
        self.addLink( sw38, sw39 )

        # connection between switches and peers
        self.addLink( p64514, sw32 )
        self.addLink( p64515, sw8 )
        self.addLink( p64516, sw28 )

        self.addLink( p64517, sw7 )
        self.addLink( p64518, sw9 )
        self.addLink( p64519, sw5 )
        self.addLink( p64520, sw5 )  # should be sw5

        # connection between BGP peer and hosts behind the BGP peer
        self.addLink( p64514, h64514 )
        self.addLink( p64515, h64515 )
        self.addLink( p64516, h64516 )

        self.addLink( p64517, h64517 )
        self.addLink( p64518, h64518 )
        self.addLink( p64519, h64519 )
        self.addLink( p64520, h64520 )


        # Internal Connection To Hosts
        self.addLink( swCtl100, p64514 )
        self.addLink( swCtl100, p64515 )
        self.addLink( swCtl100, p64516 )

        self.addLink( swCtl100, p64517 )
        self.addLink( swCtl100, p64518 )
        self.addLink( swCtl100, p64519 )
        self.addLink( swCtl100, p64520 )

        self.addLink( swCtl100, spk1 )
        self.addLink( swCtl100, spk2 )
        self.addLink( swCtl100, spk3 )


        # add h64514 to control plane for ping test
        self.addLink( swCtl100, h64514 )
        self.addLink( swCtl100, h64517 )
        self.addLink( swCtl100, h64519 )
        self.addLink( swCtl100, root )


def startsshd( host ):
    "Start sshd on host"
    info( '*** Starting sshd\n' )
    name, intf, ip = host.name, host.defaultIntf(), host.IP()
    banner = '/tmp/%s.banner' % name
    host.cmd( 'echo "Welcome to %s at %s" >  %s' % ( name, ip, banner ) )
    host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
    info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )

def startsshds ( hosts ):
    for h in hosts:
        startsshd( h )

def stopsshd():
    "Stop *all* sshd processes with a custom banner"
    info( '*** Shutting down stale sshd/Banner processes ',
          quietRun( "pkill -9 -f Banner" ), '\n' )

def startquagga( host, num, config_file ):
    info( '*** Starting Quagga on %s\n' % host )
    host.cmd( "cd %s" % QUAGGA_CONFIG_DIR )
    zebra_cmd = \
    '%s/zebra -d -f  ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid'\
     % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
    quagga_cmd = '%s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' \
    % ( QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )

    print zebra_cmd
    print quagga_cmd

    host.cmd( zebra_cmd )
    host.cmd( quagga_cmd )

def startquaggahost5( host, num ):
    info( '*** Starting Quagga on %s\n' % host )
    zebra_cmd = \
    '%s/zebra -d -f  ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' \
    % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
    quagga_cmd = \
    '%s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid'\
     % ( QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )

    host.cmd( zebra_cmd )
    host.cmd( quagga_cmd )

def stopquagga():
    quietRun( 'sudo pkill -9 -f bgpd' )
    quietRun( 'sudo pkill -9 -f zebra' )

def sdn1net():
    topo = SDNTopo()
    info( '*** Creating network\n' )
   # time.sleep( 30 )
    net = Mininet( topo = topo, controller = RemoteController )


    spk1, spk2, spk3, p64514, p64515, p64516, p64517, p64518, p64519, p64520 = \
    net.get( 'spk1', 'spk2', 'spk3',
             'p64514', 'p64515', 'p64516', 'p64517', 'p64518', 'p64519', 'p64520' )

    # Adding addresses to host64513_1 interface connected to sw24
    # for BGP peering
    spk1.setMAC( '00:00:00:00:00:01', 'spk1-eth0' )
    spk1.cmd( 'ip addr add 10.0.4.101/24 dev spk1-eth0' )
    spk1.cmd( 'ip addr add 10.0.5.101/24 dev spk1-eth0' )
    spk1.cmd( 'ip addr add 10.0.6.101/24 dev spk1-eth0' )
    spk1.defaultIntf().setIP( '10.1.4.101/24' )
    spk1.defaultIntf().setMAC( '00:00:00:00:00:01' )

    spk2.setMAC( '00:00:00:00:00:02', 'spk2-eth0.20' )
    spk2.cmd( 'ip addr add 10.0.7.101/24 dev spk2-eth0.20' )
    spk2.cmd( 'ip addr add 10.0.8.101/24 dev spk2-eth0.20' )
    spk2.defaultIntf().setIP( '10.1.7.101/24' )
    spk2.defaultIntf().setMAC( '00:00:00:00:00:02' )

    spk3.setMAC( '00:00:00:00:00:03', 'spk3-eth0.10' )
    spk3.cmd( 'ip addr add 10.0.9.101/24 dev spk3-eth0.10' )
    spk3.cmd( 'ip addr add 10.0.20.101/24 dev spk3-eth0.10' )
    spk3.defaultIntf().setIP( '10.1.9.101/24' )
    spk3.defaultIntf().setMAC( '00:00:00:00:00:03' )

    p64517.config( vlan=20, intfName="p64517-eth1", ip="7.0.0.254" )
    p64518.config( vlan=20, intfName="p64518-eth1", ip="8.0.0.254" )
    p64519.config( vlan=10, intfName="p64519-eth1", ip="9.0.0.254" )
    p64520.config( vlan=10, intfName="p64520-eth1", ip="20.0.0.254" )

    # Net has to be start after adding the above link
    net.start()

    # setup configuration on the interface connected to switch
    p64514.cmd( "ifconfig  p64514-eth0 10.0.4.1 up" )
    p64514.setMAC( '00:00:00:00:00:04', 'p64514-eth0' )
    p64515.cmd( "ifconfig  p64515-eth0 10.0.5.1 up" )
    p64515.setMAC( '00:00:00:00:00:05', 'p64515-eth0' )
    p64516.cmd( "ifconfig  p64516-eth0 10.0.6.1 up" )
    p64516.setMAC( '00:00:00:00:00:06', 'p64516-eth0' )

    p64517.cmd( "ifconfig  p64517-eth0.20 10.0.7.1 up" )
    p64517.setMAC( '00:00:00:00:00:07', 'p64517-eth0.20' )
    p64518.cmd( "ifconfig  p64518-eth0.20 10.0.8.1 up" )
    p64518.setMAC( '00:00:00:00:00:08', 'p64518-eth0.20' )

    p64519.cmd( "ifconfig  p64519-eth0.10 10.0.9.1 up" )
    p64519.setMAC( '00:00:00:00:00:09', 'p64519-eth0.10' )
    p64520.cmd( "ifconfig  p64520-eth0.10 10.0.20.1 up" )
    p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth0.10' )

    # setup configuration on the interface connected to hosts
    p64514.setIP( "4.0.0.254", 8, "p64514-eth1" )
    p64514.setMAC( '00:00:00:00:00:44', 'p64514-eth1' )
    p64515.setIP( "5.0.0.254", 8, "p64515-eth1" )
    p64515.setMAC( '00:00:00:00:00:55', 'p64515-eth1' )
    p64516.setIP( "6.0.0.254", 8, "p64516-eth1" )
    p64516.setMAC( '00:00:00:00:00:66', 'p64516-eth1' )

    p64517.setIP( "7.0.0.254", 8, "p64517-eth1.20" )
    p64517.setMAC( '00:00:00:00:00:77', 'p64517-eth1.20' )
    p64518.setIP( "8.0.0.254", 8, "p64518-eth1.20" )
    p64518.setMAC( '00:00:00:00:00:88', 'p64518-eth1.20' )

    p64519.setIP( "9.0.0.254", 8, "p64519-eth1.10" )
    p64519.setMAC( '00:00:00:00:00:99', 'p64519-eth1.10' )
    p64520.setIP( "20.0.0.254", 8, "p64520-eth1.10" )
    p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth1.10' )


    # enable forwarding on BGP peer hosts
    p64514.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
    p64515.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
    p64516.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )

    p64517.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
    p64518.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
    p64519.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
    p64520.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )

    # config interface for control plane connectivity
    p64514.setIP( "192.168.0.4", 24, "p64514-eth2" )
    p64515.setIP( "192.168.0.5", 24, "p64515-eth2" )
    p64516.setIP( "192.168.0.6", 24, "p64516-eth2" )

    p64517.setIP( "192.168.0.7", 24, "p64517-eth2" )
    p64518.setIP( "192.168.0.8", 24, "p64518-eth2" )
    p64519.setIP( "192.168.0.9", 24, "p64519-eth2" )
    p64520.setIP( "192.168.0.20", 24, "p64520-eth2" )

    # Setup hosts in each non-SDN AS
    h64514, h64515, h64516, h64517, h64518, h64519, h64520 = \
    net.get( 'h64514', 'h64515', 'h64516', 'h64517', 'h64518', 'h64519', 'h64520' )
    h64514.cmd( 'ifconfig h64514-eth0 4.0.0.1 up' )
    h64514.cmd( 'ip route add default via 4.0.0.254' )
    h64514.setIP( '192.168.0.44', 24, 'h64514-eth1' )  # for control plane
    h64515.cmd( 'ifconfig h64515-eth0 5.0.0.1 up' )
    h64515.cmd( 'ip route add default via 5.0.0.254' )
    h64516.cmd( 'ifconfig h64516-eth0 6.0.0.1 up' )
    h64516.cmd( 'ip route add default via 6.0.0.254' )

    h64517.cmd( 'ifconfig h64517-eth0.20 7.0.0.1 up' )
    h64517.cmd( 'ip route add default via 7.0.0.254' )
    h64517.setIP( '192.168.0.77', 24, 'h64517-eth1' )  # for control plane
    h64518.cmd( 'ifconfig h64518-eth0.20 8.0.0.1 up' )
    h64518.cmd( 'ip route add default via 8.0.0.254' )

    h64519.cmd( 'ifconfig h64519-eth0.10 9.0.0.1 up' )
    h64519.cmd( 'ip route add default via 9.0.0.254' )
    h64519.setIP( '192.168.0.99', 24, 'h64519-eth1' )  # for control plane
    h64520.cmd( 'ifconfig h64520-eth0.10 20.0.0.1 up' )
    h64520.cmd( 'ip route add default via 20.0.0.254' )

    # set up swCtl100 as a learning
    swCtl100 = net.get( 'swCtl100' )
    swCtl100.cmd( 'ovs-vsctl set-controller swCtl100 none' )
    swCtl100.cmd( 'ovs-vsctl set-fail-mode swCtl100 standalone' )

    # connect all switches to controller
    '''
    for i in range ( 1, numSw + 1 ):
        swX = net.get( 'sw%s' % ( i ) )
        swX.cmd( 'ovs-vsctl set-controller sw%s tcp:%s:6653' % ( i, onos1IP ) )
    '''
    # Start Quagga as the external BGP routers
    '''
    for i in range ( 64514, 64516 + 1 ):
        startquagga( 'peer%s' % ( i ), i, 'quagga%s.conf' % ( i ) )
    '''
    startquagga( p64514, 64514, 'quagga64514.conf' )
    startquagga( p64515, 64515, 'quagga64515.conf' )
    startquagga( p64516, 64516, 'quagga64516.conf' )

    startquagga( p64517, 64517, 'quagga64517.conf' )
    startquagga( p64518, 64518, 'quagga64518.conf' )
    startquagga( p64519, 64519, 'quagga64519.conf' )
    startquagga( p64520, 64520, 'quagga64520.conf' )

    # start Quagga as the BGP speaker
    startquagga( spk1, 64513, 'quagga-sdn.conf' )
    startquagga( spk2, 64512, 'quagga-sdn2.conf' )
    startquagga( spk3, 64511, 'quagga-sdn3.conf' )

    root = net.get( 'root' )

    root.intf( 'root-eth0' ).setIP( '1.1.1.2/24' )
    root.cmd( 'ip addr add 192.168.0.100/24 dev root-eth0' )

    spk1.intf( 'spk1-eth1' ).setIP( '1.1.1.1/24' )
    spk2.intf( 'spk2-eth1' ).setIP( '1.1.1.3/24' )
    spk3.intf( 'spk3-eth1' ).setIP( '1.1.1.5/24' )

    stopsshd()

    hosts = [ p64514, p64515, p64516, p64517, p64518, p64519, p64520,
              h64514, h64517, h64519 ];
    startsshds( hosts )
    #
    '''
    forwarding1 = '%s:2000:%s:2000' % ( '1.1.1.2', onos1IP )
    root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
    -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding1, onos1IP ) )

    '''
    # time.sleep( 3000000000 )
    CLI( net )


    stopsshd()
    stopquagga()
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'debug' )
    sdn1net()
