ip6-nd: fix coverity warning
[vpp.git] / src / vnet / ip / ip6_forward.c
index 0c1bc3b..d9c015f 100644 (file)
@@ -50,6 +50,7 @@
 #include <vnet/dpo/load_balance_map.h>
 #include <vnet/dpo/classify_dpo.h>
 #include <vnet/classify/vnet_classify.h>
+#include <vnet/pg/pg.h>
 
 #ifndef CLIB_MARCH_VARIANT
 #include <vppinfra/bihash_template.c>
@@ -307,11 +308,11 @@ ip6_add_del_interface_address (vlib_main_t * vm,
   ip6_address_fib_t ip6_af, *addr_fib = 0;
   const ip6_address_t *ll_addr;
 
-  /* local0 interface doesn't support IP addressing */
-  if (sw_if_index == 0)
+  error = vnet_sw_interface_supports_addressing (vnm, sw_if_index);
+  if (error)
     {
-      return
-       clib_error_create ("local0 interface doesn't support IP addressing");
+      vnm->api_errno = VNET_API_ERROR_UNSUPPORTED;
+      return error;
     }
 
   if (ip6_address_is_link_local_unicast (address))
@@ -353,9 +354,6 @@ ip6_add_del_interface_address (vlib_main_t * vm,
       return (NULL);
     }
 
-  vec_validate (im->fib_index_by_sw_if_index, sw_if_index);
-  vec_validate (im->mfib_index_by_sw_if_index, sw_if_index);
-
   ip6_addr_fib_init (&ip6_af, address,
                     vec_elt (im->fib_index_by_sw_if_index, sw_if_index));
   vec_add1 (addr_fib, ip6_af);
@@ -530,9 +528,6 @@ ip6_sw_interface_admin_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags)
   ip6_address_t *a;
   u32 is_admin_up, fib_index;
 
-  /* Fill in lookup tables with default table (0). */
-  vec_validate (im->fib_index_by_sw_if_index, sw_if_index);
-
   vec_validate_init_empty (im->
                           lookup_main.if_address_pool_index_by_sw_if_index,
                           sw_if_index, ~0);
@@ -694,10 +689,16 @@ ip6_sw_interface_add_del (vnet_main_t * vnm, u32 sw_if_index, u32 is_add)
 {
   ip6_main_t *im = &ip6_main;
 
-  vec_validate (im->fib_index_by_sw_if_index, sw_if_index);
-  vec_validate (im->mfib_index_by_sw_if_index, sw_if_index);
+  vec_validate_init_empty (im->fib_index_by_sw_if_index, sw_if_index, ~0);
+  vec_validate_init_empty (im->mfib_index_by_sw_if_index, sw_if_index, ~0);
 
-  if (!is_add)
+  if (is_add)
+    {
+      /* Fill in lookup tables with default table (0). */
+      im->fib_index_by_sw_if_index[sw_if_index] = 0;
+      im->mfib_index_by_sw_if_index[sw_if_index] = 0;
+    }
+  else
     {
       /* Ensure that IPv6 is disabled */
       ip6_main_t *im6 = &ip6_main;
@@ -1333,9 +1334,9 @@ ip6_local_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          flags[0] = b[0]->flags;
          flags[1] = b[1]->flags;
 
-         u32 oflags[2];
-         oflags[0] = vnet_buffer2 (b[0])->oflags;
-         oflags[1] = vnet_buffer2 (b[1])->oflags;
+         vnet_buffer_oflags_t oflags[2];
+         oflags[0] = vnet_buffer (b[0])->oflags;
+         oflags[1] = vnet_buffer (b[1])->oflags;
 
          u32 l4_offload[2];
          l4_offload[0] = (flags[0] & VNET_BUFFER_F_OFFLOAD) &&
@@ -1524,7 +1525,7 @@ ip6_local_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
 
          u32 flags = b[0]->flags;
 
-         u32 oflags = vnet_buffer2 (b[0])->oflags;
+         vnet_buffer_oflags_t oflags = vnet_buffer (b[0])->oflags;
 
          u32 l4_offload = (flags & VNET_BUFFER_F_OFFLOAD) &&
                           (oflags & (VNET_BUFFER_OFFLOAD_F_TCP_CKSUM |
@@ -1779,8 +1780,8 @@ ip6_rewrite_inline_with_gso (vlib_main_t * vm,
            vlib_prefetch_buffer_header (p2, LOAD);
            vlib_prefetch_buffer_header (p3, LOAD);
 
-           CLIB_PREFETCH (p2->pre_data, 32, STORE);
-           CLIB_PREFETCH (p3->pre_data, 32, STORE);
+           clib_prefetch_store (p2->pre_data);
+           clib_prefetch_store (p3->pre_data);
 
            CLIB_PREFETCH (p2->data, sizeof (ip0[0]), STORE);
            CLIB_PREFETCH (p3->data, sizeof (ip0[0]), STORE);