Statistics
| Branch: | Tag: | Revision:

mininet / examples / scratchnetuser.py @ 47e26cce

History | View | Annotate | Download (2.15 KB)

1 98332cb6 Bob Lantz
#!/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 696a619d Bob Lantz
but it exposes the configuration details and allows customization.
7 98332cb6 Bob Lantz

8
This version uses the user datapath.
9
"""
10
11 dc630c54 Bob Lantz
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 98332cb6 Bob Lantz
16 47e26cce Bob Lantz
def scratchNetUser( cname='controller', cargs='ptcp:' ):
17 dc630c54 Bob Lantz
    # 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 47e26cce Bob Lantz
    controller.setIP( controller.intfs[ 0 ], '10.0.123.1', 24 )
34
    switch.setIP( switch.intfs[ 0 ], '10.0.123.2', 24 )
35 dc630c54 Bob Lantz
    
36
    info( '*** Configuring hosts\n' )
37 47e26cce Bob Lantz
    h0.setIP( h0.intfs[ 0 ], '192.168.123.1', 24 )
38
    h1.setIP( h1.intfs[ 0 ], '192.168.123.2', 24 )
39 dc630c54 Bob Lantz
    
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 47e26cce Bob Lantz
    intfs = [ switch.intfs[ port ] for port in ( 1, 2 ) ]
48 dc630c54 Bob Lantz
    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 47e26cce Bob Lantz
    switch.deleteIntfs()
59
    info( '\n' )
60
        
61 98332cb6 Bob Lantz
if __name__ == '__main__':
62 47e26cce Bob Lantz
    lg.setLogLevel( 'info' )
63 dc630c54 Bob Lantz
    info( '*** Scratch network demo (user datapath)\n' )
64
    init()   
65
    scratchNetUser()