ip: Use full reassembly for fragments in ip6-local
[vpp.git] / src / vnet / ip / ip6_forward.c
index d6ef8c8..7499274 100644 (file)
@@ -55,6 +55,7 @@
 #include <vppinfra/bihash_template.c>
 #endif
 #include <vnet/ip/ip6_forward.h>
+#include <vnet/ipsec/ipsec_tun.h>
 #include <vnet/interface_output.h>
 
 /* Flag used by IOAM code. Classifier sets it pop-hop-by-hop checks it */
@@ -368,8 +369,8 @@ ip6_add_del_interface_address (vlib_main_t * vm,
       ip_interface_address_t *ia;
       vnet_sw_interface_t *sif;
 
-      pool_foreach(sif, vnm->interface_main.sw_interfaces,
-      ({
+      pool_foreach (sif, vnm->interface_main.sw_interfaces)
+       {
           if (im->fib_index_by_sw_if_index[sw_if_index] ==
               im->fib_index_by_sw_if_index[sif->sw_if_index])
             {
@@ -416,7 +417,7 @@ ip6_add_del_interface_address (vlib_main_t * vm,
                      }
                  }));
             }
-      }));
+      }
     }
   /* *INDENT-ON* */
 
@@ -955,7 +956,10 @@ format_ip6_forward_next_trace (u8 * s, va_list * args)
   ip6_forward_next_trace_t *t = va_arg (*args, ip6_forward_next_trace_t *);
   u32 indent = format_get_indent (s);
 
-  s = format (s, "%U%U",
+  s = format (s, "%Ufib:%d adj:%d flow:%d",
+             format_white_space, indent,
+             t->fib_index, t->adj_index, t->flow_hash);
+  s = format (s, "\n%U%U",
              format_white_space, indent,
              format_ip6_header, t->packet_data, sizeof (t->packet_data));
   return s;
@@ -1309,7 +1313,7 @@ ip6_local_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          vlib_prefetch_buffer_data (b[3], LOAD);
        }
 
-      u8 error[2];
+      ip6_error_t error[2];
       error[0] = IP6_ERROR_UNKNOWN_PROTOCOL;
       error[1] = IP6_ERROR_UNKNOWN_PROTOCOL;
 
@@ -2808,24 +2812,6 @@ ip6_lookup_init (vlib_main_t * vm)
 
   ip_lookup_init (&im->lookup_main, /* is_ip6 */ 1);
 
-  if (im->lookup_table_nbuckets == 0)
-    im->lookup_table_nbuckets = IP6_FIB_DEFAULT_HASH_NUM_BUCKETS;
-
-  im->lookup_table_nbuckets = 1 << max_log2 (im->lookup_table_nbuckets);
-
-  if (im->lookup_table_size == 0)
-    im->lookup_table_size = IP6_FIB_DEFAULT_HASH_MEMORY_SIZE;
-
-  clib_bihash_init_24_8 (&(im->ip6_table[IP6_FIB_TABLE_FWDING].ip6_hash),
-                        "ip6 FIB fwding table",
-                        im->lookup_table_nbuckets, im->lookup_table_size);
-  clib_bihash_init_24_8 (&im->ip6_table[IP6_FIB_TABLE_NON_FWDING].ip6_hash,
-                        "ip6 FIB non-fwding table",
-                        im->lookup_table_nbuckets, im->lookup_table_size);
-  clib_bihash_init_40_8 (&im->ip6_mtable.ip6_mhash,
-                        "ip6 mFIB table",
-                        im->lookup_table_nbuckets, im->lookup_table_size);
-
   /* Create FIB with index 0 and table id of 0. */
   fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP6, 0,
                                     FIB_SOURCE_DEFAULT_ROUTE);
@@ -3165,34 +3151,6 @@ VLIB_CLI_COMMAND (set_ip6_classify_command, static) =
 };
 /* *INDENT-ON* */
 
-static clib_error_t *
-ip6_config (vlib_main_t * vm, unformat_input_t * input)
-{
-  ip6_main_t *im = &ip6_main;
-  uword heapsize = 0;
-  u32 tmp;
-  u32 nbuckets = 0;
-
-  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (input, "hash-buckets %d", &tmp))
-       nbuckets = tmp;
-      else if (unformat (input, "heap-size %U",
-                        unformat_memory_size, &heapsize))
-       ;
-      else
-       return clib_error_return (0, "unknown input '%U'",
-                                 format_unformat_error, input);
-    }
-
-  im->lookup_table_nbuckets = nbuckets;
-  im->lookup_table_size = heapsize;
-
-  return 0;
-}
-
-VLIB_EARLY_CONFIG_FUNCTION (ip6_config, "ip6");
-
 /*
  * fd.io coding-style-patch-verification: ON
  *