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/udp/udp_api.c b/src/vnet/udp/udp_api.c
index 43a39b8..d00d74e 100644
--- a/src/vnet/udp/udp_api.c
+++ b/src/vnet/udp/udp_api.c
@@ -86,7 +86,7 @@
 
   mp->udp_encap.table_id =
     htonl (fib_table_get_table_id (ue->ue_fib_index, ue->ue_ip_proto));
-  mp->udp_encap.id = htonl (ue->ue_id);
+  mp->udp_encap.id = htonl (ue - udp_encap_pool);
 
   vl_api_send_msg (reg, (u8 *) mp);
 }
@@ -115,12 +115,12 @@
 {
   vl_api_udp_encap_add_reply_t *rmp;
   ip46_address_t src_ip, dst_ip;
-  u32 fib_index, table_id, ue_id;
+  u32 fib_index, table_id;
   fib_protocol_t fproto;
   ip46_type_t itype;
+  index_t uei;
   int rv = 0;
 
-  ue_id = ntohl (mp->udp_encap.id);
   table_id = ntohl (mp->udp_encap.table_id);
 
   itype = ip_address_decode (&mp->udp_encap.src_ip, &src_ip);
@@ -134,14 +134,20 @@
       goto done;
     }
 
-  udp_encap_add_and_lock (ue_id, fproto, fib_index,
-			  &src_ip, &dst_ip,
-			  ntohs (mp->udp_encap.src_port),
-			  ntohs (mp->udp_encap.dst_port),
-			  UDP_ENCAP_FIXUP_NONE);
+  uei = udp_encap_add_and_lock (fproto, fib_index,
+				&src_ip, &dst_ip,
+				ntohs (mp->udp_encap.src_port),
+				ntohs (mp->udp_encap.dst_port),
+				UDP_ENCAP_FIXUP_NONE);
 
 done:
-  REPLY_MACRO (VL_API_UDP_ENCAP_ADD_REPLY);
+  /* *INDENT-OFF* */
+  REPLY_MACRO2 (VL_API_UDP_ENCAP_ADD_REPLY,
+  ({
+    rmp->id = ntohl (uei);
+  }));
+  /* *INDENT-ON* */
+
 }
 
 static void