Vous êtes sur la page 1sur 4

#!

/usr/bin/python
from
from
from
from
from
from
from

mininet.net import Mininet


mininet.node import Node
mininet.link import TCLink
mininet.log import setLogLevel, info
mininet.util import quietRun
threading import Timer
time import sleep

#creation des nodes!


def myNet(cname='controller', cargs='-v ptcp:'):
"Create network from scratch using Open vSwitch."
info( "*** Creating nodes\n" )
controller = Node( 'c0', inNamespace=False )
switch0 = Node( 's0', inNamesapce=False )
switch1 = Node( 's1', inNamespace=False )
switch2 = Node( 's2', inNamesapce=False )
switch3 = Node( 's3', inNamespace=False )
h0 = Node( 'h0' )
h1 = Node( 'h1' )
h2 = Node( 'h2' )
h3 = Node( 'h3' )
#ceration des liens!
info( "*** Craeting Links\n" )
linkopts0=dict(bw=100, delay='1ms', loss=0)
linkopts1=dict(bw=100, delay='10ms', loss=1)
#S0
link00
link01
link02
link03

=
=
=
=

TCLink(
TCLink(
TCLink(
TCLink(

h0, switch0, **linkopts0)


switch0, switch1, **linkopts1)
switch0, switch2, **linkopts1)
switch0, switch3, **linkopts1)

#S1
link11
link10
link12
link13

=
=
=
=

TCLink(
TCLink(
TCLink(
TCLink(

h1, switch1, **linkopts0)


switch1, switch0, **linkopts1)
switch1, switch2, **linkopts1)
switch1, switch3, **linkopts1)

#s2
link22
link20
link21
link23

=
=
=
=

TCLink(
TCLink(
TCLink(
TCLink(

h2, switch2, **linkopts0)


switch2, switch0, **linkopts1)
switch2, switch1, **linkopts1)
switch2, switch3, **linkopts1)

#s3
link33
link32
link31
link30

=
=
=
=

TCLink(
TCLink(
TCLink(
TCLink(

h3, switch3, **linkopts0)


switch3, switch2, **linkopts1)
switch3, switch1, **linkopts1)
switch3, switch0, **linkopts1)

#0
link00.intf1.setMAC("0:0:0:0:0:1")
link01.intf2.setMAC("0:0:0:0:0:2")

link03.intf3.setMAC("0:0:0:0:0:3")
link02.intf4.setMAC("0:0:0:0:0:4")
#1
link11.intf1.setMAC("0:0:0:0:1:0")
link10.intf2.setMAC("0:0:0:0:2:0")
link12.intf4.setMAC("0:0:0:0:4:0")
link13.intf3.setMAC('0:0:0:0:3:0')
#2
link22.intf1.setMAC("0:0:0:1:0:0")
link20.intf2.setMAC("0:0:0:3:0:0")
link21.intf4.setMAC("0:0:0:4:0:0")
link23.intf3.setMAC('0:0:0:2:0:0')
#3
link33.intf1.setMAC("0:0:1:0:0:0")
link30.intf2.setMAC("0:0:4:0:0:0")
link32.intf4.setMAC("0:0:2:0:0:0")
link31.intf3.setMAC('0:0:3:0:0:0')
#les @IP&@MAC pours h0,h1,h2,h3
info( "*** Configuring hosts\n" )
h0.setIP( '192.168.123.1/24' )
h1.setIP( '192.168.123.2/24' )
h2.setIP( '192.168.123.3/24' )
h3.setIP( '192.168.123.4/24' )
h0.setMAC("0:0:0:0:0:10")
h1.setMAC("0:0:0:0:0:20")
h2.setMAC("0:0:0:0:0:30")
h3.setMAC("0:0:0:0:0:40")
info( "*** Starting network using Open vSwitch\n" )
switch0.cmd( 'ovs-vsctl del-br dp0' )
switch0.cmd( 'ovs-vsctl add-br dp0' )
switch1.cmd( 'ovs-vsctl del-br dp1' )
switch1.cmd( 'ovs-vsctl add-br dp1' )
switch2.cmd( 'ovs-vsctl del-br dp0' )
switch2.cmd( 'ovs-vsctl add-br dp0' )
switch3.cmd( 'ovs-vsctl del-br dp1' )
switch3.cmd( 'ovs-vsctl add-br dp1' )
controller.cmd( cname + '' + cargs + '&' )
for intf in switch0.intfs.values():
print intf
print switch0.cmd( 'ovs-vsctl add-port dp0 %s' %intf)
for intf in switch1.intfs.values():
print intf
print switch1.cmd( 'ovs-vsctl add-port dp1 %s' %intf)
for intf in switch2.intfs.values():
print intf
print switch2.cmd( 'ovs-vsctl add-port dp0 %s' %intf)
for intf in switch3.intfs.values():
print intf
print switch3.cmd( 'ovs-vsctl add-port dp1 %s' %intf)

