blob: 1cdd281c2c9f4beffa4a97b5b36e82bbf95fd875 [file] [log] [blame]
timlindbergef8d55d2013-09-27 12:50:13 -07001'''
2Driver for blank dataplane VMs. Created for SDNIP test.
3'''
4
5import time
6import pexpect
7import struct, fcntl, os, sys, signal
8import sys
9import re
10import json
11sys.path.append("../")
12from drivers.common.clidriver import CLI
13
14class DPCliDriver(CLI):
15
16 def __init__(self):
17 super(CLI, self).__init__()
18
19 def connect(self,**connectargs):
20 for key in connectargs:
21 vars(self)[key] = connectargs[key]
22
23
24 self.name = self.options['name']
25 self.handle = super(DPCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
26
27 if self.handle:
28 return self.handle
29 else :
30 main.log.info("NO HANDLE")
31 return main.FALSE
32
33 def create_interfaces(self, net, number, start, destlogin, dest):
34 self.handle.sendline("")
35 self.handle.expect("\$")
36
37 self.handle.sendline("rm /tmp/local_ip.txt")
38 self.handle.expect("\$")
39 self.handle.sendline("touch /tmp/local_ip.txt")
40 self.handle.expect("\$")
41
42 main.log.info("Creating interfaces")
43 k = 0
44 intf = 0
45 while number != 0:
46 k= k + 1
47 if k == 256:
48 k = 1
49 start = start + 1
50 number = number - 1
51 intf = intf + 1
52 ip = net+"."+str(start)+"."+str(k)+".1"
53 self.handle.sendline("sudo ifconfig eth0:"+str(intf)+" "+ip+" netmask 255.255.255.0")
54
55 i = self.handle.expect(["\$","password",pexpect.TIMEOUT,pexpect.EOF], timeout = 120)
56 if i == 0:
57 self.handle.sendline("echo "+str(ip)+"\n >> /tmp/local_ip.txt")
58 self.handle.expect("\$")
59 elif i == 1:
60 main.log.info("Sending sudo password")
61 self.handle.sendline(self.pwd)
62 self.handle.expect("\$")
63 else:
64 main.log.error("INTERFACES NOT CREATED")
65 return main.FALSE
66 self.handle.sendline("scp /tmp/local_ip.txt "+str(destlogin)+"@"+str(destip)+":/tmp/ip_table"+str(net)+".txt")
67 try:
68 self.handle.expect("100%")
69 return main.TRUE
70 except:
71 self.log.warn("FAILURE SENDING IP TABLE TO DESTINATION MACHINE")
72 return main.FALSE
73
74 '''
75 def remove_interfaces(self, number, start):
76 self.handle.sendline("")
77 self.handle.expect("\$")
78
79 main.log.info("Deleting interfaces")
80 while number != 0:
81 number = number - 1
82 intf = intf + 1
83 self.handle.sendline("sudo ifconfig eth0:"+str(intf)+" down")
84
85 i = self.handle.expect(["\$","password",pexpect.TIMEOUT,pexpect.EOF], timeout = 120)
86 if i == 0:
87 main.log.info("Interfaces deleted")
88 return main.TRUE
89 elif i == 1:
90 main.log.info("Sending sudo password")
91 self.handle.sendline(self.pwd)
92 self.handle.expect("DONE")
93 main.log.info("Interfaces deleted")
94 return main.TRUE
95 else:
96 main.log.error("INTERFACES NOT DELETED")
97 return main.FALSE
98 '''
99
100 def pingall_interfaces(self, netsrc, netstrt, netdst):
101 self.handle.sendline("")
102 self.handle.expect("\$")
103
104 main.log.info("Pinging interfaces on the "+str(netdst)+" network from "+str(netsrc)+"."+str(netstrt)+".1.1")
105 self.handle.sendline("sudo fping -S "+str(netsrc)+"."+str(netstrt)+".1.1 -f /tmp/ip_table"+str(netdst)+".txt")
106 while 1:
107 i = self.handle.expect(["reachable","unreachable","\$","password",pexpect.TIMEOUT,"not installed"], timeout=45)
108 if i == 0:
109 result = main.TRUE
110 elif i == 1:
111 main.log.error("An interface was unreachable")
112 result = main.FALSE
113 return result
114 elif i == 2:
115 main.log.info("All interfaces reachable")
116 return result
117 elif i == 3:
118 self.handle.sendline(self.pwd)
119 elif i == 4:
120 main.log.error("Unable to fping")
121 result = main.FALSE
122 return result
123 elif i == 5:
124 main.log.info("fping not installed, installing fping")
125 self.handle.sendline("sudo apt-get install fping")
126 i = self.handle.expect(["password","\$",pexpect.TIMEOUT], timeout = 60)
127 if i == 0:
128 self.handle.sendline(self.pwd)
129 self.handle.expect("\$", timeout = 30)
130 main.log.info("fping installed")
131 self.handle.sendline("sudo fping -S "+str(netsrc)+"."+str(netstrt)+".1.1 -f /tmp/ip_table"+str(netdst)+".txt")
132 elif i == 1:
133 main.log.info("fping installed")
134 self.handle.sendline("sudo fping -S "+str(netsrc)+"."+str(netstrt)+".1.1 -f /tmp/ip_table"+str(netdst)+".txt")
135 elif i == 2:
136 main.log.error("Could not install fping")
137 result = main.FALSE
138 return result
139
140 def disconnect(self):
141 response = ''
142 try:
143 self.handle.sendline("exit")
144 self.handle.expect("closed")
145 except:
146 main.log.error("Connection failed to the host")
147 response = main.FALSE
148 return response
149