Use IP and MAC API types for neighbors
[vpp.git] / src / vnet / ethernet / arp.h
index 6c89d1e..e99d7a8 100644 (file)
 #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 @@ extern int vnet_arp_set_ip4_over_ethernet (vnet_main_t * vnm,
                                           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_arp_unset_ip4_over_ethernet (vnet_main_t * vnm,
 
 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