blob: 9b192e2f611f83e60aff7ee70071adf74dc6c246 [file] [log] [blame]
pingping-linea32cf82015-10-08 22:37:37 -07001#!/usr/bin/python
2
3"""
4Set up the SDN-IP topology as same as it on Internet2
5"""
6
7"""
8AS 64513, (SDN AS)
9AS 64514, reachable by 10.0.4.1, 10.0.14.1
10AS 64515, reachable by 10.0.5.1, 10.0.15.1
11AS 64516, reachable by 10.0.6.1, 10.0.16.1
12"""
13
14from mininet.net import Mininet
15from mininet.node import Controller, RemoteController
16from mininet.log import setLogLevel, info
17from mininet.cli import CLI
alison62006dd2016-12-15 16:21:28 -080018from mininet.node import Host, RemoteController
pingping-linea32cf82015-10-08 22:37:37 -070019from mininet.topo import Topo
20from mininet.util import quietRun
21from mininet.moduledeps import pathCheck
22
23import os.path
24import time
25from subprocess import Popen, STDOUT, PIPE
26
27QUAGGA_DIR = '/usr/lib/quagga'
28QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
Jon Hallfabd7e52016-04-19 19:20:59 -070029QUAGGA_CONFIG_DIR = '~/OnosSystemTest/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/dependencies/'
pingping-linea32cf82015-10-08 22:37:37 -070030numSw = 39
31
32# net = Mininet( controller = RemoteController )
alison62006dd2016-12-15 16:21:28 -080033class VLANHost( Host ):
34 def config( self, vlan=100, intfName=None, **params ):
35 r = super( Host, self ).config( **params )
36 intf = self.intf( intfName )
37 self.cmd( 'ifconfig %s inet 0' % intf )
38 self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
39 self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
40 newName = '%s.%d' % ( intf, vlan )
41 intf.name = newName
42 self.nameToIntf[ newName ] = intf
43 return r
44
pingping-linea32cf82015-10-08 22:37:37 -070045
46class SDNTopo( Topo ):
47 "SDN Topology"
48
49 def __init__( self, *args, **kwargs ):
50
51 Topo.__init__( self, *args, **kwargs )
52
53 # BGP peer hosts
alison62006dd2016-12-15 16:21:28 -080054 p64514 = self.addHost( 'p64514' )
55 p64515 = self.addHost( 'p64515' )
56 p64516 = self.addHost( 'p64516' )
57
58 p64517 = self.addHost( 'p64517', cls=VLANHost, vlan=20 )
59 p64518 = self.addHost( 'p64518', cls=VLANHost, vlan=20 )
60 p64519 = self.addHost( 'p64519', cls=VLANHost, vlan=10 )
61 p64520 = self.addHost( 'p64520', cls=VLANHost, vlan=10 )
pingping-linea32cf82015-10-08 22:37:37 -070062
63 '''
64 sw1 = self.addSwitch( 'SEAT', dpid = '00000000000000a1' )
65 sw2 = self.addSwitch( 'PORT', dpid = '00000000000000a2' )
66 sw3 = self.addSwitch( 'SUNN', dpid = '00000000000000a3' )
67 sw4 = self.addSwitch( 'RENO', dpid = '00000000000000a4' )
68 sw5 = self.addSwitch( 'LOSA', dpid = '00000000000000a5' )
69 sw6 = self.addSwitch( 'MISS', dpid = '00000000000000a6' )
70 sw7 = self.addSwitch( 'LASV', dpid = '00000000000000a7' )
71 sw8 = self.addSwitch( 'SALT', dpid = '00000000000000a8' )
72 sw9 = self.addSwitch( 'PHOE', dpid = '00000000000000a9' )
73 sw10 = self.addSwitch( 'TUCS', dpid = '0000000000000a10' )
74 sw11 = self.addSwitch( 'DENV', dpid = '0000000000000a11' )
75 sw12 = self.addSwitch( 'ELPA', dpid = '0000000000000a12' )
76 sw13 = self.addSwitch( 'MINN', dpid = '0000000000000a13' )
77 sw14 = self.addSwitch( 'KANS', dpid = '0000000000000a14' )
78 sw15 = self.addSwitch( 'TULS', dpid = '0000000000000a15' )
79 sw16 = self.addSwitch( 'DALL', dpid = '0000000000000a16' )
80 sw17 = self.addSwitch( 'HOUH', dpid = '0000000000000a17' )
81 sw18 = self.addSwitch( 'COLU', dpid = '0000000000000a18' )
82 sw19 = self.addSwitch( 'JCSN', dpid = '0000000000000a19' )
83 sw20 = self.addSwitch( 'BATO', dpid = '0000000000000a20' )
84 sw21 = self.addSwitch( 'EQCH', dpid = '0000000000000a21' )
85 sw22 = self.addSwitch( 'STAR', dpid = '0000000000000a22' )
86 sw23 = self.addSwitch( 'CHIC', dpid = '0000000000000a23' )
87 sw24 = self.addSwitch( 'INDI', dpid = '0000000000000a24' )
88 sw25 = self.addSwitch( 'CINC', dpid = '0000000000000a25' )
89 sw26 = self.addSwitch( 'LOUI', dpid = '0000000000000a26' )
90 sw27 = self.addSwitch( 'ATLA', dpid = '0000000000000a27' )
91 sw28 = self.addSwitch( 'JACK', dpid = '0000000000000a28' )
92 sw29 = self.addSwitch( 'CLEV', dpid = '0000000000000a29' )
93 sw30 = self.addSwitch( 'PITT', dpid = '0000000000000a30' )
94 sw31 = self.addSwitch( 'ASHB', dpid = '0000000000000a31' )
95 sw32 = self.addSwitch( 'WASH', dpid = '0000000000000a32' )
96 sw33 = self.addSwitch( 'RALE', dpid = '0000000000000a33' )
97 sw34 = self.addSwitch( 'CHAR', dpid = '0000000000000a34' )
98 sw35 = self.addSwitch( 'ALBA', dpid = '0000000000000a35' )
99 sw36 = self.addSwitch( 'BOST', dpid = '0000000000000a36' )
100 sw37 = self.addSwitch( 'HART', dpid = '0000000000000a37' )
101 sw38 = self.addSwitch( 'NEWY', dpid = '0000000000000a38' )
102 sw39 = self.addSwitch( 'PHIL', dpid = '0000000000000a39' )
103 '''
104 sw1 = self.addSwitch( 'sw1', dpid = '00000000000000a1' )
105 sw2 = self.addSwitch( 'sw2', dpid = '00000000000000a2' )
106 sw3 = self.addSwitch( 'sw3', dpid = '00000000000000a3' )
107 sw4 = self.addSwitch( 'sw4', dpid = '00000000000000a4' )
108 sw5 = self.addSwitch( 'sw5', dpid = '00000000000000a5' )
109 sw6 = self.addSwitch( 'sw6', dpid = '00000000000000a6' )
110 sw7 = self.addSwitch( 'sw7', dpid = '00000000000000a7' )
111 sw8 = self.addSwitch( 'sw8', dpid = '00000000000000a8' )
112 sw9 = self.addSwitch( 'sw9', dpid = '00000000000000a9' )
113 sw10 = self.addSwitch( 'sw10', dpid = '0000000000000a10' )
114 sw11 = self.addSwitch( 'sw11', dpid = '0000000000000a11' )
115 sw12 = self.addSwitch( 'sw12', dpid = '0000000000000a12' )
116 sw13 = self.addSwitch( 'sw13', dpid = '0000000000000a13' )
117 sw14 = self.addSwitch( 'sw14', dpid = '0000000000000a14' )
118 sw15 = self.addSwitch( 'sw15', dpid = '0000000000000a15' )
119 sw16 = self.addSwitch( 'sw16', dpid = '0000000000000a16' )
120 sw17 = self.addSwitch( 'sw17', dpid = '0000000000000a17' )
121 sw18 = self.addSwitch( 'sw18', dpid = '0000000000000a18' )
122 sw19 = self.addSwitch( 'sw19', dpid = '0000000000000a19' )
123 sw20 = self.addSwitch( 'sw20', dpid = '0000000000000a20' )
124 sw21 = self.addSwitch( 'sw21', dpid = '0000000000000a21' )
125 sw22 = self.addSwitch( 'sw22', dpid = '0000000000000a22' )
126 sw23 = self.addSwitch( 'sw23', dpid = '0000000000000a23' )
127 sw24 = self.addSwitch( 'sw24', dpid = '0000000000000a24' )
128 sw25 = self.addSwitch( 'sw25', dpid = '0000000000000a25' )
129 sw26 = self.addSwitch( 'sw26', dpid = '0000000000000a26' )
130 sw27 = self.addSwitch( 'sw27', dpid = '0000000000000a27' )
131 sw28 = self.addSwitch( 'sw28', dpid = '0000000000000a28' )
132 sw29 = self.addSwitch( 'sw29', dpid = '0000000000000a29' )
133 sw30 = self.addSwitch( 'sw30', dpid = '0000000000000a30' )
134 sw31 = self.addSwitch( 'sw31', dpid = '0000000000000a31' )
135 sw32 = self.addSwitch( 'sw32', dpid = '0000000000000a32' )
136 sw33 = self.addSwitch( 'sw33', dpid = '0000000000000a33' )
137 sw34 = self.addSwitch( 'sw34', dpid = '0000000000000a34' )
138 sw35 = self.addSwitch( 'sw35', dpid = '0000000000000a35' )
139 sw36 = self.addSwitch( 'sw36', dpid = '0000000000000a36' )
140 sw37 = self.addSwitch( 'sw37', dpid = '0000000000000a37' )
141 sw38 = self.addSwitch( 'sw38', dpid = '0000000000000a38' )
142 sw39 = self.addSwitch( 'sw39', dpid = '0000000000000a39' )
143
144
145 # Add a layer2 switch for control plane connectivity
146 # This switch isn't part of the SDN topology
147 # We'll use the ovs-controller to turn this into a learning switch
148 swCtl100 = self.addSwitch( 'swCtl100', dpid = '0000000000000100' )
149
150
151 # BGP speaker hosts
alison62006dd2016-12-15 16:21:28 -0800152 spk1 = self.addHost( 'spk1' )
153 spk2 = self.addHost( 'spk2' )
154 spk3 = self.addHost( 'spk3', cls=VLANHost, vlan=10 )
155 spk4 = self.addHost( 'spk4', cls=VLANHost, vlan=20 )
pingping-linea32cf82015-10-08 22:37:37 -0700156 root = self.addHost( 'root', inNamespace = False , ip = '0' )
157
158 # hosts behind each AS
alison62006dd2016-12-15 16:21:28 -0800159 h64514 = self.addHost( 'h64514' )
160 h64515 = self.addHost( 'h64515' )
161 h64516 = self.addHost( 'h64516' )
pingping-linea32cf82015-10-08 22:37:37 -0700162
alison62006dd2016-12-15 16:21:28 -0800163 # VLAN hosts behind each AS
164 h64517 = self.addHost( 'h64517', cls=VLANHost, vlan=20 )
165 h64518 = self.addHost( 'h64518', cls=VLANHost, vlan=20 )
166 h64519 = self.addHost( 'h64519', cls=VLANHost, vlan=10 )
167 h64520 = self.addHost( 'h64520', cls=VLANHost, vlan=10 )
168
169 self.addLink( 'spk1', sw24 )
170 self.addLink( 'spk2', sw24 )
171 self.addLink( 'spk3', sw24 )
172 self.addLink( 'spk4', sw24 )
pingping-linea32cf82015-10-08 22:37:37 -0700173
174 # connect all switches
175 self.addLink( sw1, sw2 )
176 self.addLink( sw1, sw6 )
177 self.addLink( sw1, sw8 )
178 self.addLink( sw2, sw3 )
179 self.addLink( sw3, sw4 )
180 self.addLink( sw3, sw5 )
181 self.addLink( sw4, sw8 )
182 self.addLink( sw5, sw7 )
183 self.addLink( sw5, sw9 )
184 self.addLink( sw6, sw13 )
185 self.addLink( sw7, sw8 )
186 self.addLink( sw8, sw11 )
187 self.addLink( sw9, sw10 )
188 self.addLink( sw10, sw12 )
189 self.addLink( sw11, sw12 )
190 self.addLink( sw11, sw14 )
191 self.addLink( sw12, sw17 )
192 self.addLink( sw13, sw14 )
193 self.addLink( sw13, sw21 )
194 self.addLink( sw14, sw15 )
195 self.addLink( sw14, sw18 )
196 self.addLink( sw14, sw23 )
197 self.addLink( sw15, sw16 )
198 self.addLink( sw16, sw17 )
199 self.addLink( sw17, sw19 )
200 self.addLink( sw17, sw20 )
201 self.addLink( sw18, sw23 )
202 self.addLink( sw19, sw27 )
203 self.addLink( sw20, sw28 )
204 self.addLink( sw21, sw22 )
205 self.addLink( sw21, sw29 )
206 self.addLink( sw22, sw23 )
207 self.addLink( sw23, sw24 )
208 self.addLink( sw23, sw31 )
209 self.addLink( sw24, sw25 )
210 self.addLink( sw25, sw26 )
211 self.addLink( sw26, sw27 )
212 self.addLink( sw27, sw28 )
213 self.addLink( sw27, sw34 )
214 self.addLink( sw29, sw30 )
215 self.addLink( sw29, sw35 )
216 self.addLink( sw30, sw31 )
217 self.addLink( sw31, sw32 )
218 self.addLink( sw32, sw33 )
219 self.addLink( sw32, sw39 )
220 self.addLink( sw33, sw34 )
221 self.addLink( sw35, sw36 )
222 self.addLink( sw36, sw37 )
223 self.addLink( sw37, sw38 )
224 self.addLink( sw38, sw39 )
225
226 # connection between switches and peers
alison62006dd2016-12-15 16:21:28 -0800227 self.addLink( p64514, sw32 )
228 self.addLink( p64515, sw8 )
229 self.addLink( p64516, sw28 )
230
231 self.addLink( p64517, sw7 )
232 self.addLink( p64518, sw9 )
233 self.addLink( p64519, sw5 )
234 self.addLink( p64520, sw5 )
pingping-linea32cf82015-10-08 22:37:37 -0700235
236 # connection between BGP peer and hosts behind the BGP peer
alison62006dd2016-12-15 16:21:28 -0800237 self.addLink( p64514, h64514 )
238 self.addLink( p64515, h64515 )
239 self.addLink( p64516, h64516 )
240
241 self.addLink( p64517, h64517 )
242 self.addLink( p64518, h64518 )
243 self.addLink( p64519, h64519 )
244 self.addLink( p64520, h64520 )
pingping-linea32cf82015-10-08 22:37:37 -0700245
246 # Internal Connection To Hosts
alison62006dd2016-12-15 16:21:28 -0800247 self.addLink( swCtl100, p64514 )
248 self.addLink( swCtl100, p64515 )
249 self.addLink( swCtl100, p64516 )
pingping-linea32cf82015-10-08 22:37:37 -0700250
alison62006dd2016-12-15 16:21:28 -0800251 self.addLink( swCtl100, p64517 )
252 self.addLink( swCtl100, p64518 )
253 self.addLink( swCtl100, p64519 )
254 self.addLink( swCtl100, p64520 )
pingping-linea32cf82015-10-08 22:37:37 -0700255
alison62006dd2016-12-15 16:21:28 -0800256 self.addLink( swCtl100, spk1 )
257 self.addLink( swCtl100, spk2 )
258 self.addLink( swCtl100, spk3 )
259 self.addLink( swCtl100, spk4 )
260
261 # add h64514 to control plane for ping test
262 self.addLink( swCtl100, h64514 )
263 self.addLink( swCtl100, h64517 )
264 self.addLink( swCtl100, h64519 )
265
pingping-linea32cf82015-10-08 22:37:37 -0700266 self.addLink( swCtl100, root )
267 self.addLink( swCtl100, root )
268 self.addLink( swCtl100, root )
269
270
271def startsshd( host ):
272 "Start sshd on host"
273 info( '*** Starting sshd\n' )
274 name, intf, ip = host.name, host.defaultIntf(), host.IP()
275 banner = '/tmp/%s.banner' % name
276 host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
277 host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
278 info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
279
280def startsshds ( hosts ):
281 for h in hosts:
282 startsshd( h )
283
284def stopsshd():
285 "Stop *all* sshd processes with a custom banner"
286 info( '*** Shutting down stale sshd/Banner processes ',
287 quietRun( "pkill -9 -f Banner" ), '\n' )
288
289def startquagga( host, num, config_file ):
290 info( '*** Starting Quagga on %s\n' % host )
291 host.cmd( "cd %s" % QUAGGA_CONFIG_DIR )
292 zebra_cmd = \
293 '%s/zebra -d -f ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid'\
294 % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
295 quagga_cmd = '%s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' \
296 % ( QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
297
298 print zebra_cmd
299 print quagga_cmd
300
301 host.cmd( zebra_cmd )
302 host.cmd( quagga_cmd )
303
304'''
305def startQuaggaFromTeston( host, num, config_file ):
306 global net
307 h = net.get( str( host ) )
308 startquagga( h, num, config_file )
309'''
310
311def startquaggahost5( host, num ):
312 info( '*** Starting Quagga on %s\n' % host )
313 zebra_cmd = \
314 '%s/zebra -d -f ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' \
315 % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
316 quagga_cmd = \
317 '%s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid'\
318 % ( QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
319
320 host.cmd( zebra_cmd )
321 host.cmd( quagga_cmd )
322
323
324def stopquagga():
325 quietRun( 'sudo pkill -9 -f bgpd' )
326 quietRun( 'sudo pkill -9 -f zebra' )
327
328def sdn1net():
329 topo = SDNTopo()
330 info( '*** Creating network\n' )
331
332 # global net
333 net = Mininet( topo = topo, controller = RemoteController )
334
335
alison62006dd2016-12-15 16:21:28 -0800336 spk1, spk2, spk3, spk4, p64514, p64515, p64516, p64517, p64518, p64519, p64520 = \
337 net.get( 'spk1', 'spk2', 'spk3', 'spk4',
338 'p64514', 'p64515', 'p64516', 'p64517', 'p64518', 'p64519', 'p64520' )
pingping-linea32cf82015-10-08 22:37:37 -0700339
340 # Adding addresses to speakers' interface connected to sw24
341 # for BGP peering
alison62006dd2016-12-15 16:21:28 -0800342 spk1.setMAC( '00:00:00:00:00:01', 'spk1-eth0' )
343 spk1.cmd( 'ip addr add 10.0.4.101/24 dev spk1-eth0' )
344 spk1.cmd( 'ip addr add 10.0.5.101/24 dev spk1-eth0' )
345 spk1.cmd( 'ip addr add 10.0.6.101/24 dev spk1-eth0' )
pingping-linea32cf82015-10-08 22:37:37 -0700346
alison62006dd2016-12-15 16:21:28 -0800347 spk1.defaultIntf().setIP( '10.0.4.101/24' )
348 spk1.defaultIntf().setMAC( '00:00:00:00:00:01' )
pingping-linea32cf82015-10-08 22:37:37 -0700349
alison62006dd2016-12-15 16:21:28 -0800350 spk2.setMAC( '00:00:00:00:00:02', 'spk2-eth0' )
351 spk2.cmd( 'ip addr add 10.0.14.101/24 dev spk2-eth0' )
352 spk2.cmd( 'ip addr add 10.0.15.101/24 dev spk2-eth0' )
353 spk2.cmd( 'ip addr add 10.0.16.101/24 dev spk2-eth0' )
pingping-linea32cf82015-10-08 22:37:37 -0700354
alison62006dd2016-12-15 16:21:28 -0800355 spk2.defaultIntf().setIP( '10.0.14.101/24' )
356 spk2.defaultIntf().setMAC( '00:00:00:00:00:02' )
357
358 spk3.setMAC( '00:00:00:00:00:03', 'spk3-eth0.10' )
359 spk3.cmd( 'ip addr add 10.0.9.101/24 dev spk3-eth0.10' )
360 spk3.cmd( 'ip addr add 10.0.20.101/24 dev spk3-eth0.10' )
361 spk3.defaultIntf().setIP( '10.1.9.101/24' )
362 spk3.defaultIntf().setMAC( '00:00:00:00:00:03' )
363
364 spk4.setMAC( '00:00:00:00:00:04', 'spk4-eth0.20' )
365 spk4.cmd( 'ip addr add 10.0.7.101/24 dev spk4-eth0.20' )
366 spk4.cmd( 'ip addr add 10.0.8.101/24 dev spk4-eth0.20' )
367 spk4.defaultIntf().setIP( '10.1.7.101/24' )
368 spk4.defaultIntf().setMAC( '00:00:00:00:00:04' )
369
370 p64517.config( vlan=20, intfName="p64517-eth1", ip="7.0.0.254" )
371 p64518.config( vlan=20, intfName="p64518-eth1", ip="8.0.0.254" )
372 p64519.config( vlan=10, intfName="p64519-eth1", ip="9.0.0.254" )
373 p64520.config( vlan=10, intfName="p64520-eth1", ip="20.0.0.254" )
pingping-linea32cf82015-10-08 22:37:37 -0700374
375 # Net has to be start after adding the above link
376 net.start()
377
378 # setup configuration on the interface connected to switch
alison62006dd2016-12-15 16:21:28 -0800379 p64514.cmd( "ifconfig p64514-eth0 10.0.4.1 up" )
380 p64514.cmd( "ip addr add 10.0.14.1/24 dev p64514-eth0" )
381 p64514.setMAC( '00:00:00:00:00:14', 'p64514-eth0' ) # do not repeat spk4's MAC addr
382 p64515.cmd( "ifconfig p64515-eth0 10.0.5.1 up" )
383 p64515.cmd( "ip addr add 10.0.15.1/24 dev p64515-eth0" )
384 p64515.setMAC( '00:00:00:00:00:05', 'p64515-eth0' )
385 p64516.cmd( "ifconfig p64516-eth0 10.0.6.1 up" )
386 p64516.cmd( "ip addr add 10.0.16.1/24 dev p64516-eth0" )
387 p64516.setMAC( '00:00:00:00:00:06', 'p64516-eth0' )
388
389 p64517.cmd( "ifconfig p64517-eth0.20 10.0.7.1 up" )
390 p64517.setMAC( '00:00:00:00:00:07', 'p64517-eth0.20' )
391 p64518.cmd( "ifconfig p64518-eth0.20 10.0.8.1 up" )
392 p64518.setMAC( '00:00:00:00:00:08', 'p64518-eth0.20' )
393
394 p64519.cmd( "ifconfig p64519-eth0.10 10.0.9.1 up" )
395 p64519.setMAC( '00:00:00:00:00:09', 'p64519-eth0.10' )
396 p64520.cmd( "ifconfig p64520-eth0.10 10.0.20.1 up" )
397 p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth0.10' )
pingping-linea32cf82015-10-08 22:37:37 -0700398
399 # setup configuration on the interface connected to hosts
alison62006dd2016-12-15 16:21:28 -0800400 p64514.setIP( "4.0.0.254", 8, "p64514-eth1" )
401 p64514.setMAC( '00:00:00:00:00:44', 'p64514-eth1' )
402 p64515.setIP( "5.0.0.254", 8, "p64515-eth1" )
403 p64515.setMAC( '00:00:00:00:00:55', 'p64515-eth1' )
404 p64516.setIP( "6.0.0.254", 8, "p64516-eth1" )
405 p64516.setMAC( '00:00:00:00:00:66', 'p64516-eth1' )
406
407 p64517.setIP( "7.0.0.254", 8, "p64517-eth1.20" )
408 p64517.setMAC( '00:00:00:00:00:77', 'p64517-eth1.20' )
409 p64518.setIP( "8.0.0.254", 8, "p64518-eth1.20" )
410 p64518.setMAC( '00:00:00:00:00:88', 'p64518-eth1.20' )
411
412 p64519.setIP( "9.0.0.254", 8, "p64519-eth1.10" )
413 p64519.setMAC( '00:00:00:00:00:99', 'p64519-eth1.10' )
414 p64520.setIP( "20.0.0.254", 8, "p64520-eth1.10" )
415 p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth1.10' )
pingping-linea32cf82015-10-08 22:37:37 -0700416
417 # enable forwarding on BGP peer hosts
alison62006dd2016-12-15 16:21:28 -0800418 p64514.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
419 p64515.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
420 p64516.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
421
422 p64517.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
423 p64518.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
424 p64519.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
425 p64520.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
pingping-linea32cf82015-10-08 22:37:37 -0700426
427 # config interface for control plane connectivity
alison62006dd2016-12-15 16:21:28 -0800428 p64514.setIP( "192.168.0.4", 24, "p64514-eth2" )
429 p64515.setIP( "192.168.0.5", 24, "p64515-eth2" )
430 p64516.setIP( "192.168.0.6", 24, "p64516-eth2" )
431
432 p64517.setIP( "192.168.0.7", 24, "p64517-eth2" )
433 p64518.setIP( "192.168.0.8", 24, "p64518-eth2" )
434 p64519.setIP( "192.168.0.9", 24, "p64519-eth2" )
435 p64520.setIP( "192.168.0.20", 24, "p64520-eth2" )
pingping-linea32cf82015-10-08 22:37:37 -0700436
437 # Setup hosts in each non-SDN AS
alison62006dd2016-12-15 16:21:28 -0800438 h64514, h64515, h64516, h64517, h64518, h64519, h64520 = \
439 net.get( 'h64514', 'h64515', 'h64516', 'h64517', 'h64518', 'h64519', 'h64520' )
440 h64514.cmd( 'ifconfig h64514-eth0 4.0.0.1 up' )
441 h64514.cmd( 'ip route add default via 4.0.0.254' )
442 h64514.setIP( '192.168.0.44', 24, 'h64514-eth1' ) # for control plane
443 h64515.cmd( 'ifconfig h64515-eth0 5.0.0.1 up' )
444 h64515.cmd( 'ip route add default via 5.0.0.254' )
445 h64516.cmd( 'ifconfig h64516-eth0 6.0.0.1 up' )
446 h64516.cmd( 'ip route add default via 6.0.0.254' )
447
448 h64517.cmd( 'ifconfig h64517-eth0.20 7.0.0.1 up' )
449 h64517.cmd( 'ip route add default via 7.0.0.254' )
450 h64517.setIP( '192.168.0.77', 24, 'h64517-eth1' ) # for control plane
451 h64518.cmd( 'ifconfig h64518-eth0.20 8.0.0.1 up' )
452 h64518.cmd( 'ip route add default via 8.0.0.254' )
453
454 h64519.cmd( 'ifconfig h64519-eth0.10 9.0.0.1 up' )
455 h64519.cmd( 'ip route add default via 9.0.0.254' )
456 h64519.setIP( '192.168.0.99', 24, 'h64519-eth1' ) # for control plane
457 h64520.cmd( 'ifconfig h64520-eth0.10 20.0.0.1 up' )
458 h64520.cmd( 'ip route add default via 20.0.0.254' )
pingping-linea32cf82015-10-08 22:37:37 -0700459
460
461 # set up swCtl100 as a learning
462 swCtl100 = net.get( 'swCtl100' )
463 swCtl100.cmd( 'ovs-vsctl set-controller swCtl100 none' )
464 swCtl100.cmd( 'ovs-vsctl set-fail-mode swCtl100 standalone' )
465
466 # connect all switches to controller
467 '''
468 onos1IP = "10.128.4.52"
469 onos2IP = "10.128.4.53"
470 onos3IP = "10.128.4.54"
471 for i in range ( 1, numSw + 1 ):
472 swX = net.get( 'sw%s' % ( i ) )
473 swX.cmd( 'ovs-vsctl set-controller sw%s tcp:%s:6653 tcp:%s:6653 tcp:%s:6653' % ( i, onos1IP, onos2IP, onos3IP) )
474 '''
475
476 # Start Quagga on border routers
alison62006dd2016-12-15 16:21:28 -0800477 startquagga( p64514, 64514, 'quagga64514.conf' )
478 startquagga( p64515, 64515, 'quagga64515.conf' )
479 startquagga( p64516, 64516, 'quagga64516.conf' )
480
481 startquagga( p64517, 64517, 'quagga64517.conf' )
482 startquagga( p64518, 64518, 'quagga64518.conf' )
483 startquagga( p64519, 64519, 'quagga64519.conf' )
484 startquagga( p64520, 64520, 'quagga64520.conf' )
pingping-linea32cf82015-10-08 22:37:37 -0700485
486 # start Quagga in SDN network
alison62006dd2016-12-15 16:21:28 -0800487 startquagga( spk1, 64513, 'quagga-sdn.conf' )
488 startquagga( spk2, 64512, 'quagga-sdn-speaker2.conf' )
489 startquagga( spk3, 64511, 'quagga-sdn3.conf' )
490 startquagga( spk4, 64510, 'quagga-sdn4.conf' )
pingping-linea32cf82015-10-08 22:37:37 -0700491
492 root = net.get( 'root' )
493 root.intf( 'root-eth0' ).setIP( '1.1.1.2/24' )
494 root.cmd( 'ip addr add 192.168.0.100/24 dev root-eth0' )
495
496 root.intf( 'root-eth1' ).setIP( '1.1.1.4/24' )
497 root.cmd( 'ip addr add 192.168.0.101/24 dev root-eth1' )
498
499 root.intf( 'root-eth2' ).setIP( '1.1.1.6/24' )
500 root.cmd( 'ip addr add 192.168.0.102/24 dev root-eth2' )
501
alison62006dd2016-12-15 16:21:28 -0800502 spk1.intf( 'spk1-eth1' ).setIP( '1.1.1.1/24' )
503 spk2.intf( 'spk2-eth1' ).setIP( '1.1.1.3/24' )
504 spk3.intf( 'spk3-eth1' ).setIP( '1.1.1.5/24' )
505 spk4.intf( 'spk4-eth1' ).setIP( '1.1.1.7/24' )
pingping-linea32cf82015-10-08 22:37:37 -0700506
507
508 stopsshd()
509
alison62006dd2016-12-15 16:21:28 -0800510 hosts = [ p64514, p64515, p64516, p64517, p64518, p64519, p64520,
511 h64514, h64517, h64519 ];
pingping-linea32cf82015-10-08 22:37:37 -0700512 startsshds( hosts )
513
514
515 '''
516 forwarding1 = '%s:2000:%s:2000' % ( '1.1.1.2', onos1IP )
517 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
518 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding1, onos1IP ) )
519
520 forwarding2 = '%s:2000:%s:2000' % ( '1.1.1.4', onos2IP )
521 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
522 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding2, onos2IP ) )
523
524 forwarding3 = '%s:2000:%s:2000' % ( '1.1.1.6', onos3IP )
525 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
526 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding3, onos3IP ) )
527 '''
528 CLI( net )
529
530 stopsshd()
531 stopquagga()
532 net.stop()
533
534
535if __name__ == '__main__':
536 setLogLevel( 'debug' )
537 sdn1net()