srv6-ad: fixing coverity issues 49/10349/2
authorFrancois Clad <fclad@cisco.com>
Wed, 31 Jan 2018 13:46:45 +0000 (14:46 +0100)
committerNeale Ranns <nranns@cisco.com>
Thu, 1 Feb 2018 11:03:51 +0000 (11:03 +0000)
Change-Id: Ica6d8dd773bb3b478f1c7e40d59dfbdd4b588b85
Signed-off-by: Francois Clad <fclad@cisco.com>
src/plugins/srv6-ad/node.c

index 73957f5..4bc110d 100644 (file)
@@ -27,6 +27,7 @@ typedef struct
 
 typedef struct
 {
+  u8 error;
   ip6_address_t src, dst;
 } srv6_ad_rewrite_trace_t;
 
@@ -47,6 +48,11 @@ format_srv6_ad_rewrite_trace (u8 * s, va_list * args)
   CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
   srv6_ad_rewrite_trace_t *t = va_arg (*args, srv6_ad_rewrite_trace_t *);
 
+  if (PREDICT_FALSE (t->error != 0))
+    {
+      return format (s, "SRv6-AD-rewrite: cache is empty");
+    }
+
   return format (s, "SRv6-AD-rewrite: src %U dst %U",
                 format_ip6_address, &t->src, format_ip6_address, &t->dst);
 }
@@ -352,10 +358,19 @@ srv6_ad4_rewrite_fn (vlib_main_t * vm,
            {
              srv6_ad_rewrite_trace_t *tr =
                vlib_add_trace (vm, node, b0, sizeof *tr);
-             clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
-                          sizeof tr->src.as_u8);
-             clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
-                          sizeof tr->dst.as_u8);
+             tr->error = 0;
+
+             if (next0 == SRV6_AD_REWRITE_NEXT_ERROR)
+               {
+                 tr->error = 1;
+               }
+             else
+               {
+                 clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
+                              sizeof tr->src.as_u8);
+                 clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
+                              sizeof tr->dst.as_u8);
+               }
            }
 
          vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next,
@@ -472,10 +487,19 @@ srv6_ad6_rewrite_fn (vlib_main_t * vm,
            {
              srv6_ad_rewrite_trace_t *tr =
                vlib_add_trace (vm, node, b0, sizeof *tr);
-             clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
-                          sizeof tr->src.as_u8);
-             clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
-                          sizeof tr->dst.as_u8);
+             tr->error = 0;
+
+             if (next0 == SRV6_AD_REWRITE_NEXT_ERROR)
+               {
+                 tr->error = 1;
+               }
+             else
+               {
+                 clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
+                              sizeof tr->src.as_u8);
+                 clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
+                              sizeof tr->dst.as_u8);
+               }
            }
 
          vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next,