session: cleanup use of api_client_index
[vpp.git] / src / vnet / ip / ip6.h
index 959d72c..aef2445 100644 (file)
@@ -40,7 +40,6 @@
 #ifndef included_ip_ip6_h
 #define included_ip_ip6_h
 
-#include <vlib/mc.h>
 #include <vlib/buffer.h>
 #include <vnet/ethernet/packet.h>
 #include <vnet/ip/ip6_packet.h>
@@ -50,6 +49,7 @@
 #include <vppinfra/bihash_24_8.h>
 #include <vppinfra/bihash_template.h>
 #include <vnet/util/radix.h>
+#include <vnet/util/throttle.h>
 
 /*
  * Default size of the ip6 fib hash table
@@ -66,6 +66,9 @@ typedef struct
 
 typedef struct
 {
+  /* required for pool_get_aligned. */
+  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+
   /* Table ID (hash key) for this FIB. */
   u32 table_id;
 
@@ -216,8 +219,13 @@ typedef struct ip6_main_t
 
   /* HBH processing enabled? */
   u8 hbh_enabled;
+
+  /** ND throttling */
+  throttle_t nd_throttle;
 } ip6_main_t;
 
+#define ND_THROTTLE_BITS 512
+
 /* Global ip6 main structure. */
 extern ip6_main_t ip6_main;
 
@@ -351,7 +359,7 @@ ip6_address_t *ip6_interface_first_address (ip6_main_t * im, u32 sw_if_index);
 int ip6_address_compare (ip6_address_t * a1, ip6_address_t * a2);
 
 clib_error_t *ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst,
-                                 u32 sw_if_index);
+                                 u32 sw_if_index, u8 refresh);
 
 uword
 ip6_udp_register_listener (vlib_main_t * vm,
@@ -404,7 +412,9 @@ int vnet_ip6_nd_term (vlib_main_t * vm,
                      ethernet_header_t * eth,
                      ip6_header_t * ip, u32 sw_if_index, u16 bd_index);
 
-void send_ip6_na (vlib_main_t * vm, vnet_hw_interface_t * hi);
+void send_ip6_na (vlib_main_t * vm, u32 sw_if_index);
+void send_ip6_na_w_addr (vlib_main_t * vm,
+                        const ip6_address_t * addr, u32 sw_if_index);
 
 u8 *format_ip6_forward_next_trace (u8 * s, va_list * args);
 
@@ -606,10 +616,10 @@ vlib_buffer_push_ip6 (vlib_main_t * vm, vlib_buffer_t * b,
 
   ip6h->hop_limit = 0xff;
   ip6h->protocol = proto;
-  clib_memcpy (ip6h->src_address.as_u8, src->as_u8,
-              sizeof (ip6h->src_address));
-  clib_memcpy (ip6h->dst_address.as_u8, dst->as_u8,
-              sizeof (ip6h->src_address));
+  clib_memcpy_fast (ip6h->src_address.as_u8, src->as_u8,
+                   sizeof (ip6h->src_address));
+  clib_memcpy_fast (ip6h->dst_address.as_u8, dst->as_u8,
+                   sizeof (ip6h->src_address));
   b->flags |= VNET_BUFFER_F_IS_IP6;
 
   return ip6h;