switch0.cmd(
switch1.cmd(
switch2.cmd(
switch3.cmd(

'ovs-vsctl
'ovs-vsctl
'ovs-vsctl
'ovs-vsctl

set-controller
set-controller
set-controller
set-controller

dp0
dp0
dp0
dp0

tcp:127.0.0.1:6633'
tcp:127.0.0.1:6633'
tcp:127.0.0.1:6633'
tcp:127.0.0.1:6633'

)
)
)
)

info( '*** waiting for switch to connect to controller' )


while 'is_connected' not in quietRun( 'ovs-vsctl show' ):
sleep( 1 )
info( '.' )
info( '\n' )
def cDelay1():
switch0.cmdPrint('ethtool -K s0-eth0 gro off')
switch0.cmdPrint('tc qdisc del dev s0-eth0 root')
switch0.cmdPrint('tc qdisc add dev s0-eth0 root handle 10: netem delay 5
0ms')
switch1.cmdPrint('ethtool -K s1-eth0 gro off')
switch1.cmdPrint('tc qdisc del dev s1-eth0 root')
switch1.cmdPrint('tc qdisc add dev s1-eth0 root handle 10: netem delay 5
0ms')
switch2.cmdPrint('ethtool -K s2-eth0 gro off')
switch2.cmdPrint('tc qdisc del dev s2-eth0 root')
switch2.cmdPrint('tc qdisc add dev s2-eth0 root handle 10: netem delay 5
0ms')
switch3.cmdPrint('ethtool -K s3-eth0 gro off')
switch3.cmdPrint('tc qdisc del dev s3-eth0 root')
switch3.cmdPrint('tc qdisc add dev s3-eth0 root handle 10: netem delay 5
0ms')
def cDelay2():
switch0.cmdPrint('ethtool -K s0-eth0 gro off')
switch0.cmdPrint('tc qdisc del dev s0-eth0 root')
switch0.cmdPrint('tc qdisc add dev s0-eth0 root handle 10: netem delay 2
00ms')
switch1.cmdPrint('ethtool -K s1-eth0 gro off')
switch1.cmdPrint('tc qdisc del dev s1-eth0 root')
switch1.cmdPrint('tc qdisc add dev s1-eth0 root handle 10: netem delay 2
00ms')
switch2.cmdPrint('ethtool -K s2-eth0 gro off')
switch2.cmdPrint('tc qdisc del dev s2-eth0 root')
switch2.cmdPrint('tc qdisc add dev s2-eth0 root handle 10: netem delay 2
00ms')
switch3.cmdPrint('ethtool -K s3-eth0 gro off')
switch3.cmdPrint('tc qdisc del dev s3-eth0 root')
switch3.cmdPrint('tc qdisc add dev s3-eth0 root handle 10: netem delay 2
00ms')
# 15 seconds
t1=Timer(15,
t1.start()
# 30 seconds
t2=Timer(30,
t2.start()

later, the delay from switch 1 will change to 50ms


cDelay1)
later, the delay from switch to switch1 will change to 200ms
cDelay2)

#info( "*** Running test\n" )


h3.cmdPrint( 'ping -i 1 -c 45 ' + h0.IP() )
sleep( 1 )
info( "*** stop network\n" )
controller.cmd( 'kill %' + cname )
switch.cmd( 'ovs-vsctl del-br dp0' )
switch.deleteIntfs()
switch1.cmd( 'ovs-vsctl del-br dp1' )
switch1.deleteIntfs()
info( '\n' )
if __name__ == '__main__':
setLogLevel( 'info' )
info( '*** Scratch network demo (kernel datapath)\n' )
Mininet.init()
myNet()

Vous aimerez peut-être aussi