#!/usr/bin/python

"Create a network from scratch and use NOX as the controller."

from mininet import init, Controller, Switch, Host, createLink

def scratchNet( cname='controller', cargs='ptcp:'):
   # Create Network
   controller = Node( 'c0', inNamespace=False )
   switch = Node( 's0', inNamespace=False )
   h0 = Node( 'h0' )
   h1 = Node( 'h1' )
   createLink( h0, switch )
   createLink( h1, switch )
   # Configure hosts
   h0.setIP( h0.intfs[ 0 ], '192.168.123.1', '/24' )
   h1.setIP( h1.intfs[ 0 ], '192.168.123.2', '/24' )
   # Start network using kernel datapath
   controller.cmdPrint( cname + ' ' + cargs + '&' )
   switch.cmdPrint( 'dpctl deldp nl:0' )
   switch.cmdPrint( 'dpctl adddp nl:0' )
   for intf in switch.intfs:
      switch.cmdPrint( 'dpctl addif nl:0 ' + intf )
   switch.cmdPrint( 'ofprotocol nl:0 tcp:localhost &')
   # Run test
   h0.cmdPrint( 'ping -c1 ' + h1.IP() )
   # Stop network
   controller.cmdPrint( 'kill %' + cname)
   switch.cmdPrint( 'dpctl deldp nl:0' )
   switch.cmdPrint( 'kill %ofprotocol' )
   switch.stop()
   controller.stop()
   
if __name__ == '__main__':
   init()   
   scratchNet( cname='nox_core', cargs='-i ptcp:' )