DHCP Client Dump

- use types on the DHCP API so that the same data is sent in comfing messages and in dumps
- add the DHCP client dump API
- update VOM to refelct API changes
- rename VOM class dhcp_config* dhcp_client*
- the VOM dhcp_client class maintains the lease data (which it reads on a dump) for clients to read

Change-Id: I2a43463937cbd80c01d45798e74b21288d8b8ead
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
diff --git a/test/test_dhcp.py b/test/test_dhcp.py
index c5b1fa5..39133a3 100644
--- a/test/test_dhcp.py
+++ b/test/test_dhcp.py
@@ -1422,6 +1422,29 @@
                                       mactobinary(self.pg3.remote_mac),
                                       self.pg3.remote_ip4,
                                       is_add=0)
+
+        #
+        # read the DHCP client details from a dump
+        #
+        clients = self.vapi.dhcp_client_dump()
+
+        self.assertEqual(clients[0].client.sw_if_index,
+                         self.pg3.sw_if_index)
+        self.assertEqual(clients[0].lease.sw_if_index,
+                         self.pg3.sw_if_index)
+        self.assertEqual(clients[0].client.hostname.rstrip('\0'),
+                         hostname)
+        self.assertEqual(clients[0].lease.hostname.rstrip('\0'),
+                         hostname)
+        self.assertEqual(clients[0].lease.is_ipv6, 0)
+        # 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
+        self.assertEqual(clients[0].lease.state, 2)
+        self.assertEqual(clients[0].lease.mask_width, 24)
+        self.assertEqual(clients[0].lease.router_address.rstrip('\0'),
+                         self.pg3.remote_ip4n)
+        self.assertEqual(clients[0].lease.host_address.rstrip('\0'),
+                         self.pg3.local_ip4n)
+
         #
         # remove the DHCP config
         #