Use IP and MAC API types for neighbors

use address_t and mac_address_t for IPv6 and ARP entries
and all other API calls in ip.api aprat from the route ones,
that will follow in a separate commit

Change-Id: I67161737c2184d3f8fc1e79ebd2b55121c5b0191
Signed-off-by: Neale Ranns <nranns@cisco.com>
diff --git a/src/vnet/ethernet/arp.h b/src/vnet/ethernet/arp.h
index 6c89d1e..e99d7a8 100644
--- a/src/vnet/ethernet/arp.h
+++ b/src/vnet/ethernet/arp.h
@@ -19,6 +19,29 @@
 #include <vnet/ethernet/ethernet.h>
 #include <vnet/ethernet/arp_packet.h>
 #include <vnet/ip/ip.h>
+#include <vnet/ip/ip_neighbor.h>
+
+typedef struct
+{
+  u32 sw_if_index;
+  ip4_address_t ip4_address;
+
+  mac_address_t mac;
+
+  ip_neighbor_flags_t flags;
+
+  f64 time_last_updated;
+
+  /**
+   * The index of the adj-fib entry created
+   */
+  fib_node_index_t fib_entry_index;
+} ethernet_arp_ip4_entry_t;
+
+extern u8 *format_ethernet_arp_ip4_entry (u8 * s, va_list * va);
+
+ethernet_arp_ip4_entry_t *ip4_neighbors_pool (void);
+ethernet_arp_ip4_entry_t *ip4_neighbor_entries (u32 sw_if_index);
 
 extern int vnet_proxy_arp_add_del (ip4_address_t * lo_addr,
 				   ip4_address_t * hi_addr,
@@ -28,8 +51,7 @@
 					   u32 sw_if_index,
 					   const
 					   ethernet_arp_ip4_over_ethernet_address_t
-					   * a, int is_static,
-					   int is_no_fib_entry);
+					   * a, ip_neighbor_flags_t flags);
 
 extern int vnet_arp_unset_ip4_over_ethernet (vnet_main_t * vnm,
 					     u32 sw_if_index,
@@ -39,6 +61,38 @@
 
 extern int vnet_proxy_arp_fib_reset (u32 fib_id);
 
+void vnet_register_ip4_arp_resolution_event (vnet_main_t * vnm,
+					     void *address_arg,
+					     uword node_index,
+					     uword type_opaque, uword data);
+
+typedef int (*arp_change_event_cb_t) (u32 pool_index,
+				      const mac_address_t * mac,
+				      u32 sw_if_index,
+				      const ip4_address_t * address);
+
+int vnet_add_del_ip4_arp_change_event (vnet_main_t * vnm,
+				       arp_change_event_cb_t data_callback,
+				       u32 pid,
+				       void *address_arg,
+				       uword node_index,
+				       uword type_opaque,
+				       uword data, int is_add);
+
+void wc_arp_set_publisher_node (uword inode_index, uword event_type);
+
+void ethernet_arp_change_mac (u32 sw_if_index);
+void ethernet_ndp_change_mac (u32 sw_if_index);
+
+void arp_update_adjacency (vnet_main_t * vnm, u32 sw_if_index, u32 ai);
+
+typedef struct
+{
+  u32 sw_if_index;
+  ip4_address_t ip;
+  mac_address_t mac;
+} wc_arp_report_t;
+
 /**
  * call back function when walking the DB of proxy ARPs
  * @return 0 to stop the walk !0 to continue