+ lisp_fwd_path_t *path;
+ vl_api_gpe_fwd_entry_path_details_t *rmp = NULL;
+ lisp_gpe_main_t *lgm = &lisp_gpe_main;
+ vl_api_registration_t *reg;
+ lisp_gpe_fwd_entry_t *lfe;
+
+ gpe_fwd_entry_path_dump_t_net_to_host (mp);
+
+ reg = vl_api_client_index_to_registration (mp->client_index);
+ if (!reg)
+ return;
+
+ if (pool_is_free_index (lgm->lisp_fwd_entry_pool, mp->fwd_entry_index))
+ return;
+
+ lfe = pool_elt_at_index (lgm->lisp_fwd_entry_pool, mp->fwd_entry_index);
+
+ if (LISP_GPE_FWD_ENTRY_TYPE_NEGATIVE == lfe->type)
+ return;
+
+ vec_foreach (path, lfe->paths)
+ {
+ rmp = vl_msg_api_alloc (sizeof (*rmp));
+ clib_memset (rmp, 0, sizeof (*rmp));
+ const lisp_gpe_tunnel_t *lgt;
+
+ rmp->_vl_msg_id =
+ clib_host_to_net_u16 (VL_API_GPE_FWD_ENTRY_PATH_DETAILS);
+
+ const lisp_gpe_adjacency_t *ladj =
+ lisp_gpe_adjacency_get (path->lisp_adj);
+ lisp_api_set_locator (&rmp->rmt_loc, &ladj->remote_rloc, path->weight);
+ lgt = lisp_gpe_tunnel_get (ladj->tunnel_index);
+ lisp_api_set_locator (&rmp->lcl_loc, &lgt->key->lcl, path->weight);
+
+ rmp->context = mp->context;
+ vl_api_send_msg (reg, (u8 *) rmp);
+ }
+}
+
+static void
+gpe_fwd_entries_copy (vl_api_gpe_fwd_entry_t * dst,
+ lisp_api_gpe_fwd_entry_t * src)
+{
+ lisp_api_gpe_fwd_entry_t *e;
+ u32 i = 0;
+
+ vec_foreach (e, src)
+ {
+ clib_memset (&dst[i], 0, sizeof (*dst));
+ dst[i].dp_table = e->dp_table;
+ dst[i].fwd_entry_index = e->fwd_entry_index;
+ dst[i].vni = e->vni;
+ dst[i].action = e->action;
+ switch (fid_addr_type (&e->leid))
+ {
+ case FID_ADDR_IP_PREF:
+ dst[i].leid.type = EID_TYPE_API_PREFIX;
+ dst[i].reid.type = EID_TYPE_API_PREFIX;
+ ip_prefix_encode2 (&fid_addr_ippref (&e->leid),
+ &dst[i].leid.address.prefix);
+ ip_prefix_encode2 (&fid_addr_ippref (&e->reid),
+ &dst[i].reid.address.prefix);
+ break;
+ case FID_ADDR_MAC:
+ mac_address_encode ((mac_address_t *) fid_addr_mac (&e->leid),
+ dst[i].leid.address.mac);
+ mac_address_encode ((mac_address_t *) fid_addr_mac (&e->reid),
+ dst[i].reid.address.mac);
+ dst[i].leid.type = EID_TYPE_API_MAC;
+ dst[i].reid.type = EID_TYPE_API_MAC;
+ break;
+ default:
+ clib_warning ("unknown fid type %d!", fid_addr_type (&e->leid));
+ break;
+ }
+ i++;
+ }
+}
+
+static void
+gpe_fwd_entries_get_t_net_to_host (vl_api_gpe_fwd_entries_get_t * mp)
+{
+ mp->vni = clib_net_to_host_u32 (mp->vni);
+}
+
+static void
+gpe_entry_t_host_to_net (vl_api_gpe_fwd_entry_t * e)
+{
+ e->fwd_entry_index = clib_host_to_net_u32 (e->fwd_entry_index);
+ e->dp_table = clib_host_to_net_u32 (e->dp_table);
+ e->vni = clib_host_to_net_u32 (e->vni);
+}
+
+static void
+ gpe_fwd_entries_get_reply_t_host_to_net
+ (vl_api_gpe_fwd_entries_get_reply_t * mp)
+{
+ u32 i;
+ vl_api_gpe_fwd_entry_t *e;
+
+ for (i = 0; i < mp->count; i++)