Statistics
| Branch: | Tag: | Revision:

mininet / examples / scratchnetuser.py @ dc630c54

History | View | Annotate | Download (2.11 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 696a619d 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
    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 98332cb6 Bob Lantz
   
59
if __name__ == '__main__':
60 dc630c54 Bob Lantz
    info( '*** Scratch network demo (user datapath)\n' )
61
    init()   
62
    lg.setLogLevel( 'info' )
63
    scratchNetUser()