UDP-Encap: name counters for the stats segment

change the ADD api so that is returns the 'ID' that can be used
by the client to read the stats from the stats segment and to
delete the object. Previously a similar value used required
to be chosen by the client, now VPP allocates one (like it
does e.g. for interfaces)

Change-Id: I563cf6092276eb990c52d5457c86e72546bcf69e
Signed-off-by: Neale Ranns <nranns@cisco.com>
diff --git a/src/vnet/bier/bier_fmask.c b/src/vnet/bier/bier_fmask.c
index cb61681..3370d5a 100644
--- a/src/vnet/bier/bier_fmask.c
+++ b/src/vnet/bier/bier_fmask.c
@@ -181,7 +181,11 @@
     btid = bier_table_get_id(bfm->bfm_id->bfmi_bti);
     bier_fmask_bits_init(&bfm->bfm_bits, btid->bti_hdr_len);
 
-    if (ip46_address_is_zero(&(bfm->bfm_id->bfmi_nh)))
+    if (rpath->frp_flags & FIB_ROUTE_PATH_UDP_ENCAP)
+    {
+        bfm->bfm_id->bfmi_nh_type = BIER_NH_UDP;
+    }
+    else if (ip46_address_is_zero(&(bfm->bfm_id->bfmi_nh)))
     {
         bfm->bfm_flags |= BIER_FMASK_FLAG_DISP;
     }
diff --git a/src/vnet/bier/bier_fmask_db.h b/src/vnet/bier/bier_fmask_db.h
index 36e555f..cf78bda 100644
--- a/src/vnet/bier/bier_fmask_db.h
+++ b/src/vnet/bier/bier_fmask_db.h
@@ -80,7 +80,7 @@
     bier_hdr_type_t bfmi_hdr_type;
 
     /**
-     * Union discriminatrr
+     * Union discriminator
      */
     bier_nh_type_t bfmi_nh_type;
 } __attribute__((packed)) bier_fmask_id_t;
diff --git a/src/vnet/bier/bier_output.c b/src/vnet/bier/bier_output.c
index 16c1d8e..e2cf7d6 100644
--- a/src/vnet/bier/bier_output.c
+++ b/src/vnet/bier/bier_output.c
@@ -58,6 +58,7 @@
 {
     u32 next_index;
     index_t bfm_index;
+    mpls_label_t bfm_label;
 } bier_output_trace_t;
 
 static uword
@@ -163,6 +164,7 @@
                 tr = vlib_add_trace (vm, node, b0, sizeof (*tr));
                 tr->next_index = next0;
                 tr->bfm_index = bfmi0;
+                tr->bfm_label = bfm0->bfm_label;
             }
 
             vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
@@ -186,8 +188,8 @@
     CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
     bier_output_trace_t * t = va_arg (*args, bier_output_trace_t *);
 
-    s = format (s, " next [%d], BFM index %d",
-                t->next_index, t->bfm_index);
+    s = format (s, " next [%d], BFM index %d label:%x",
+                t->next_index, t->bfm_index, t->bfm_label);
     return s;
 }