コード例 #1
0
def setInterfaceUp(device,RouterPid,intfList):							#Brings the interfaces up

	#flushBuffer(1,device)

	j = 0
	i = 1
	maxiter = len(intfList)
	while j != maxiter:
	
		if j % 2 == 0:
			
			flushBuffer(1,device)	
			cmd = """sudo ip link set %s netns %s
			sudo ip netns exec %s ip link set %s up""" %(intfList[j],RouterPid[0],RouterPid[0],intfList[j])
			device.sendline(cmd)
			device.expect(['w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
			logToFile.info('		Interface %s of Router1 UP',intfList[j])
			logger.info(device.before,also_console=True)
			j = j+1

		else:
			flushBuffer(1,device)
			cmd = """sudo ip link set %s netns %s
			sudo ip netns exec %s ip link set %s up""" %(intfList[j],RouterPid[i],RouterPid[i],intfList[j])
			device.sendline(cmd)
			device.expect(['w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
			logToFile.info('		Interface %s of Router%d UP',intfList[j],i+1) 
			logger.info(device.before,also_console=True)
			j = j+1
			i = i+1	

	return 
コード例 #2
0
def addLinks(iterator, child, RouterPid, InterfaceList):

    i = iterator
    flushBuffer(1, child)
    intfs = 'eth%d' % i

    InterfaceList.append(intfs)
    child.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=1)
    cmd2 = """ln -s /proc/%s/ns/net /var/run/netns/%s""" % (RouterPid[i],
                                                            RouterPid[i])
    child.sendline(cmd2)
    cmd3 = """sudo ip link add eth%d type veth peer eth%d
	sudo ip link set %s netns %s
	sudo ip netns exec %s ip link set %s up""" % (i, i + 1, intfs, RouterPid[i],
                                               RouterPid[i], intfs)
    child.sendline(cmd3)
    child.expect(['w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=8)
    print child.before
    output = child.before
    status = re.search('Cannot find device', output)
    count = 3

    while count > 0:
        if status:
            addLinks(i, child, RouterPid)
            count = count - 1
        else:
            print "Links added"
            return InterfaceList
            break
        raise RuntimeError("Some error : Unable to add links")

    return InterfaceList
コード例 #3
0
    def executeCmd(self, child, cmds):
        flushBuffer(1, child)
        child.sendcontrol('m')
        child.sendline(cmds)
        flag = child.expect([
            '/w+@.*/#', '\"Result\"\:\"Success\"',
            'Failed to connect to localhost port 8080', 'system not ready',
            'Internal error processing CreateBGPv4Neighbor\:', pexpect.EOF,
            pexpect.TIMEOUT
        ],
                            timeout=8)
        print child.before

        if flag == 0 or flag == 1:
            print "Result=Success"

        elif flag == 2:

            print "ERROR:Failed to connect to localhost port 8080"
            while count > 0:
                self.count = self.count - 1
                self.restartSwitch(child)
                self.execCmd(child, cmds)

            raise RuntimeError('Unable to boot the flexswitch')

        elif flag == 3:
            print "ERROR:System not ready,Daemons still restarting"
            time.sleep(20)
            self.execCmd(child, cmds)

        elif flag == 4:
            print "Configurations not done properly"

        return
コード例 #4
0
def createNodes(iterator, child):

    i = iterator
    flushBuffer(1, child)
    child.sendcontrol('m')
    child.expect(['/#', pexpect.EOF, pexpect.TIMEOUT], timeout=1)
    cmd = """sudo docker run -dt --privileged --log-driver=syslog --cap-add=ALL  --name Router%d -P snapos/flex:flex2""" % (
        i)
    child.sendline(cmd)
    child.expect(['/d+', pexpect.EOF, pexpect.TIMEOUT], timeout=5)
    print child.before
    flushBuffer(1, child)
    child.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=1)
    cmd1 = """sudo docker inspect -f '{{.State.Pid}}' Router%d""" % (i)
    child.sendline(cmd1)
    child.expect(['/d+', pexpect.EOF, pexpect.TIMEOUT], timeout=8)
    print child.before
    output = child.before
    pid = re.search('(\d\d[\d$]+)\s', output)
    count = 3
    while count > 0:
        if pid:
            print "PID assigned(Container created for Router%d)" % (i)
            print "PID = %s" % (pid.group(1))
            return pid.group(1)
            break

        else:
            createNodes(iterator, child)
            count = count - 1
        raise RuntimeError(
            "Some error : Unable to instantiate container:-Please manually check for errors"
        )
コード例 #5
0
def configureIP(RouterInst,Interface,IP_address):
	#This method will configure IP address
		flushBuffer(1,RouterInst)
		RouterInst.sendcontrol('m')
		RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
		config = """curl -H "Content-Type: application/json" -d '{"IpAddr": "%s", "IntfRef": "%s"}' http://localhost:8080/public/v1/config/IPv4Intf""" % (IP_address,Interface)
		Exe = Execute()
		Exe.executeCmd(RouterInst,config)
		return RouterInst
コード例 #6
0
def switchToRouter(child,RouterInst):
		
		flushBuffer(1,child)
		child.sendcontrol('m')
		child.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
		cmd = """sudo docker exec -it %s bash""" %(RouterInst)
		child.sendline(cmd)
		child.expect(['\d+',pexpect.EOF,pexpect.TIMEOUT],timeout=5)
		print child.before
		return child
コード例 #7
0
def checkInterface(RouterInst,Interface):
		flushBuffer(1,RouterInst)
		RouterInst.sendcontrol('m')
		#RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
		RouterInst.sendline("ifconfig")
		RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
		print child.before
		output = child.before
		status = re.search(Interface,output)
		if status = True:
			print "Interface %s of %s is up" %(Interface,RouterInst)
			return
コード例 #8
0
def preliminaryInstalls(child):

		flushBuffer(1,child)
		child.sendcontrol('m')
		child.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
		child.sendline("sudo apt-get update")
		time.sleep(15)
		child.sendline("sudo apt-get install curl -y")
		time.sleep(40)
		child.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=5)
		print child.before
		return child		
def preliminaryInstalls(RouterInst):						#Performs preliminary installations such as curl_installation

	flushBuffer(1,RouterInst)
	RouterInst.sendcontrol('m')
	RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=2)
	RouterInst.sendline("sudo apt-get update")
	time.sleep(15)
	RouterInst.sendline("sudo apt-get install curl -y")
	time.sleep(50)
	RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=2)
	logger.info(RouterInst.before,also_console=True)
	return RouterInst		
コード例 #10
0
def checkBGPRoute(RouterInst):

    var = 'checkBGPRoute'
    flushBuffer(1, RouterInst)
    RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    config = """curl -i -H "Content-Type: application/json" "http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    logger.info(RouterInst.before, also_console=True)
    output = RouterInst.before
    outputCheck(RouterInst, var, output)
    return RouterInst
コード例 #11
0
def checkAllBGPNeighbors(RouterInst):

    var = 'checkAllBGPNeighbors'
    flushBuffer(1, RouterInst)
    RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    config = """curl -H "Accept: application/json" "http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    logger.info(RouterInst.before, also_console=True)
    output = RouterInst.before
    outputCheck(RouterInst, var, output)
    return RouterInst
コード例 #12
0
def docker_kill():
	
	with open('variable.json') as data_file:    
 		data = json.load(data_file)
		
   	Number_of_instances = data["number_of_instances"]
	child = pexpect.spawn("/bin/bash")
	
	for i in range(1,(Number_of_instances+1)):
		flushBuffer(1,child)
		cmd = """sudo docker rm -f Router%d""" %(i)		
		child.sendline(cmd)
		child.expect(['/w+',pexpect.EOF,pexpect.TIMEOUT],timeout=1)
		print child.before
コード例 #13
0
def switchToRouter(device, Router):  #Logins to specific Router

    flushBuffer(1, device)
    device.sendcontrol('m')
    device.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    cmd = """sudo docker exec -it %s bash""" % (Router)
    device.sendline(cmd)
    device.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    logger.info(device.before, also_console=True)
    output = device.before
    search = "Errorresponse from daemon: %s" % (Router)
    if re.search(search, output):
        raise RuntimeError(search)
    return device
コード例 #14
0
def checkIPV4Route(
        RouterInst
):  #Check BGP Neighbors are learnt and populated in IPv4table

    var = 'checkIPV4Route'
    flushBuffer(1, RouterInst)
    RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    config = """curl  -H "Accept: application/json" "http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    logger.info(RouterInst.before)
    output = RouterInst.before
    outputCheck(RouterInst, var, output)
    return RouterInst
コード例 #15
0
def BGPglobal(RouterInst, AS_Num,
              RouterId):  #Performs Global BGP configuration

    var = 'BGPglobal'
    flushBuffer(1, RouterInst)
    RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    config = """curl -X PATCH "Content-Type: application/json" -d '{"ASNum":"%s","RouterId":"%s"}' http://localhost:8080/public/v1/config/BGPGlobal""" % (
        AS_Num, RouterId)
    RouterInst = executeCmd(RouterInst, config)
    RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    logger.info(RouterInst.before, also_console=True)
    output = RouterInst.before
    outputCheck(RouterInst, var, output)
    return RouterInst
