- u8 is_ipv6 = t->tunnel_dst.fp_proto == FIB_PROTOCOL_IP6 ? 1 : 0;
- fib_table_t *ft;
-
- rmp = vl_msg_api_alloc (sizeof (*rmp));
- memset (rmp, 0, sizeof (*rmp));
- rmp->_vl_msg_id = ntohs (VL_API_GRE_TUNNEL_DETAILS);
- if (!is_ipv6)
- {
- clib_memcpy (rmp->src_address, &(t->tunnel_src.ip4.as_u8), 4);
- clib_memcpy (rmp->dst_address, &(t->tunnel_dst.fp_addr.ip4.as_u8), 4);
- ft = fib_table_get (t->outer_fib_index, FIB_PROTOCOL_IP4);
- rmp->outer_fib_id = ft->ft_table_id;
- }
- else
- {
- clib_memcpy (rmp->src_address, &(t->tunnel_src.ip6.as_u8), 16);
- clib_memcpy (rmp->dst_address, &(t->tunnel_dst.fp_addr.ip6.as_u8), 16);
- ft = fib_table_get (t->outer_fib_index, FIB_PROTOCOL_IP6);
- rmp->outer_fib_id = ft->ft_table_id;
- }
- rmp->teb = (GRE_TUNNEL_TYPE_TEB == t->type);
- rmp->sw_if_index = htonl (t->sw_if_index);
- rmp->context = context;
- rmp->is_ipv6 = is_ipv6;