'Create veth link to another node, making two new interfaces.
node1: first node
node2: second node
port1: node1 port number (optional)
port2: node2 port number (optional)
intf: default interface class/constructor
cls1, cls2: optional interface-specific constructors
intfName1: node1 interface name (optional)
intfName2: node2  interface name (optional)
params1: parameters for interface 1
params2: parameters for interface 2'

def __init__(self, node1, node2, port1=None, port2=None, intfName1=None, intfName2=None, addr1=None, addr2=None, intf=Intf, cls1=None, cls2=None, params1=None, params2=None, fast=True):

    if (params1 is None):
        params1 = {}
    if (params2 is None):
        params2 = {}
    if (params2 is params1):
        params2 = dict(params1)
    if (port1 is not None):
        params1['port'] = port1
    if (port2 is not None):
        params2['port'] = port2
    if ('port' not in params1):
        params1['port'] = node1.newPort()
    if ('port' not in params2):
        params2['port'] = node2.newPort()
    if (not intfName1):
        intfName1 = self.intfName(node1, params1['port'])
    if (not intfName2):
        intfName2 = self.intfName(node2, params2['port'])
    self.fast = fast
    if fast:
        params1.setdefault('moveIntfFn', self._ignore)
        params2.setdefault('moveIntfFn', self._ignore)
        self.makeIntfPair(intfName1, intfName2, addr1, addr2, node1, node2, deleteIntfs=False)
    else:
        self.makeIntfPair(intfName1, intfName2, addr1, addr2)
    if (not cls1):
        cls1 = intf
    if (not cls2):
        cls2 = intf
    intf1 = cls1(name=intfName1, node=node1, link=self, mac=addr1, **params1)
    intf2 = cls2(name=intfName2, node=node2, link=self, mac=addr2, **params2)
    (self.intf1, self.intf2) = (intf1, intf2)
