LISP: L2 ARP handling
[vpp.git] / src / vnet / lisp-cp / control.h
index 14f3bae..feb8cfa 100644 (file)
@@ -87,6 +87,12 @@ typedef struct
   miss_packet_type_t type;
 } miss_packet_t;
 
+typedef struct
+{
+  u8 mac[6];
+  u32 ip4;
+} lisp_api_l2_arp_entry_t;
+
 typedef enum
 {
   MR_MODE_DST_ONLY = 0,
@@ -95,7 +101,8 @@ typedef enum
 } map_request_mode_t;
 
 #define foreach_lisp_flag_bit       \
-  _(USE_PETR, "Use Proxy-ETR")
+  _(USE_PETR, "Use Proxy-ETR")                  \
+  _(STATS_ENABLED, "Statistics enabled")
 
 typedef enum lisp_flag_bits
 {
@@ -111,6 +118,12 @@ typedef enum lisp_flags
 #undef _
 } lisp_flags_e;
 
+typedef struct
+{
+  ip_address_t addr;
+  u32 bd;
+} lisp_l2_arp_key_t;
+
 typedef struct
 {
   u32 flags;
@@ -232,6 +245,11 @@ vnet_lisp_cp_get_main ()
   return &lisp_control_main;
 }
 
+void
+get_src_and_dst_eids_from_buffer (lisp_cp_main_t * lcm, vlib_buffer_t * b,
+                                 gid_address_t * src, gid_address_t * dst,
+                                 u16 type);
+
 typedef struct
 {
   u8 is_add;
@@ -267,6 +285,13 @@ typedef struct
   u8 key_id;
 } vnet_lisp_add_del_mapping_args_t;
 
+typedef struct
+{
+  u64 nonce;
+  u8 is_rloc_probe;
+  mapping_t *mappings;
+} map_records_arg_t;
+
 int
 vnet_lisp_map_cache_add_del (vnet_lisp_add_del_mapping_args_t * a,
                             u32 * map_index);
@@ -325,6 +350,11 @@ int vnet_lisp_rloc_probe_enable_disable (u8 is_enable);
 int vnet_lisp_map_register_enable_disable (u8 is_enable);
 u8 vnet_lisp_map_register_state_get (void);
 u8 vnet_lisp_rloc_probe_state_get (void);
+int vnet_lisp_add_del_l2_arp_entry (gid_address_t * key, u8 * mac, u8 is_add);
+u32 *vnet_lisp_l2_arp_bds_get (void);
+lisp_api_l2_arp_entry_t *vnet_lisp_l2_arp_entries_get_by_bd (u32 bd);
+
+map_records_arg_t *parse_map_reply (vlib_buffer_t * b);
 
 always_inline mapping_t *
 lisp_get_petr_mapping (lisp_cp_main_t * lcm)