blob: deced6b4fa9bb9d0284474fa307176b8763ea6ab [file] [log] [blame]
pingping-lin117a43b2015-09-08 17:40:53 -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-lin117a43b2015-09-08 17:40:53 -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
31AS 64515, reachable by 10.0.5.1
32AS 64516, reachable by 10.0.6.1
33"""
34
35from mininet.net import Mininet
pingping-lin117a43b2015-09-08 17:40:53 -070036from mininet.log import setLogLevel, info
37from mininet.cli import CLI
alisone4121a92016-11-22 16:31:36 -080038from mininet.node import Host, RemoteController
pingping-lin117a43b2015-09-08 17:40:53 -070039from mininet.topo import Topo
40from mininet.util import quietRun
pingping-lin117a43b2015-09-08 17:40:53 -070041
42QUAGGA_DIR = '/usr/lib/quagga'
43QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
Jon Hallfabd7e52016-04-19 19:20:59 -070044QUAGGA_CONFIG_DIR = '~/OnosSystemTest/TestON/tests/USECASE/USECASE_SdnipFunction/dependencies/'
pingping-lin5bb663b2015-09-24 11:47:50 -070045# onos1IP = '10.254.1.201'
pingping-lin117a43b2015-09-08 17:40:53 -070046numSw = 39
47
alisone4121a92016-11-22 16:31:36 -080048class VLANHost( Host ):
49 def config( self, vlan=100, intfName=None, **params ):
50 r = super( Host, self ).config( **params )
51 intf = self.intf( intfName )
52 self.cmd( 'ifconfig %s inet 0' % intf )
53 self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
54 self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
55 newName = '%s.%d' % ( intf, vlan )
56 intf.name = newName
57 self.nameToIntf[ newName ] = intf
58 return r
59
pingping-lin117a43b2015-09-08 17:40:53 -070060
61class SDNTopo( Topo ):
62 "SDN Topology"
63
64 def __init__( self, *args, **kwargs ):
65
66 Topo.__init__( self, *args, **kwargs )
67
68 # BGP peer hosts
alisone4121a92016-11-22 16:31:36 -080069 p64514 = self.addHost( 'p64514' )
70 p64515 = self.addHost( 'p64515' )
71 p64516 = self.addHost( 'p64516' )
72
73 p64517 = self.addHost( 'p64517', cls=VLANHost, vlan=20 )
74 p64518 = self.addHost( 'p64518', cls=VLANHost, vlan=20 )
75 p64519 = self.addHost( 'p64519', cls=VLANHost, vlan=10 )
76 p64520 = self.addHost( 'p64520', cls=VLANHost, vlan=10 )
pingping-lin117a43b2015-09-08 17:40:53 -070077
78 '''
79 sw1 = self.addSwitch( 'SEAT', dpid = '00000000000000a1' )
80 sw2 = self.addSwitch( 'PORT', dpid = '00000000000000a2' )
81 sw3 = self.addSwitch( 'SUNN', dpid = '00000000000000a3' )
82 sw4 = self.addSwitch( 'RENO', dpid = '00000000000000a4' )
83 sw5 = self.addSwitch( 'LOSA', dpid = '00000000000000a5' )
84 sw6 = self.addSwitch( 'MISS', dpid = '00000000000000a6' )
85 sw7 = self.addSwitch( 'LASV', dpid = '00000000000000a7' )
86 sw8 = self.addSwitch( 'SALT', dpid = '00000000000000a8' )
87 sw9 = self.addSwitch( 'PHOE', dpid = '00000000000000a9' )
88 sw10 = self.addSwitch( 'TUCS', dpid = '0000000000000a10' )
89 sw11 = self.addSwitch( 'DENV', dpid = '0000000000000a11' )
90 sw12 = self.addSwitch( 'ELPA', dpid = '0000000000000a12' )
91 sw13 = self.addSwitch( 'MINN', dpid = '0000000000000a13' )
92 sw14 = self.addSwitch( 'KANS', dpid = '0000000000000a14' )
93 sw15 = self.addSwitch( 'TULS', dpid = '0000000000000a15' )
94 sw16 = self.addSwitch( 'DALL', dpid = '0000000000000a16' )
95 sw17 = self.addSwitch( 'HOUH', dpid = '0000000000000a17' )
96 sw18 = self.addSwitch( 'COLU', dpid = '0000000000000a18' )
97 sw19 = self.addSwitch( 'JCSN', dpid = '0000000000000a19' )
98 sw20 = self.addSwitch( 'BATO', dpid = '0000000000000a20' )
99 sw21 = self.addSwitch( 'EQCH', dpid = '0000000000000a21' )
100 sw22 = self.addSwitch( 'STAR', dpid = '0000000000000a22' )
101 sw23 = self.addSwitch( 'CHIC', dpid = '0000000000000a23' )
102 sw24 = self.addSwitch( 'INDI', dpid = '0000000000000a24' )
103 sw25 = self.addSwitch( 'CINC', dpid = '0000000000000a25' )
104 sw26 = self.addSwitch( 'LOUI', dpid = '0000000000000a26' )
105 sw27 = self.addSwitch( 'ATLA', dpid = '0000000000000a27' )
106 sw28 = self.addSwitch( 'JACK', dpid = '0000000000000a28' )
107 sw29 = self.addSwitch( 'CLEV', dpid = '0000000000000a29' )
108 sw30 = self.addSwitch( 'PITT', dpid = '0000000000000a30' )
109 sw31 = self.addSwitch( 'ASHB', dpid = '0000000000000a31' )
110 sw32 = self.addSwitch( 'WASH', dpid = '0000000000000a32' )
111 sw33 = self.addSwitch( 'RALE', dpid = '0000000000000a33' )
112 sw34 = self.addSwitch( 'CHAR', dpid = '0000000000000a34' )
113 sw35 = self.addSwitch( 'ALBA', dpid = '0000000000000a35' )
114 sw36 = self.addSwitch( 'BOST', dpid = '0000000000000a36' )
115 sw37 = self.addSwitch( 'HART', dpid = '0000000000000a37' )
116 sw38 = self.addSwitch( 'NEWY', dpid = '0000000000000a38' )
117 sw39 = self.addSwitch( 'PHIL', dpid = '0000000000000a39' )
118 '''
119 sw1 = self.addSwitch( 'sw1', dpid = '00000000000000a1' )
120 sw2 = self.addSwitch( 'sw2', dpid = '00000000000000a2' )
121 sw3 = self.addSwitch( 'sw3', dpid = '00000000000000a3' )
122 sw4 = self.addSwitch( 'sw4', dpid = '00000000000000a4' )
123 sw5 = self.addSwitch( 'sw5', dpid = '00000000000000a5' )
124 sw6 = self.addSwitch( 'sw6', dpid = '00000000000000a6' )
125 sw7 = self.addSwitch( 'sw7', dpid = '00000000000000a7' )
126 sw8 = self.addSwitch( 'sw8', dpid = '00000000000000a8' )
127 sw9 = self.addSwitch( 'sw9', dpid = '00000000000000a9' )
128 sw10 = self.addSwitch( 'sw10', dpid = '0000000000000a10' )
129 sw11 = self.addSwitch( 'sw11', dpid = '0000000000000a11' )
130 sw12 = self.addSwitch( 'sw12', dpid = '0000000000000a12' )
131 sw13 = self.addSwitch( 'sw13', dpid = '0000000000000a13' )
132 sw14 = self.addSwitch( 'sw14', dpid = '0000000000000a14' )
133 sw15 = self.addSwitch( 'sw15', dpid = '0000000000000a15' )
134 sw16 = self.addSwitch( 'sw16', dpid = '0000000000000a16' )
135 sw17 = self.addSwitch( 'sw17', dpid = '0000000000000a17' )
136 sw18 = self.addSwitch( 'sw18', dpid = '0000000000000a18' )
137 sw19 = self.addSwitch( 'sw19', dpid = '0000000000000a19' )
138 sw20 = self.addSwitch( 'sw20', dpid = '0000000000000a20' )
139 sw21 = self.addSwitch( 'sw21', dpid = '0000000000000a21' )
140 sw22 = self.addSwitch( 'sw22', dpid = '0000000000000a22' )
141 sw23 = self.addSwitch( 'sw23', dpid = '0000000000000a23' )
142 sw24 = self.addSwitch( 'sw24', dpid = '0000000000000a24' )
143 sw25 = self.addSwitch( 'sw25', dpid = '0000000000000a25' )
144 sw26 = self.addSwitch( 'sw26', dpid = '0000000000000a26' )
145 sw27 = self.addSwitch( 'sw27', dpid = '0000000000000a27' )
146 sw28 = self.addSwitch( 'sw28', dpid = '0000000000000a28' )
147 sw29 = self.addSwitch( 'sw29', dpid = '0000000000000a29' )
148 sw30 = self.addSwitch( 'sw30', dpid = '0000000000000a30' )
149 sw31 = self.addSwitch( 'sw31', dpid = '0000000000000a31' )
150 sw32 = self.addSwitch( 'sw32', dpid = '0000000000000a32' )
151 sw33 = self.addSwitch( 'sw33', dpid = '0000000000000a33' )
152 sw34 = self.addSwitch( 'sw34', dpid = '0000000000000a34' )
153 sw35 = self.addSwitch( 'sw35', dpid = '0000000000000a35' )
154 sw36 = self.addSwitch( 'sw36', dpid = '0000000000000a36' )
155 sw37 = self.addSwitch( 'sw37', dpid = '0000000000000a37' )
156 sw38 = self.addSwitch( 'sw38', dpid = '0000000000000a38' )
157 sw39 = self.addSwitch( 'sw39', dpid = '0000000000000a39' )
158
159
160 # Add a layer2 switch for control plane connectivity
161 # This switch isn't part of the SDN topology
162 # We'll use the ovs-controller to turn this into a learning switch
163 swCtl100 = self.addSwitch( 'swCtl100', dpid = '0000000000000100' )
164
165
166 # BGP speaker hosts
alisone4121a92016-11-22 16:31:36 -0800167 spk1 = self.addHost( 'spk1' )
168 spk2 = self.addHost( 'spk2', cls=VLANHost, vlan=20 )
169 spk3 = self.addHost( 'spk3', cls=VLANHost, vlan=10 )
pingping-lin117a43b2015-09-08 17:40:53 -0700170
171 root = self.addHost( 'root', inNamespace = False , ip = '0' )
172
173 # hosts behind each AS
alisone4121a92016-11-22 16:31:36 -0800174 h64514 = self.addHost( 'h64514' )
175 h64515 = self.addHost( 'h64515' )
176 h64516 = self.addHost( 'h64516' )
pingping-lin117a43b2015-09-08 17:40:53 -0700177
alisone4121a92016-11-22 16:31:36 -0800178 #VLAN hosts behind each AS
179 h64517 = self.addHost( 'h64517', cls=VLANHost, vlan=20 )
180 h64518 = self.addHost( 'h64518', cls=VLANHost, vlan=20 )
181 h64519 = self.addHost( 'h64519', cls=VLANHost, vlan=10 )
182 h64520 = self.addHost( 'h64520', cls=VLANHost, vlan=10 )
183
184 self.addLink( 'spk1', sw24 )
185 self.addLink( 'spk2', sw24 )
186 self.addLink( 'spk3', sw24 )
pingping-lin117a43b2015-09-08 17:40:53 -0700187
188 # connect all switches
189 self.addLink( sw1, sw2 )
190 self.addLink( sw1, sw6 )
191 self.addLink( sw1, sw8 )
192 self.addLink( sw2, sw3 )
193 self.addLink( sw3, sw4 )
194 self.addLink( sw3, sw5 )
195 self.addLink( sw4, sw8 )
196 self.addLink( sw5, sw7 )
197 self.addLink( sw5, sw9 )
198 self.addLink( sw6, sw13 )
199 self.addLink( sw7, sw8 )
200 self.addLink( sw8, sw11 )
201 self.addLink( sw9, sw10 )
202 self.addLink( sw10, sw12 )
203 self.addLink( sw11, sw12 )
204 self.addLink( sw11, sw14 )
205 self.addLink( sw12, sw17 )
206 self.addLink( sw13, sw14 )
207 self.addLink( sw13, sw21 )
208 self.addLink( sw14, sw15 )
209 self.addLink( sw14, sw18 )
210 self.addLink( sw14, sw23 )
211 self.addLink( sw15, sw16 )
212 self.addLink( sw16, sw17 )
213 self.addLink( sw17, sw19 )
214 self.addLink( sw17, sw20 )
215 self.addLink( sw18, sw23 )
216 self.addLink( sw19, sw27 )
217 self.addLink( sw20, sw28 )
218 self.addLink( sw21, sw22 )
219 self.addLink( sw21, sw29 )
220 self.addLink( sw22, sw23 )
221 self.addLink( sw23, sw24 )
222 self.addLink( sw23, sw31 )
223 self.addLink( sw24, sw25 )
224 self.addLink( sw25, sw26 )
225 self.addLink( sw26, sw27 )
226 self.addLink( sw27, sw28 )
227 self.addLink( sw27, sw34 )
228 self.addLink( sw29, sw30 )
229 self.addLink( sw29, sw35 )
230 self.addLink( sw30, sw31 )
231 self.addLink( sw31, sw32 )
232 self.addLink( sw32, sw33 )
233 self.addLink( sw32, sw39 )
234 self.addLink( sw33, sw34 )
235 self.addLink( sw35, sw36 )
236 self.addLink( sw36, sw37 )
237 self.addLink( sw37, sw38 )
238 self.addLink( sw38, sw39 )
239
240 # connection between switches and peers
alisone4121a92016-11-22 16:31:36 -0800241 self.addLink( p64514, sw32 )
242 self.addLink( p64515, sw8 )
243 self.addLink( p64516, sw28 )
244
245 self.addLink( p64517, sw7 )
246 self.addLink( p64518, sw9 )
247 self.addLink( p64519, sw5 )
248 self.addLink( p64520, sw5 ) # should be sw5
pingping-lin117a43b2015-09-08 17:40:53 -0700249
250 # connection between BGP peer and hosts behind the BGP peer
alisone4121a92016-11-22 16:31:36 -0800251 self.addLink( p64514, h64514 )
252 self.addLink( p64515, h64515 )
253 self.addLink( p64516, h64516 )
254
255 self.addLink( p64517, h64517 )
256 self.addLink( p64518, h64518 )
257 self.addLink( p64519, h64519 )
258 self.addLink( p64520, h64520 )
259
pingping-lin117a43b2015-09-08 17:40:53 -0700260
261 # Internal Connection To Hosts
alisone4121a92016-11-22 16:31:36 -0800262 self.addLink( swCtl100, p64514 )
263 self.addLink( swCtl100, p64515 )
264 self.addLink( swCtl100, p64516 )
265
266 self.addLink( swCtl100, p64517 )
267 self.addLink( swCtl100, p64518 )
268 self.addLink( swCtl100, p64519 )
269 self.addLink( swCtl100, p64520 )
270
271 self.addLink( swCtl100, spk1 )
272 self.addLink( swCtl100, spk2 )
273 self.addLink( swCtl100, spk3 )
pingping-lin117a43b2015-09-08 17:40:53 -0700274
275
alisone4121a92016-11-22 16:31:36 -0800276 # add h64514 to control plane for ping test
277 self.addLink( swCtl100, h64514 )
278 self.addLink( swCtl100, h64517 )
279 self.addLink( swCtl100, h64519 )
pingping-lin117a43b2015-09-08 17:40:53 -0700280 self.addLink( swCtl100, root )
281
282
283def startsshd( host ):
284 "Start sshd on host"
285 info( '*** Starting sshd\n' )
286 name, intf, ip = host.name, host.defaultIntf(), host.IP()
287 banner = '/tmp/%s.banner' % name
288 host.cmd( 'echo "Welcome to %s at %s" > %s' % ( name, ip, banner ) )
289 host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
290 info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
291
292def startsshds ( hosts ):
293 for h in hosts:
294 startsshd( h )
295
296def stopsshd():
297 "Stop *all* sshd processes with a custom banner"
298 info( '*** Shutting down stale sshd/Banner processes ',
299 quietRun( "pkill -9 -f Banner" ), '\n' )
300
301def startquagga( host, num, config_file ):
302 info( '*** Starting Quagga on %s\n' % host )
pingping-lin950b50d2015-09-14 12:00:08 -0700303 host.cmd( "cd %s" % QUAGGA_CONFIG_DIR )
pingping-lin117a43b2015-09-08 17:40:53 -0700304 zebra_cmd = \
305 '%s/zebra -d -f ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid'\
306 % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
307 quagga_cmd = '%s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' \
308 % ( QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
309
310 print zebra_cmd
311 print quagga_cmd
312
313 host.cmd( zebra_cmd )
314 host.cmd( quagga_cmd )
315
316def startquaggahost5( host, num ):
317 info( '*** Starting Quagga on %s\n' % host )
318 zebra_cmd = \
319 '%s/zebra -d -f ./zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' \
320 % ( QUAGGA_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
321 quagga_cmd = \
322 '%s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid'\
323 % ( QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num )
324
325 host.cmd( zebra_cmd )
326 host.cmd( quagga_cmd )
327
pingping-lin117a43b2015-09-08 17:40:53 -0700328def stopquagga():
329 quietRun( 'sudo pkill -9 -f bgpd' )
330 quietRun( 'sudo pkill -9 -f zebra' )
331
332def sdn1net():
333 topo = SDNTopo()
334 info( '*** Creating network\n' )
335 # time.sleep( 30 )
336 net = Mininet( topo = topo, controller = RemoteController )
337
338
alisone4121a92016-11-22 16:31:36 -0800339 spk1, spk2, spk3, p64514, p64515, p64516, p64517, p64518, p64519, p64520 = \
340 net.get( 'spk1', 'spk2', 'spk3',
341 'p64514', 'p64515', 'p64516', 'p64517', 'p64518', 'p64519', 'p64520' )
pingping-lin117a43b2015-09-08 17:40:53 -0700342
343 # Adding addresses to host64513_1 interface connected to sw24
344 # for BGP peering
alisone4121a92016-11-22 16:31:36 -0800345 spk1.setMAC( '00:00:00:00:00:01', 'spk1-eth0' )
346 spk1.cmd( 'ip addr add 10.0.4.101/24 dev spk1-eth0' )
347 spk1.cmd( 'ip addr add 10.0.5.101/24 dev spk1-eth0' )
348 spk1.cmd( 'ip addr add 10.0.6.101/24 dev spk1-eth0' )
349 spk1.defaultIntf().setIP( '10.1.4.101/24' )
350 spk1.defaultIntf().setMAC( '00:00:00:00:00:01' )
pingping-lin117a43b2015-09-08 17:40:53 -0700351
alisone4121a92016-11-22 16:31:36 -0800352 spk2.setMAC( '00:00:00:00:00:02', 'spk2-eth0.20' )
353 spk2.cmd( 'ip addr add 10.0.7.101/24 dev spk2-eth0.20' )
354 spk2.cmd( 'ip addr add 10.0.8.101/24 dev spk2-eth0.20' )
355 spk2.defaultIntf().setIP( '10.1.7.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 p64517.config( vlan=20, intfName="p64517-eth1", ip="7.0.0.254" )
365 p64518.config( vlan=20, intfName="p64518-eth1", ip="8.0.0.254" )
366 p64519.config( vlan=10, intfName="p64519-eth1", ip="9.0.0.254" )
367 p64520.config( vlan=10, intfName="p64520-eth1", ip="20.0.0.254" )
pingping-lin117a43b2015-09-08 17:40:53 -0700368
369 # Net has to be start after adding the above link
370 net.start()
371
372 # setup configuration on the interface connected to switch
alisone4121a92016-11-22 16:31:36 -0800373 p64514.cmd( "ifconfig p64514-eth0 10.0.4.1 up" )
374 p64514.setMAC( '00:00:00:00:00:04', 'p64514-eth0' )
375 p64515.cmd( "ifconfig p64515-eth0 10.0.5.1 up" )
376 p64515.setMAC( '00:00:00:00:00:05', 'p64515-eth0' )
377 p64516.cmd( "ifconfig p64516-eth0 10.0.6.1 up" )
378 p64516.setMAC( '00:00:00:00:00:06', 'p64516-eth0' )
379
380 p64517.cmd( "ifconfig p64517-eth0.20 10.0.7.1 up" )
381 p64517.setMAC( '00:00:00:00:00:07', 'p64517-eth0.20' )
382 p64518.cmd( "ifconfig p64518-eth0.20 10.0.8.1 up" )
383 p64518.setMAC( '00:00:00:00:00:08', 'p64518-eth0.20' )
384
385 p64519.cmd( "ifconfig p64519-eth0.10 10.0.9.1 up" )
386 p64519.setMAC( '00:00:00:00:00:09', 'p64519-eth0.10' )
387 p64520.cmd( "ifconfig p64520-eth0.10 10.0.20.1 up" )
388 p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth0.10' )
pingping-lin117a43b2015-09-08 17:40:53 -0700389
390 # setup configuration on the interface connected to hosts
alisone4121a92016-11-22 16:31:36 -0800391 p64514.setIP( "4.0.0.254", 8, "p64514-eth1" )
392 p64514.setMAC( '00:00:00:00:00:44', 'p64514-eth1' )
393 p64515.setIP( "5.0.0.254", 8, "p64515-eth1" )
394 p64515.setMAC( '00:00:00:00:00:55', 'p64515-eth1' )
395 p64516.setIP( "6.0.0.254", 8, "p64516-eth1" )
396 p64516.setMAC( '00:00:00:00:00:66', 'p64516-eth1' )
397
398 p64517.setIP( "7.0.0.254", 8, "p64517-eth1.20" )
399 p64517.setMAC( '00:00:00:00:00:77', 'p64517-eth1.20' )
400 p64518.setIP( "8.0.0.254", 8, "p64518-eth1.20" )
401 p64518.setMAC( '00:00:00:00:00:88', 'p64518-eth1.20' )
402
403 p64519.setIP( "9.0.0.254", 8, "p64519-eth1.10" )
404 p64519.setMAC( '00:00:00:00:00:99', 'p64519-eth1.10' )
405 p64520.setIP( "20.0.0.254", 8, "p64520-eth1.10" )
406 p64520.setMAC( '00:00:00:00:00:20', 'p64520-eth1.10' )
407
pingping-lin117a43b2015-09-08 17:40:53 -0700408
409 # enable forwarding on BGP peer hosts
alisone4121a92016-11-22 16:31:36 -0800410 p64514.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
411 p64515.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
412 p64516.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
413
414 p64517.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
415 p64518.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
416 p64519.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
417 p64520.cmd( 'sysctl net.ipv4.conf.all.forwarding=1' )
pingping-lin117a43b2015-09-08 17:40:53 -0700418
419 # config interface for control plane connectivity
alisone4121a92016-11-22 16:31:36 -0800420 p64514.setIP( "192.168.0.4", 24, "p64514-eth2" )
421 p64515.setIP( "192.168.0.5", 24, "p64515-eth2" )
422 p64516.setIP( "192.168.0.6", 24, "p64516-eth2" )
423
424 p64517.setIP( "192.168.0.7", 24, "p64517-eth2" )
425 p64518.setIP( "192.168.0.8", 24, "p64518-eth2" )
426 p64519.setIP( "192.168.0.9", 24, "p64519-eth2" )
427 p64520.setIP( "192.168.0.20", 24, "p64520-eth2" )
pingping-lin117a43b2015-09-08 17:40:53 -0700428
429 # Setup hosts in each non-SDN AS
alisone4121a92016-11-22 16:31:36 -0800430 h64514, h64515, h64516, h64517, h64518, h64519, h64520 = \
431 net.get( 'h64514', 'h64515', 'h64516', 'h64517', 'h64518', 'h64519', 'h64520' )
432 h64514.cmd( 'ifconfig h64514-eth0 4.0.0.1 up' )
433 h64514.cmd( 'ip route add default via 4.0.0.254' )
434 h64514.setIP( '192.168.0.44', 24, 'h64514-eth1' ) # for control plane
435 h64515.cmd( 'ifconfig h64515-eth0 5.0.0.1 up' )
436 h64515.cmd( 'ip route add default via 5.0.0.254' )
437 h64516.cmd( 'ifconfig h64516-eth0 6.0.0.1 up' )
438 h64516.cmd( 'ip route add default via 6.0.0.254' )
pingping-lin117a43b2015-09-08 17:40:53 -0700439
alisone4121a92016-11-22 16:31:36 -0800440 h64517.cmd( 'ifconfig h64517-eth0.20 7.0.0.1 up' )
441 h64517.cmd( 'ip route add default via 7.0.0.254' )
442 h64517.setIP( '192.168.0.77', 24, 'h64517-eth1' ) # for control plane
443 h64518.cmd( 'ifconfig h64518-eth0.20 8.0.0.1 up' )
444 h64518.cmd( 'ip route add default via 8.0.0.254' )
445
446 h64519.cmd( 'ifconfig h64519-eth0.10 9.0.0.1 up' )
447 h64519.cmd( 'ip route add default via 9.0.0.254' )
448 h64519.setIP( '192.168.0.99', 24, 'h64519-eth1' ) # for control plane
449 h64520.cmd( 'ifconfig h64520-eth0.10 20.0.0.1 up' )
450 h64520.cmd( 'ip route add default via 20.0.0.254' )
pingping-lin117a43b2015-09-08 17:40:53 -0700451
452 # set up swCtl100 as a learning
453 swCtl100 = net.get( 'swCtl100' )
454 swCtl100.cmd( 'ovs-vsctl set-controller swCtl100 none' )
455 swCtl100.cmd( 'ovs-vsctl set-fail-mode swCtl100 standalone' )
456
457 # connect all switches to controller
pingping-lin5bb663b2015-09-24 11:47:50 -0700458 '''
pingping-lin117a43b2015-09-08 17:40:53 -0700459 for i in range ( 1, numSw + 1 ):
460 swX = net.get( 'sw%s' % ( i ) )
Charles Chan029be652015-08-24 01:46:10 +0800461 swX.cmd( 'ovs-vsctl set-controller sw%s tcp:%s:6653' % ( i, onos1IP ) )
pingping-lin5bb663b2015-09-24 11:47:50 -0700462 '''
alisone4121a92016-11-22 16:31:36 -0800463 # Start Quagga as the external BGP routers
pingping-lin117a43b2015-09-08 17:40:53 -0700464 '''
465 for i in range ( 64514, 64516 + 1 ):
466 startquagga( 'peer%s' % ( i ), i, 'quagga%s.conf' % ( i ) )
467 '''
alisone4121a92016-11-22 16:31:36 -0800468 startquagga( p64514, 64514, 'quagga64514.conf' )
469 startquagga( p64515, 64515, 'quagga64515.conf' )
470 startquagga( p64516, 64516, 'quagga64516.conf' )
pingping-lin117a43b2015-09-08 17:40:53 -0700471
alisone4121a92016-11-22 16:31:36 -0800472 startquagga( p64517, 64517, 'quagga64517.conf' )
473 startquagga( p64518, 64518, 'quagga64518.conf' )
474 startquagga( p64519, 64519, 'quagga64519.conf' )
475 startquagga( p64520, 64520, 'quagga64520.conf' )
pingping-lin117a43b2015-09-08 17:40:53 -0700476
alisone4121a92016-11-22 16:31:36 -0800477 # start Quagga as the BGP speaker
478 startquagga( spk1, 64513, 'quagga-sdn.conf' )
479 startquagga( spk2, 64512, 'quagga-sdn2.conf' )
480 startquagga( spk3, 64511, 'quagga-sdn3.conf' )
pingping-lin117a43b2015-09-08 17:40:53 -0700481
482 root = net.get( 'root' )
alisone4121a92016-11-22 16:31:36 -0800483
pingping-lin117a43b2015-09-08 17:40:53 -0700484 root.intf( 'root-eth0' ).setIP( '1.1.1.2/24' )
485 root.cmd( 'ip addr add 192.168.0.100/24 dev root-eth0' )
486
alisone4121a92016-11-22 16:31:36 -0800487 spk1.intf( 'spk1-eth1' ).setIP( '1.1.1.1/24' )
488 spk2.intf( 'spk2-eth1' ).setIP( '1.1.1.3/24' )
489 spk3.intf( 'spk3-eth1' ).setIP( '1.1.1.5/24' )
pingping-lin117a43b2015-09-08 17:40:53 -0700490
491 stopsshd()
492
alisone4121a92016-11-22 16:31:36 -0800493 hosts = [ p64514, p64515, p64516, p64517, p64518, p64519, p64520,
494 h64514, h64517, h64519 ];
pingping-lin117a43b2015-09-08 17:40:53 -0700495 startsshds( hosts )
496 #
pingping-lin5bb663b2015-09-24 11:47:50 -0700497 '''
pingping-lin117a43b2015-09-08 17:40:53 -0700498 forwarding1 = '%s:2000:%s:2000' % ( '1.1.1.2', onos1IP )
499 root.cmd( 'ssh -nNT -o "PasswordAuthentication no" \
500 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding1, onos1IP ) )
501
pingping-lin5bb663b2015-09-24 11:47:50 -0700502 '''
pingping-lin117a43b2015-09-08 17:40:53 -0700503 # time.sleep( 3000000000 )
504 CLI( net )
505
506
507 stopsshd()
508 stopquagga()
509 net.stop()
510
511if __name__ == '__main__':
pingping-lin950b50d2015-09-14 12:00:08 -0700512 setLogLevel( 'debug' )
pingping-lin117a43b2015-09-08 17:40:53 -0700513 sdn1net()