def checkInterface(RouterInst,Interface,IPaddress):				#Checks if interfaces are UP

	flushBuffer(1,RouterInst)
	RouterInst.sendcontrol('m')
	RouterInst.sendline("ifconfig")
	RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=1)
	logger.info(RouterInst.before,also_console=True)
	output = RouterInst.before
	ip = "inet addr:%s" %(IPaddress)
	status = re.search(Interface,output)
	con = re.search(ip,output)
	if (status and con):
		return
	else:
		logToFile.info("Interface %s not UP",Interface)
		raise RuntimeError("Some error : Interface is not UP")
コード例 #17
0
def addLinks(device,intfList):									#Adds Links between devices

	flushBuffer(1,device)
	
	i = 0 ; j = 2
	maxiter =  len(intfList)
	while i != maxiter:

		cmd = """sudo ip link add %s type veth peer name %s""" %(intfList[i],intfList[i+1])
		device.sendline(cmd)
		device.expect(['w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=8)
		logger.info(device.before,also_console=True)
		logToFile.info("		link Router1(%s)-----------------------------%s(Router%d)",intfList[i],intfList[i+1],j)
		i = i + 2
		j = j + 1
	return
コード例 #18
0
def bootUpDevices(iterator, child):

    i = iterator
    flushBuffer(1, child)
    child.sendcontrol('m')
    print "STARTING FLEXSWITCH TO PICK UP THE INTERFACES"
    print "##############################"
    print "#######Router%d FS restart######" % (i)
    print "##############################"
    child.expect(['/#', pexpect.EOF, pexpect.TIMEOUT], timeout=8)
    cmd4 = """sudo docker exec Router%d sh -c "/etc/init.d/flexswitch restart" """ % (
        i)
    child.sendline(cmd4)
    time.sleep(10)
    child.expect(['IOError:', pexpect.EOF, pexpect.TIMEOUT], timeout=8)
    print child.before
    return
コード例 #19
0
def createNodes(iterator,device):                                 				#Instantiates a docker container that emulates a network device(say Router)

	i = iterator
	flushBuffer(1,device)
	device.sendcontrol('m')		
	device.expect(['/#',pexpect.EOF,pexpect.TIMEOUT],timeout=1)
	cmd = """sudo docker run -dt --privileged --log-driver=syslog --cap-add=ALL  --name Router%d -P snapos/flex:flex2""" %(i+1)    													#Instantiates the container	
	device.sendline(cmd)
	device.expect(['/d+',pexpect.EOF,pexpect.TIMEOUT],timeout=2)
	logger.info(device.before,also_console=True)
	flushBuffer(1,device)
	device.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=1)
	cmd1 = """sudo docker inspect -f '{{.State.Pid}}' Router%d""" %(i+1)			#Gets PID for the container
	device.sendline(cmd1)
	device.expect(['/d+',pexpect.EOF,pexpect.TIMEOUT],timeout=8)
	logger.info(device.before,also_console=True)
	output = device.before
	pid = re.search('(\d\d[\d$]+)\s',output)						#Searches for the PID value
	return pid
コード例 #20
0
def createBGPV4Neighbor(RouterInst,
                        PeerAS,
                        NeighborAddress,
                        Interface,
                        BfdEnable=False,
                        PeerGroup='',
                        MultiHopTTL=0,
                        LocalAS='',
                        KeepaliveTime=0,
                        AddPathsRx=False,
                        UpdateSource='',
                        RouteReflectorClient=False,
                        MaxPrefixesRestartTimer=0,
                        Description='',
                        MultiHopEnable=False,
                        AuthPassword='',
                        RouteReflectorClusterId=0,
                        AdjRIBOutFilter='',
                        MaxPrefixesDisconnect=False,
                        AddPathsMaxTx=0,
                        AdjRIBInFilter='',
                        MaxPrefixes=0,
                        MaxPrefixesThresholdPct=80,
                        BfdSessionParam='default',
                        NextHopSelf=False,
                        Disabled=False,
                        HoldTime=0,
                        ConnectRetryTime=0):

    var = 'createBGPV4Neighbor'
    flushBuffer(1, RouterInst)
    RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    config = """curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"PeerAS":"%s", "NeighborAddress":"%s","IntfRef":"%s", "IfIndex":0,"RouteReflectorClusterId":0, "MultiHopTTL":0,"ConnectRetryTime":60,"HoldTime":180,"KeepaliveTime":60,"AddPathsMaxTx":0}' 'http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3)
    logger.info(RouterInst.before, also_console=True)
    output = RouterInst.before
    outputCheck(RouterInst, var, output)
    return RouterInst
def ping(RouterInst,IPAddress):							#Performs ping test to verify configuration of IP address on interfaces 

	IP = IPAddress.split('/')
	flushBuffer(1,RouterInst)
	RouterInst.sendcontrol('m')
	RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
	cmd = "ping -c 3 %s" %(IP[0])
	RouterInst.sendline(cmd)
	RouterInst.sendcontrol('m')
	RouterInst.expect(['min/avg/max/mdev',pexpect.EOF,pexpect.TIMEOUT],timeout=3)
	output = RouterInst.before
	logger.info(RouterInst.before,also_console=True)
	
	if re.search("0% packet loss",output):
		logToFile.info("Ping Success: Device Reachable")
	else:
		logToFile.debug("Device Unreachable : Check IP address Configuration")
		raise RuntimeError("Error : Device Unreachable")

	return
	
	
		
コード例 #22
0
def executeCmd(child, cmds):
    flushBuffer(1, child)
    child.sendcontrol('m')
    child.sendline(cmds)
    return child