Example #1
0
 def stop( self ):
     "Stop this link"
     if self.tunnel:
         self.tunnel.terminate()
         self.intf1.delete()
         self.intf2.delete()
     else:
         Link.stop( self )
     self.tunnel = None
Example #2
0
 def __init__( self, node1, node2, **kwargs ):
     """Initialize a RemoteLink
        see Link() for parameters"""
     # Create links on remote node
     self.node1 = node1
     self.node2 = node2
     self.tunnel = None
     kwargs.setdefault( 'params1', {} )
     kwargs.setdefault( 'params2', {} )
     self.cmd = None  # satisfy pylint
     Link.__init__( self, node1, node2, **kwargs )
Example #3
0
 def __init__(self, node1, node2, port1=None, port2=None,
              intfName1=None, intfName2=None,
              addr1=None, addr2=None, params1=None,
              params2=None, **kvargs):
     Link.__init__(self, node1, node2, port1=port1, port2=port2,
                   intfName1=intfName1, intfName2=intfName2,
                   cls1=TCIntf,
                   cls2=TCIntf,
                   addr1=addr1, addr2=addr2,
                   params1=params1,
                   params2=params2)
Example #4
0
def scratchNet( cname='controller', cargs='-v ptcp:' ):
    "Create network from scratch using Open vSwitch."

    info( "*** Creating nodes\n" )
    controller = Node( 'c0', inNamespace=False )
    switch = Node( 's0', inNamespace=False )
    h0 = Node( 'h0' )
    h1 = Node( 'h1' )

    info( "*** Creating links\n" )
    Link( h0, switch )
    Link( h1, switch )

    info( "*** Configuring hosts\n" )
    h0.setIP( '192.168.123.1/24' )
    h1.setIP( '192.168.123.2/24' )
    info( str( h0 ) + '\n' )
    info( str( h1 ) + '\n' )

    info( "*** Starting network using Open vSwitch\n" )
    controller.cmd( cname + ' ' + cargs + '&' )
    switch.cmd( 'ovs-vsctl del-br dp0' )
    switch.cmd( 'ovs-vsctl add-br dp0' )
    for intf in switch.intfs.values():
        print switch.cmd( 'ovs-vsctl add-port dp0 %s' % intf )

    # Note: controller and switch are in root namespace, and we
    # can connect via loopback interface
    switch.cmd( 'ovs-vsctl set-controller dp0 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' )

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

    info( "*** Stopping network\n" )
    controller.cmd( 'kill %' + cname )
    switch.cmd( 'ovs-vsctl del-br dp0' )
    switch.deleteIntfs()
    info( '\n' )
Example #5
0
 def status( self ):
     "Detailed representation of link"
     if self.tunnel:
         if self.tunnel.poll() is not None:
             status = "Tunnel EXITED %s" % self.tunnel.returncode
         else:
             status = "Tunnel Running (%s: %s)" % (
                 self.tunnel.pid, self.cmd )
     else:
         status = "OK"
     result = "%s %s" % ( Link.status( self ), status )
     return result
Example #6
0
 def makeIntfPair( self, intfname1, intfname2, addr1=None, addr2=None,
                   node1=None, node2=None, deleteIntfs=True   ):
     """Create pair of interfaces
         intfname1: name of interface 1
         intfname2: name of interface 2
         (override this method [and possibly delete()]
         to change link type)"""
     node1 = self.node1 if node1 is None else node1
     node2 = self.node2 if node2 is None else node2
     server1 = getattr( node1, 'server', 'localhost' )
     server2 = getattr( node2, 'server', 'localhost' )
     if server1 == server2:
         # Link within same server
         return Link.makeIntfPair( intfname1, intfname2, addr1, addr2,
                                   node1, node2, deleteIntfs=deleteIntfs )
     # Otherwise, make a tunnel
     self.tunnel = self.makeTunnel( node1, node2, intfname1, intfname2,
                                    addr1, addr2 )
     return self.tunnel
Example #7
0
def linkIntfs( node1, node2 ):
    "Create link from node1 to node2 and return intfs"
    link = Link( node1, node2 )
    return link.intf1, link.intf2