blob: b37a4108d0844e52a93e8e05684424d6535c90d4 [file] [log] [blame]
pingping-linea32cf82015-10-08 22:37:37 -07001#!/usr/bin/python
2
3"""
Jeremy Ronquillob27ce4c2017-07-17 12:41:28 -07004Copyright 2015 Open Networking Foundation (ONF)
5
6Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
7the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
8or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
9
10 TestON is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 2 of the License, or
13 (at your option) any later version.
14
15 TestON is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with TestON. If not, see <http://www.gnu.org/licenses/>.
22"""
23
24"""
pingping-linea32cf82015-10-08 22:37:37 -070025Set up the SDN-IP topology as same as it on Internet2
26"""
27
28"""
29AS 64513, (SDN AS)
30AS 64514, reachable by 10.0.4.1, 10.0.14.1
31AS 64515, reachable by 10.0.5.1, 10.0.15.1
32AS 64516, reachable by 10.0.6.1, 10.0.16.1
33"""
34
35from mininet.net import Mininet
36from mininet.node import Controller, RemoteController
37from mininet.log import setLogLevel, info
38from mininet.cli import CLI
alison62006dd2016-12-15 16:21:28 -080039from mininet.node import Host, RemoteController
pingping-linea32cf82015-10-08 22:37:37 -070040from mininet.topo import Topo
41from mininet.util import quietRun
42from mininet.moduledeps import pathCheck
43
44import os.path
45import time
46from subprocess import Popen, STDOUT, PIPE
47
48QUAGGA_DIR = '/usr/lib/quagga'
49QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
Jon Hallfabd7e52016-04-19 19:20:59 -070050QUAGGA_CONFIG_DIR = '~/OnosSystemTest/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/dependencies/'
pingping-linea32cf82015-10-08 22:37:37 -070051numSw = 39
52
53# net = Mininet( controller = RemoteController )
alison62006dd2016-12-15 16:21:28 -080054class VLANHost( Host ):
55 def config( self, vlan=100, intfName=None, **params ):
56 r = super( Host, self ).config( **params )
57 intf = self.intf( intfName )
58 self.cmd( 'ifconfig %s inet 0' % intf )
59 self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
60 self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
61 newName = '%s.%d' % ( intf, vlan )
62 intf.name = newName
63 self.nameToIntf[ newName ] = intf
64 return r
65
pingping-linea32cf82015-10-08 22:37:37 -070066
67class SDNTopo( Topo ):
68 "SDN Topology"
69
70 def __init__( self, *args, **kwargs ):
71
72 Topo.__init__( self, *args, **kwargs )
73
74 # BGP peer hosts
alison62006dd2016-12-15 16:21:28 -080075 p64514 = self.addHost( 'p64514' )
76 p64515 = self.addHost( 'p64515' )
77 p64516 = self.addHost( 'p64516' )
78
79 p64517 = self.addHost( 'p64517', cls=VLANHost, vlan=20 )
80 p64518 = self.addHost( 'p64518', cls=VLANHost, vlan=20 )
81 p64519 = self.addHost( 'p64519', cls=VLANHost, vlan=10 )
82 p64520 = self.addHost( 'p64520', cls=VLANHost, vlan=10 )
pingping-linea32cf82015-10-08 22:37:37 -070083
84 '''
85 sw1 = self.addSwitch( 'SEAT', dpid = '00000000000000a1' )
86 sw2 = self.addSwitch( 'PORT', dpid = '00000000000000a2' )
87 sw3 = self.addSwitch( 'SUNN', dpid = '00000000000000a3' )
88 sw4 = self.addSwitch( 'RENO', dpid = '00000000000000a4' )
89 sw5 = self.addSwitch( 'LOSA', dpid = '00000000000000a5' )
90 sw6 = self.addSwitch( 'MISS', dpid = '00000000000000a6' )
91 sw7 = self.addSwitch( 'LASV', dpid = '00000000000000a7' )
92 sw8 = self.addSwitch( 'SALT', dpid = '00000000000000a8' )
93 sw9 = self.addSwitch( 'PHOE', dpid = '00000000000000a9' )
94 sw10 = self.addSwitch( 'TUCS', dpid = '0000000000000a10' )
95 sw11 = self.addSwitch( 'DENV', dpid = '0000000000000a11' )
96 sw12 = self.addSwitch( 'ELPA', dpid = '0000000000000a12' )
97 sw13 = self.addSwitch( 'MINN', dpid = '0000000000000a13' )
98 sw14 = self.addSwitch( 'KANS', dpid = '0000000000000a14' )
99 sw15 = self.addSwitch( 'TULS', dpid = '0000000000000a15' )
100 sw16 = self.addSwitch( 'DALL', dpid = '0000000000000a16' )
101 sw17 = self.addSwitch( 'HOUH', dpid = '0000000000000a17' )
102 sw18 = self.addSwitch( 'COLU', dpid = '0000000000000a18' )
103 sw19 = self.addSwitch( 'JCSN', dpid = '0000000000000a19' )
104 sw20 = self.addSwitch( 'BATO', dpid = '0000000000000a20' )
105 sw21 = self.addSwitch( 'EQCH', dpid = '0000000000000a21' )
106 sw22 = self.addSwitch( 'STAR', dpid = '0000000000000a22' )
107 sw23 = self.addSwitch( 'CHIC', dpid = '0000000000000a23' )
108 sw24 = self.addSwitch( 'INDI', dpid = '0000000000000a24' )
109 sw25 = self.addSwitch( 'CINC', dpid = '0000000000000a25' )
110 sw26 = self.addSwitch( 'LOUI', dpid = '0000000000000a26' )
111 sw27 = self.addSwitch( 'ATLA', dpid = '0000000000000a27' )
112 sw28 = self.addSwitch( 'JACK', dpid = '0000000000000a28' )
113 sw29 = self.addSwitch( 'CLEV', dpid = '0000000000000a29' )
114 sw30 = self.addSwitch( 'PITT', dpid = '0000000000000a30' )
115 sw31 = self.addSwitch( 'ASHB', dpid = '0000000000000a31' )
116 sw32 = self.addSwitch( 'WASH', dpid = '0000000000000a32' )
117 sw33 = self.addSwitch( 'RALE', dpid = '0000000000000a33' )
118 sw34 = self.addSwitch( 'CHAR', dpid = '0000000000000a34' )
119 sw35 = self.addSwitch( 'ALBA', dpid = '0000000000000a35' )
120 sw36 = self.addSwitch( 'BOST', dpid = '0000000000000a36' )
121 sw37 = self.addSwitch( 'HART', dpid = '0000000000000a37' )
122 sw38 = self.addSwitch( 'NEWY', dpid = '0000000000000a38' )
123 sw39 = self.addSwitch( 'PHIL', dpid = '0000000000000a39' )
124 '''
125 sw1 = self.addSwitch( 'sw1', dpid = '00000000000000a1' )
126 sw2 = self.addSwitch( 'sw2', dpid = '00000000000000a2' )
127 sw3 = self.addSwitch( 'sw3', dpid = '00000000000000a3' )
128 sw4 = self.addSwitch( 'sw4', dpid = '00000000000000a4' )
129 sw5 = self.addSwitch( 'sw5', dpid = '00000000000000a5' )
130 sw6 = self.addSwitch( 'sw6', dpid = '00000000000000a6' )
131 sw7 = self.addSwitch( 'sw7', dpid = '00000000000000a7' )
132 sw8 = self.addSwitch( 'sw8', dpid = '00000000000000a8' )
133 sw9 = self.addSwitch( 'sw9', dpid = '00000000000000a9' )
134 sw10 = self.addSwitch( 'sw10', dpid = '0000000000000a10' )
135 sw11 = self.addSwitch( 'sw11', dpid = '0000000000000a11' )
136 sw12 = self.addSwitch( 'sw12', dpid = '0000000000000a12' )
137 sw13 = self.addSwitch( 'sw13', dpid = '0000000000000a13' )
138 sw14 = self.addSwitch( 'sw14', dpid = '0000000000000a14' )
139 sw15 = self.addSwitch( 'sw15', dpid = '0000000000000a15' )
140 sw16 = self.addSwitch( 'sw16', dpid = '0000000000000a16' )
141 sw17 = self.addSwitch( 'sw17', dpid = '0000000000000a17' )
142 sw18 = self.addSwitch( 'sw18', dpid = '0000000000000a18' )
143 sw19 = self.addSwitch( 'sw19', dpid = '0000000000000a19' )
144 sw20 = self.addSwitch( 'sw20', dpid = '0000000000000a20' )
145 sw21 = self.addSwitch( 'sw21', dpid = '0000000000000a21' )
146 sw22 = self.addSwitch( 'sw22', dpid = '0000000000000a22' )
147 sw23 = self.addSwitch( 'sw23', dpid = '0000000000000a23' )
148 sw24 = self.addSwitch( 'sw24', dpid = '0000000000000a24' )
149 sw25 = self.addSwitch( 'sw25', dpid = '0000000000000a25' )
150 sw26 = self.addSwitch( 'sw26', dpid = '0000000000000a26' )
151 sw27 = self.addSwitch( 'sw27', dpid = '0000000000000a27' )
152 sw28 = self.addSwitch( 'sw28', dpid = '0000000000000a28' )
153 sw29 = self.addSwitch( 'sw29', dpid = '0000000000000a29' )
154 sw30 = self.addSwitch( 'sw30', dpid = '0000000000000a30' )
155 sw31 = self.addSwitch( 'sw31', dpid = '0000000000000a31' )
156 sw32 = self.addSwitch( 'sw32', dpid = '0000000000000a32' )
157 sw33 = self.addSwitch( 'sw33', dpid = '0000000000000a33' )
158 sw34 = self.addSwitch( 'sw34', dpid = '0000000000000a34' )
159 sw35 = self.addSwitch( 'sw35', dpid = '0000000000000a35' )
160 sw36 = self.addSwitch( 'sw36', dpid = '0000000000000a36' )
161 sw37 = self.addSwitch( 'sw37', dpid = '0000000000000a37' )
162 sw38 = self.addSwitch( 'sw38', dpid = '0000000000000a38' )
163 sw39 = self.addSwitch( 'sw39', dpid = '0000000000000a39' )
164
165
166 # Add a layer2 switch for control plane connectivity
167 # This switch isn't part of the SDN topology
168 # We'll use the ovs-controller to turn this into a learning switch
169 swCtl100 = self.addSwitch( 'swCtl100', dpid = '0000000000000100' )
170
171
172 # BGP speaker hosts
alison62006dd2016-12-15 16:21:28 -0800173 spk1 = self.addHost( 'spk1' )
174 spk2 = self.addHost( 'spk2' )
175 spk3 = self.addHost( 'spk3', cls=VLANHost, vlan=10 )
176 spk4 = self.addHost( 'spk4', cls=VLANHost, vlan=20 )
pingping-linea32cf82015-10-08 22:37:37 -0700177 root = self.addHost( 'root', inNamespace = False , ip = '0' )
178
179 # hosts behind each AS
alison62006dd2016-12-15 16:21:28 -0800180 h64514 = self.addHost( 'h64514' )
181 h64515 = self.addHost( 'h64515' )
182 h64516 = self.addHost( 'h64516' )
pingping-linea32cf82015-10-08 22:37:37 -0700183
alison62006dd2016-12-15 16:21:28 -0800184 # VLAN hosts behind each AS
185 h64517 = self.addHost( 'h64517', cls=VLANHost, vlan=20 )
186 h64518 = self.addHost( 'h64518', cls=VLANHost, vlan=20 )
187 h64519 = self.addHost( 'h64519', cls=VLANHost, vlan=10 )
188 h64520 = self.addHost( 'h64520', cls=VLANHost, vlan=10 )
189
190 self.addLink( 'spk1', sw24 )
191 self.addLink( 'spk2', sw24 )
192 self.addLink( 'spk3', sw24 )
193 self.addLink( 'spk4', sw24 )
pingping-linea32cf82015-10-08 22:37:37 -0700194
195 # connect all switches
196 self.addLink( sw1, sw2 )
197 self.addLink( sw1, sw6 )
198 self.addLink( sw1, sw8 )
199 self.addLink( sw2, sw3 )
200 self.addLink( sw3, sw4 )
201 self.addLink( sw3, sw5 )
202 self.addLink( sw4, sw8 )
203 self.addLink( sw5, sw7 )
204 self.addLink( sw5, sw9 )
205 self.addLink( sw6, sw13 )
206 self.addLink( sw7, sw8 )
207 self.addLink( sw8, sw11 )
208 self.addLink( sw9, sw10 )
209 self.addLink( sw10, sw12 )
210 self.addLink( sw11, sw12 )
211 self.addLink( sw11, sw14 )
212 self.addLink( sw12, sw17 )
213 self.addLink( sw13, sw14 )
214 self.addLink( sw13, sw21 )
215 self.addLink( sw14, sw15 )
216 self.addLink( sw14, sw18 )
217 self.addLink( sw14, sw23 )
218 self.addLink( sw15, sw16 )
219 self.addLink( sw16, sw17 )
220 self.addLink( sw17, sw19 )
221 self.addLink( sw17, sw20 )
222 self.addLink( sw18, sw23 )
223 self.addLink( sw19, sw27 )
224 self.addLink( sw20, sw28 )
225 self.addLink( sw21, sw22 )
226 self.addLink( sw21, sw29 )
227 self.addLink( sw22, sw23 )
228 self.addLink( sw23, sw24 )
229 self.addLink( sw23, sw31 )
230 self.addLink( sw24, sw25 )
231 self.addLink( sw25, sw26 )
232 self.addLink( sw26, sw27 )
233 self.addLink( sw27, sw28 )
234 self.addLink( sw27, sw34 )
235 self.addLink( sw29, sw30 )
236 self.addLink( sw29, sw35 )
237 self.addLink( sw30, sw31 )
238 self.addLink( sw31, sw32 )
239 self.addLink( sw32, sw33 )
240 self.addLink( sw32, sw39 )
241 self.addLink( sw33, sw34 )
242 self.addLink( sw35, sw36 )
243 self.addLink( sw36, sw37 )
244 self.addLink( sw37, sw38 )
245 self.addLink( sw38, sw39 )
246
247 # connection between switches and peers
alison62006dd2016-12-15 16:21:28 -0800248 self.addLink( p64514, sw32 )
249 self.addLink( p64515, sw8 )
250 self.addLink( p64516, sw28 )
251
252 self.addLink( p64517, sw7 )
253 self.addLink( p64518, sw9 )
254 self.addLink( p64519, sw5 )
255 self.addLink( p64520, sw5 )
pingping-linea32cf82015-10-08 22:37:37 -0700256
257 # connection between BGP peer and hosts behind the BGP peer
alison62006dd2016-12-15 16:21:28 -0800258 self.addLink( p64514, h64514 )
259 self.addLink( p64515, h64515 )
260 self.addLink( p64516, h64516 )
261
262 self.addLink( p64517, h64517 )
263 self.addLink( p64518, h64518 )
264 self.addLink( p64519, h64519 )
265 self.addLink( p64520, h64520 )
pingping-linea32cf82015-10-08 22:37:37 -0700266
267 # Internal Connection To Hosts
alison62006dd2016-12-15 16:21:28 -0800268 self.addLink( swCtl100, p64514 )
269 self.addLink( swCtl100, p64515 )
270 self.addLink( swCtl100, p64516 )
pingping-linea32cf82015-10-08 22:37:37 -0700271
alison62006dd2016-12-15 16:21:28 -0800272 self.addLink( swCtl100, p64517 )
273 self.addLink( swCtl100, p64518 )
274 self.addLink( swCtl100, p64519 )
275 self.addLink( swCtl100, p64520 )
pingping-linea32cf82015-10-08 22:37:37 -0700276
alison62006dd2016-12-15 16:21:28 -0800277 self.addLink( swCtl100, spk1 )
278 self.addLink( swCtl100, spk2 )
279 self.addLink( swCtl100, spk3 )
280 self.addLink( swCtl100, spk4 )
281
282 # add h64514 to control plane for ping test
283 self.addLink( swCtl100, h64514 )
284 self.addLink( swCtl100, h64517 )
285 self.addLink( swCtl100, h64519 )
286
pingping-linea32cf82015-10-08 22:37:37 -0700287 self.addLink( swCtl100, root )
288 self.addLink( swCtl100, root )
289 self.addLink( swCtl100, root )
290
291
292def startsshd( host ):
293 "Start sshd on host"
294 info( '*** Starting sshd\n' )
295 name, intf, ip = host.name, host.defaultIntf(), host.IP()
296 banner = '/tmp/%s.banner' % name
297 host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
298 host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
299 info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
300
301def startsshds ( hosts ):
302 for h in hosts:
303 startsshd( h )
304
305def stopsshd():
306 "Stop *all* sshd processes with a custom banner"
307 info( '*** Shutting down stale sshd/Banner processes ',
308 quietRun( "pkill -9 -f Banner" ), '\n' )
309
310def startquagga( host, num, config_file ):
311 info( '*** Starting Quagga on %s\n' % host )
312 host.cmd( "cd %s" % QUAGGA_CONFIG_DIR )
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 = '%s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' \
317 % ( QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
318
319 print zebra_cmd
320 print quagga_cmd
321
322 host.cmd( zebra_cmd )
323 host.cmd( quagga_cmd )
324
325'''
326def startQuaggaFromTeston( host, num, config_file ):
327 global net
328 h = net.get( str( host ) )
329 startquagga( h, num, config_file )
330'''
331
332def startquaggahost5( host, num ):
333 info( '*** Starting Quagga on %s\n' % host )
334 zebra_cmd = \
335 '%s/zebra -d -f ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' \
336 % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
337 quagga_cmd = \
338 '%s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid'\
339 % ( QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
340
341 host.cmd( zebra_cmd )
342 host.cmd( quagga_cmd )
343
344
345def stopquagga():
346 quietRun( 'sudo pkill -9 -f bgpd' )
347 quietRun( 'sudo pkill -9 -f zebra' )
348
349def sdn1net():
350 topo = SDNTopo()
351 info( '*** Creating network\n' )
352
353 # global net
354 net = Mininet( topo = topo, controller = RemoteController )
355
356
alison62006dd2016-12-15 16:21:28 -0800357 spk1, spk2, spk3, spk4, p64514, p64515, p64516, p64517, p64518, p64519, p64520 = \
358 net.get( 'spk1', 'spk2', 'spk3', 'spk4',
359 'p64514', 'p64515', 'p64516', 'p64517', 'p64518', 'p64519', 'p64520' )
pingping-linea32cf82015-10-08 22:37:37 -0700360
361 # Adding addresses to speakers' interface connected to sw24
362 # for BGP peering
alison62006dd2016-12-15 16:21:28 -0800363 spk1.setMAC( '00:00:00:00:00:01', 'spk1-eth0' )
364 spk1.cmd( 'ip addr add 10.0.4.101/24 dev spk1-eth0' )
365 spk1.cmd( 'ip addr add 10.0.5.101/24 dev spk1-eth0' )
366 spk1.cmd( 'ip addr add 10.0.6.101/24 dev spk1-eth0' )
pingping-linea32cf82015-10-08 22:37:37 -0700367
alison62006dd2016-12-15 16:21:28 -0800368 spk1.defaultIntf().setIP( '10.0.4.101/24' )
369 spk1.defaultIntf().setMAC( '00:00:00:00:00:01' )
pingping-linea32cf82015-10-08 22:37:37 -0700370
alison62006dd2016-12-15 16:21:28 -0800371 spk2.setMAC( '00:00:00:00:00:02', 'spk2-eth0' )
372 spk2.cmd( 'ip addr add 10.0.14.101/24 dev spk2-eth0' )
373 spk2.cmd( 'ip addr add 10.0.15.101/24 dev spk2-eth0' )
374 spk2.cmd( 'ip addr add 10.0.16.101/24 dev spk2-eth0' )
pingping-linea32cf82015-10-08 22:37:37 -0700375
alison62006dd2016-12-15 16:21:28 -0800376 spk2.defaultIntf().setIP( '10.0.14.101/24' )
377 spk2.defaultIntf().setMAC( '00:00:00:00:00:02' )
378
379 spk3.setMAC( '00:00:00:00:00:03', 'spk3-eth0.10' )
380 spk3.cmd( 'ip addr add 10.0.9.101/24 dev spk3-eth0.10' )
381 spk3.cmd( 'ip addr add 10.0.20.101/24 dev spk3-eth0.10' )
382 spk3.defaultIntf().setIP( '10.1.9.101/24' )
383 spk3.defaultIntf().setMAC( '00:00:00:00:00:03' )
384
385 spk4.setMAC( '00:00:00:00:00:04', 'spk4-eth0.20' )
386 spk4.cmd( 'ip addr add 10.0.7.101/24 dev spk4-eth0.20' )
387 spk4.cmd( 'ip addr add 10.0.8.101/24 dev spk4-eth0.20' )
388 spk4.defaultIntf().setIP( '10.1.7.101/24' )
389 spk4.defaultIntf().setMAC( '00:00:00:00:00:04' )
390
391 p64517.config( vlan=20, intfName="p64517-eth1", ip="7.0.0.254" )
392 p64518.config( vlan=20, intfName="p64518-eth1", ip="8.0.0.254" )
393 p64519.config( vlan=10, intfName="p64519-eth1", ip="9.0.0.254" )
394 p64520.config( vlan=10, intfName="p64520-eth1", ip="20.0.0.254" )
pingping-linea32cf82015-10-08 22:37:37 -0700395
396 # Net has to be start after adding the above link
397 net.start()
398
399 # setup configuration on the interface connected to switch
alison62006dd2016-12-15 16:21:28 -0800400 p64514.cmd( "ifconfig p64514-eth0 10.0.4.1 up" )
401 p64514.cmd( "ip addr add 10.0.14.1/24 dev p64514-eth0" )
402 p64514.setMAC( '00:00:00:00:00:14', 'p64514-eth0' ) # do not repeat spk4's MAC addr
403 p64515.cmd( "ifconfig p64515-eth0 10.0.5.1 up" )
404 p64515.cmd( "ip addr add 10.0.15.1/24 dev p64515-eth0" )
405 p64515.setMAC( '00:00:00:00:00:05', 'p64515-eth0' )
406 p64516.cmd( "ifconfig p64516-eth0 10.0.6.1 up" )
407 p64516.cmd( "ip addr add 10.0.16.1/24 dev p64516-eth0" )
408 p64516.setMAC( '00:00:00:00:00:06', 'p64516-eth0' )
409
410 p64517.cmd( "ifconfig p64517-eth0.20 10.0.7.1 up" )
411 p64517.setMAC( '00:00:00:00:00:07', 'p64517-eth0.20' )
412 p64518.cmd( "ifconfig p64518-eth0.20 10.0.8.1 up" )
413 p64518.setMAC( '00:00:00:00:00:08', 'p64518-eth0.20' )
414
415 p64519.cmd( "ifconfig p64519-eth0.10 10.0.9.1 up" )
416 p64519.setMAC( '00:00:00:00:00:09', 'p64519-eth0.10' )
417 p64520.cmd( "ifconfig p64520-eth0.10 10.0.20.1 up" )
418 p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth0.10' )
pingping-linea32cf82015-10-08 22:37:37 -0700419
420 # setup configuration on the interface connected to hosts
alison62006dd2016-12-15 16:21:28 -0800421 p64514.setIP( "4.0.0.254", 8, "p64514-eth1" )
422 p64514.setMAC( '00:00:00:00:00:44', 'p64514-eth1' )
423 p64515.setIP( "5.0.0.254", 8, "p64515-eth1" )
424 p64515.setMAC( '00:00:00:00:00:55', 'p64515-eth1' )
425 p64516.setIP( "6.0.0.254", 8, "p64516-eth1" )
426 p64516.setMAC( '00:00:00:00:00:66', 'p64516-eth1' )
427
428 p64517.setIP( "7.0.0.254", 8, "p64517-eth1.20" )
429 p64517.setMAC( '00:00:00:00:00:77', 'p64517-eth1.20' )
430 p64518.setIP( "8.0.0.254", 8, "p64518-eth1.20" )
431 p64518.setMAC( '00:00:00:00:00:88', 'p64518-eth1.20' )
432
433 p64519.setIP( "9.0.0.254", 8, "p64519-eth1.10" )
434 p64519.setMAC( '00:00:00:00:00:99', 'p64519-eth1.10' )
435 p64520.setIP( "20.0.0.254", 8, "p64520-eth1.10" )
436 p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth1.10' )
pingping-linea32cf82015-10-08 22:37:37 -0700437
438 # enable forwarding on BGP peer hosts
alison62006dd2016-12-15 16:21:28 -0800439 p64514.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
440 p64515.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
441 p64516.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
442
443 p64517.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
444 p64518.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
445 p64519.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
446 p64520.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
pingping-linea32cf82015-10-08 22:37:37 -0700447
448 # config interface for control plane connectivity
alison62006dd2016-12-15 16:21:28 -0800449 p64514.setIP( "192.168.0.4", 24, "p64514-eth2" )
450 p64515.setIP( "192.168.0.5", 24, "p64515-eth2" )
451 p64516.setIP( "192.168.0.6", 24, "p64516-eth2" )
452
453 p64517.setIP( "192.168.0.7", 24, "p64517-eth2" )
454 p64518.setIP( "192.168.0.8", 24, "p64518-eth2" )
455 p64519.setIP( "192.168.0.9", 24, "p64519-eth2" )
456 p64520.setIP( "192.168.0.20", 24, "p64520-eth2" )
pingping-linea32cf82015-10-08 22:37:37 -0700457
458 # Setup hosts in each non-SDN AS
alison62006dd2016-12-15 16:21:28 -0800459 h64514, h64515, h64516, h64517, h64518, h64519, h64520 = \
460 net.get( 'h64514', 'h64515', 'h64516', 'h64517', 'h64518', 'h64519', 'h64520' )
461 h64514.cmd( 'ifconfig h64514-eth0 4.0.0.1 up' )
462 h64514.cmd( 'ip route add default via 4.0.0.254' )
463 h64514.setIP( '192.168.0.44', 24, 'h64514-eth1' ) # for control plane
464 h64515.cmd( 'ifconfig h64515-eth0 5.0.0.1 up' )
465 h64515.cmd( 'ip route add default via 5.0.0.254' )
466 h64516.cmd( 'ifconfig h64516-eth0 6.0.0.1 up' )
467 h64516.cmd( 'ip route add default via 6.0.0.254' )
468
469 h64517.cmd( 'ifconfig h64517-eth0.20 7.0.0.1 up' )
470 h64517.cmd( 'ip route add default via 7.0.0.254' )
471 h64517.setIP( '192.168.0.77', 24, 'h64517-eth1' ) # for control plane
472 h64518.cmd( 'ifconfig h64518-eth0.20 8.0.0.1 up' )
473 h64518.cmd( 'ip route add default via 8.0.0.254' )
474
475 h64519.cmd( 'ifconfig h64519-eth0.10 9.0.0.1 up' )
476 h64519.cmd( 'ip route add default via 9.0.0.254' )
477 h64519.setIP( '192.168.0.99', 24, 'h64519-eth1' ) # for control plane
478 h64520.cmd( 'ifconfig h64520-eth0.10 20.0.0.1 up' )
479 h64520.cmd( 'ip route add default via 20.0.0.254' )
pingping-linea32cf82015-10-08 22:37:37 -0700480
481
482 # set up swCtl100 as a learning
483 swCtl100 = net.get( 'swCtl100' )
484 swCtl100.cmd( 'ovs-vsctl set-controller swCtl100 none' )
485 swCtl100.cmd( 'ovs-vsctl set-fail-mode swCtl100 standalone' )
486
487 # connect all switches to controller
488 '''
489 onos1IP = "10.128.4.52"
490 onos2IP = "10.128.4.53"
491 onos3IP = "10.128.4.54"
492 for i in range ( 1, numSw + 1 ):
493 swX = net.get( 'sw%s' % ( i ) )
494 swX.cmd( 'ovs-vsctl set-controller sw%s tcp:%s:6653 tcp:%s:6653 tcp:%s:6653' % ( i, onos1IP, onos2IP, onos3IP) )
495 '''
496
497 # Start Quagga on border routers
alison62006dd2016-12-15 16:21:28 -0800498 startquagga( p64514, 64514, 'quagga64514.conf' )
499 startquagga( p64515, 64515, 'quagga64515.conf' )
500 startquagga( p64516, 64516, 'quagga64516.conf' )
501
502 startquagga( p64517, 64517, 'quagga64517.conf' )
503 startquagga( p64518, 64518, 'quagga64518.conf' )
504 startquagga( p64519, 64519, 'quagga64519.conf' )
505 startquagga( p64520, 64520, 'quagga64520.conf' )
pingping-linea32cf82015-10-08 22:37:37 -0700506
507 # start Quagga in SDN network
alison62006dd2016-12-15 16:21:28 -0800508 startquagga( spk1, 64513, 'quagga-sdn.conf' )
509 startquagga( spk2, 64512, 'quagga-sdn-speaker2.conf' )
510 startquagga( spk3, 64511, 'quagga-sdn3.conf' )
511 startquagga( spk4, 64510, 'quagga-sdn4.conf' )
pingping-linea32cf82015-10-08 22:37:37 -0700512
513 root = net.get( 'root' )
514 root.intf( 'root-eth0' ).setIP( '1.1.1.2/24' )
515 root.cmd( 'ip addr add 192.168.0.100/24 dev root-eth0' )
516
517 root.intf( 'root-eth1' ).setIP( '1.1.1.4/24' )
518 root.cmd( 'ip addr add 192.168.0.101/24 dev root-eth1' )
519
520 root.intf( 'root-eth2' ).setIP( '1.1.1.6/24' )
521 root.cmd( 'ip addr add 192.168.0.102/24 dev root-eth2' )
522
alison62006dd2016-12-15 16:21:28 -0800523 spk1.intf( 'spk1-eth1' ).setIP( '1.1.1.1/24' )
524 spk2.intf( 'spk2-eth1' ).setIP( '1.1.1.3/24' )
525 spk3.intf( 'spk3-eth1' ).setIP( '1.1.1.5/24' )
526 spk4.intf( 'spk4-eth1' ).setIP( '1.1.1.7/24' )
pingping-linea32cf82015-10-08 22:37:37 -0700527
528
529 stopsshd()
530
alison62006dd2016-12-15 16:21:28 -0800531 hosts = [ p64514, p64515, p64516, p64517, p64518, p64519, p64520,
532 h64514, h64517, h64519 ];
pingping-linea32cf82015-10-08 22:37:37 -0700533 startsshds( hosts )
534
535
536 '''
537 forwarding1 = '%s:2000:%s:2000' % ( '1.1.1.2', onos1IP )
538 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
539 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding1, onos1IP ) )
540
541 forwarding2 = '%s:2000:%s:2000' % ( '1.1.1.4', onos2IP )
542 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
543 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding2, onos2IP ) )
544
545 forwarding3 = '%s:2000:%s:2000' % ( '1.1.1.6', onos3IP )
546 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
547 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding3, onos3IP ) )
548 '''
549 CLI( net )
550
551 stopsshd()
552 stopquagga()
553 net.stop()
554
555
556if __name__ == '__main__':
557 setLogLevel( 'debug' )
558 sdn1net()