Test: Change and update to DHCP app and DHCP Relay
app with new test cases and minor refactoring.

Change-Id: Ia6bc4f5f52e2be897b3128eb8d5d371c33acd7b4
diff --git a/src/test/utils/DHCP.py b/src/test/utils/DHCP.py
index c82bc48..1ca73bb 100644
--- a/src/test/utils/DHCP.py
+++ b/src/test/utils/DHCP.py
@@ -20,10 +20,11 @@
 
 class DHCPTest:
 
-    def __init__(self, seed_ip = '192.168.1.1', iface = 'veth0'):
+    def __init__(self, seed_ip = '192.168.1.1', iface = 'veth0',lease_time=600):
         self.seed_ip = seed_ip
         self.seed_mac = self.ipToMac(self.seed_ip)
         self.iface = iface
+	self.lease_time = lease_time
         self.mac_map = {}
         self.mac_inverse_map = {}
 	self.bootpmac = None
@@ -49,6 +50,7 @@
                 mac = self.seed_mac
 
         chmac = self.macToChaddr(mac)
+	#log.info('mac and chmac are %s %s'%(mac, chmac))
 	self.bootpmac = chmac
         L2 = Ether(dst="ff:ff:ff:ff:ff:ff", src=mac)
         L3 = IP(src="0.0.0.0", dst="255.255.255.255")
@@ -56,7 +58,9 @@
         L5 = BOOTP(chaddr=chmac)
         L6 = DHCP(options=[("message-type","discover"),"end"])
         resp = srp1(L2/L3/L4/L5/L6, filter="udp and port 68", timeout=10, iface=self.iface)
+	#log.info('dhcp discover packet is %s'%(L2/L3/L4/L5/L6).show())
         self.dhcpresp = resp
+	#log.info('discover response is %s'%resp.show())
         try:
             srcIP = resp.yiaddr
             serverIP = resp.siaddr
@@ -77,12 +81,13 @@
         L5 = BOOTP(chaddr=chmac, yiaddr=srcIP)
         L6 = DHCP(options=[("message-type","request"), ("server_id",server_id),
                            ("subnet_mask",subnet_mask), ("requested_addr",srcIP), "end"])
-        srp(L2/L3/L4/L5/L6, filter="udp and port 68", timeout=10, iface=self.iface)
+        resp2 = srp1(L2/L3/L4/L5/L6, filter="udp and port 68", timeout=10, iface=self.iface)
+	#log.info('request response is %s'%resp2.show())
         self.mac_map[mac] = (srcIP, serverIP)
         self.mac_inverse_map[srcIP] = (mac, serverIP)
         return (srcIP, serverIP)
 
-    def only_discover(self, mac = None, desired = False, lease_time = False, multiple = False):
+    def only_discover(self, mac = None, desired = False, lease_time = False, lease_value=600, multiple = False):
         '''Send a DHCP discover'''
 
         if mac is None:
@@ -102,15 +107,17 @@
 		L6 = DHCP(options=[("message-type","discover"),("requested_addr",self.seed_ip),"end"])
 
 	elif lease_time:
-		L6 = DHCP(options=[("message-type","discover"),("lease_time",700),"end"])
+		L6 = DHCP(options=[("message-type","discover"),("lease_time",lease_value),"end"])
 
 	else:
 	        L6 = DHCP(options=[("message-type","discover"),"end"])
-
+	#log.info('only discover packet is %s'%(L2/L3/L4/L5/L6).show())
 
         resp = srp1(L2/L3/L4/L5/L6, filter="udp and port 68", timeout=10, iface=self.iface)
+	#log.info('discovery packet is %s'%(L2/L3/L4/L5/L6).show())
 	if resp == None:
                 return (None, None, mac, None)
+	#log.info('only discover response is %s'%resp.show())
 
 	self.dhcpresp = resp
         for x in resp.lastlayer().options:
@@ -159,7 +166,7 @@
 			return (None, None, mac, None)
 
 
-    def only_request(self, cip, mac, cl_reboot = False, lease_time = False, renew_time = False, rebind_time = False, unicast = False):
+    def only_request(self, cip, mac, cl_reboot = False, lease_time = False, lease_value=600, renew_time = False, rebind_time = False, unicast = False):
         '''Send a DHCP offer'''
 
 	subnet_mask = "0.0.0.0"
@@ -194,7 +201,7 @@
 	elif self.send_different_option:
 		if self.send_different_option == 'subnet':
 	       		L6 = DHCP(options=[("message-type","request"),("server_id",server_id),
-        	                   	("subnet_mask",'255.255.252.0'), ("requested_addr",cip), "end"])
+        	                   	("subnet_mask",'255.255.252.252'), ("requested_addr",cip), "end"])
 		elif self.send_different_option == 'router':
 	       		L6 = DHCP(options=[("message-type","request"),("server_id",server_id),
         	                   	("subnet_mask",subnet_mask), ("router",'1.1.1.1'), ("requested_addr",cip), "end"])
@@ -206,14 +213,16 @@
 	       		L6 = DHCP(options=[("message-type","request"),("server_id",server_id),
         	                   	("subnet_mask",subnet_mask), ("name_server",'1.1.1.1'), ("requested_addr",cip), "end"])
 
-	elif self.specific_lease:
+	elif lease_time:
              L6 = DHCP(options=[("message-type","request"), ("server_id",server_id),
-                                ("subnet_mask",subnet_mask), ("requested_addr",cip),("lease_time",self.specific_lease), "end"])
+                                ("subnet_mask",subnet_mask), ("requested_addr",cip),("lease_time",lease_value), "end"])
 	else:
              L6 = DHCP(options=[("message-type","request"), ("server_id",server_id),
                            	("subnet_mask",subnet_mask), ("requested_addr",cip), "end"])
 
 	resp=srp1(L2/L3/L4/L5/L6, filter="udp and port 68", timeout=10, iface=self.iface)
+	#log.info('request packet is %s'%(L2/L3/L4/L5/L6).show())
+	#log.info('response packet is %s'%resp.show())
 	if resp == None:
         	return (None, None)
 
@@ -289,7 +298,8 @@
         L4 = UDP(sport=68, dport=67)
         L5 = BOOTP(chaddr=chmac, ciaddr = ip)
         L6 = DHCP(options=[("message-type","release"), ("server_id", server_ip), "end"])
-        sendp(L2/L3/L4/L5/L6, iface = self.iface)
+        sendp(L2/L3/L4/L5/L6, iface = self.iface, count=2)
+	#log.info('release response is %s'%resp)
         del self.mac_map[mac]
         del self.mac_inverse_map[ip]
         return True
@@ -340,3 +350,4 @@
 
         n -= 1
         return self.incIP(".".join(o), n)
+