blob: 397ce4bdf79415e41edcc251dd2d094d60083c1f [file] [log] [blame]
Masayoshi Kobayashi7dd03eb2013-03-13 00:07:27 +00001#!/usr/bin/python
2
3NWID=1
Pavlin Radoslavov67b3ef32013-04-03 02:44:48 -07004NR_NODES=21
Masayoshi Kobayashi7dd03eb2013-03-13 00:07:27 +00005#Controllers=[{"ip":'127.0.0.1', "port":6633}, {"ip":'10.0.1.28', "port":6633}]
Pavlin Radoslavov67b3ef32013-04-03 02:44:48 -07006# Controllers=[{"ip":'10.0.1.28', "port":6633}]
7Controllers=[{"ip":'127.0.0.1', "port":6633}]
Masayoshi Kobayashi7dd03eb2013-03-13 00:07:27 +00008
9"""
10Start up a Simple topology
11"""
12from mininet.net import Mininet
13from mininet.node import Controller, RemoteController
14from mininet.log import setLogLevel, info, error, warn, debug
15from mininet.cli import CLI
16from mininet.topo import Topo
17from mininet.util import quietRun
18from mininet.moduledeps import pathCheck
19from mininet.link import Link, TCLink
20
21from sys import exit
22import os.path
23from subprocess import Popen, STDOUT, PIPE
24
25import sys
26
27#import argparse
28
29class MyController( Controller ):
30 def __init__( self, name, ip='127.0.0.1', port=6633, **kwargs):
31 """Init.
32 name: name to give controller
33 ip: the IP address where the remote controller is
34 listening
35 port: the port where the remote controller is listening"""
36 Controller.__init__( self, name, ip=ip, port=port, **kwargs )
37
38 def start( self ):
39 "Overridden to do nothing."
40 return
41
42 def stop( self ):
43 "Overridden to do nothing."
44 return
45
46 def checkListening( self ):
47 "Warn if remote controller is not accessible"
48 listening = self.cmd( "echo A | telnet -e A %s %d" %
49 ( self.ip, self.port ) )
50 if 'Unable' in listening:
51 warn( "Unable to contact the remote controller"
52 " at %s:%d\n" % ( self.ip, self.port ) )
53
54class SDNTopo( Topo ):
55 "SDN Topology"
56
57 def __init__( self, *args, **kwargs ):
58 Topo.__init__( self, *args, **kwargs )
59
60 switch = []
61 host = []
62 root = []
63
64 for i in range (NR_NODES):
65 name_suffix = '%02d' % NWID + "." + '%02d' % i
66 dpid_suffix = '%02x' % NWID + '%02x' % i
67 dpid = '0000' + '0000' + '0000' + dpid_suffix
68 sw = self.addSwitch('sw'+name_suffix, dpid=dpid)
69 switch.append(sw)
70
71 for i in range (NR_NODES):
72 host.append(self.addHost( 'host%d' % i ))
73
74 for i in range (NR_NODES):
75 root.append(self.addHost( 'root%d' % i, inNamespace=False ))
76
77 for i in range (NR_NODES):
78 self.addLink(host[i], switch[i])
79
80 for i in range (1, NR_NODES):
81 self.addLink(switch[0], switch[i])
Pavlin Radoslavov67b3ef32013-04-03 02:44:48 -070082 if i >= 2:
83 self.addLink(switch[i-1], switch[i])
Masayoshi Kobayashi7dd03eb2013-03-13 00:07:27 +000084
85 for i in range (NR_NODES):
86 self.addLink(root[i], host[i])
87
88def startsshd( host ):
89 "Start sshd on host"
90 info( '*** Starting sshd\n' )
91 name, intf, ip = host.name, host.defaultIntf(), host.IP()
92 banner = '/tmp/%s.banner' % name
93 host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
94 host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
95 info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
96
97def startsshds ( hosts ):
98 for h in hosts:
99 startsshd( h )
100
101def stopsshd( ):
102 "Stop *all* sshd processes with a custom banner"
103 info( '*** Shutting down stale sshd/Banner processes ',
104 quietRun( "pkill -9 -f Banner" ), '\n' )
105
106def sdnnet(opt):
107 topo = SDNTopo()
108 info( '*** Creating network\n' )
109 #net = Mininet( topo=topo, controller=MyController, link=TCLink)
110 net = Mininet( topo=topo, link=TCLink, build=False)
111 controllers=[]
112 for c in Controllers:
113 rc = RemoteController('c%d' % Controllers.index(c), ip=c['ip'],port=c['port'])
114 print "controller ip %s port %s" % (c['ip'], c['port'])
115 controllers.append(rc)
116
117 net.controllers=controllers
118 net.build()
119
120 host = []
121 for i in range (NR_NODES):
122 host.append(net.get( 'host%d' % i ))
123
124 net.start()
125
Pavlin Radoslavov67b3ef32013-04-03 02:44:48 -0700126 # sw=net.get('sw01.00')
127 # print "center sw", sw
128 # sw.attach('tapa0')
Masayoshi Kobayashic2acf782013-03-13 22:06:29 +0000129
Masayoshi Kobayashi7dd03eb2013-03-13 00:07:27 +0000130 for i in range (NR_NODES):
131 host[i].defaultIntf().setIP('192.168.%d.%d/16' % (NWID,i))
132
133 root = []
134 for i in range (NR_NODES):
135 root.append(net.get( 'root%d' % i ))
136
137 for i in range (NR_NODES):
138 host[i].intf('host%d-eth1' % i).setIP('1.1.%d.1/24' % i)
139 root[i].intf('root%d-eth0' % i).setIP('1.1.%d.2/24' % i)
140
141 stopsshd ()
142 startsshds ( host )
143
144 if opt=="cli":
145 CLI(net)
146 stopsshd()
147 net.stop()
148
149if __name__ == '__main__':
150 setLogLevel( 'info' )
151 if len(sys.argv) == 1:
152 sdnnet("cli")
153 elif len(sys.argv) == 2 and sys.argv[1] == "-n":
154 sdnnet("nocli")
155 else:
156 print "%s [-n]" % sys.argv[0]