Statistics
| Branch: | Tag: | Revision:

mininet / examples / scratchnetuser.py @ 47e26cce

History | View | Annotate | Download (2.15 KB)

1
#!/usr/bin/python
2

    
3
"""
4
Build a simple network from scratch, using mininet primitives.
5
This is more complicated than using the higher-level classes,
6
but it exposes the configuration details and allows customization.
7

8
This version uses the user datapath.
9
"""
10

    
11
from mininet.net import init
12
from mininet.node import Node
13
from mininet.util import createLink
14
from mininet.log import lg, info
15

    
16
def scratchNetUser( cname='controller', cargs='ptcp:' ):
17
    # Create Network
18
    # It's not strictly necessary for the controller and switches
19
    # to be in separate namespaces. For performance, they probably
20
    # should be in the root namespace. However, it's interesting to
21
    # see how they could work even if they are in separate namespaces.
22

    
23
    info( '*** Creating Network\n' )
24
    controller = Node( 'c0' )
25
    switch = Node( 's0')
26
    h0 = Node( 'h0' )
27
    h1 = Node( 'h1' )
28
    createLink( controller, 0, switch, 0 )
29
    createLink( h0, 0, switch, 1 )
30
    createLink( h1, 0, switch, 2 )
31

    
32
    info( '*** Configuring control network\n' )
33
    controller.setIP( controller.intfs[ 0 ], '10.0.123.1', 24 )
34
    switch.setIP( switch.intfs[ 0 ], '10.0.123.2', 24 )
35
    
36
    info( '*** Configuring hosts\n' )
37
    h0.setIP( h0.intfs[ 0 ], '192.168.123.1', 24 )
38
    h1.setIP( h1.intfs[ 0 ], '192.168.123.2', 24 )
39
    
40
    info( '*** Network state:\n' )
41
    for node in controller, switch, h0, h1:
42
        info( str( node ) + '\n' )
43
        
44
    info( '*** Starting controller and user datapath\n' )
45
    controller.cmd( cname + ' ' + cargs + '&' )
46
    switch.cmd( 'ifconfig lo 127.0.0.1' )
47
    intfs = [ switch.intfs[ port ] for port in ( 1, 2 ) ]
48
    switch.cmd( 'ofdatapath -i ' + ','.join( intfs ) + ' ptcp: &' )
49
    switch.cmd( 'ofprotocol tcp:' + controller.IP() + ' tcp:localhost &' )
50

    
51
    info( '*** Running test\n' )
52
    h0.cmdPrint( 'ping -c1 ' + h1.IP() )
53

    
54
    info( '*** Stopping network\n' )
55
    controller.cmd( 'kill %' + cname )
56
    switch.cmd( 'kill %ofdatapath' )
57
    switch.cmd( 'kill %ofprotocol' )
58
    switch.deleteIntfs()
59
    info( '\n' )
60
        
61
if __name__ == '__main__':
62
    lg.setLogLevel( 'info' )
63
    info( '*** Scratch network demo (user datapath)\n' )
64
    init()   
65
    scratchNetUser()