static void
send_ip6_fib_details (vpe_api_main_t * am,
unix_shared_memory_queue_t * q,
- u32 table_id, fib_prefix_t * pfx,
+ const fib_table_t * table,
+ const fib_prefix_t * pfx,
fib_route_path_encode_t * api_rpaths, u32 context)
{
vl_api_ip6_fib_details_t *mp;
mp->_vl_msg_id = ntohs (VL_API_IP6_FIB_DETAILS);
mp->context = context;
- mp->table_id = htonl (table_id);
+ mp->table_id = htonl (table->ft_table_id);
mp->address_length = pfx->fp_len;
memcpy (mp->address, &pfx->fp_addr.ip6, sizeof (pfx->fp_addr.ip6));
+ memcpy (mp->table_name, table->ft_desc,
+ clib_min (vec_len (table->ft_desc), sizeof (mp->table_name)));
mp->count = htonl (path_count);
fp = mp->path;
fib_entry_get_prefix (*fib_entry_index, &pfx);
api_rpaths = NULL;
fib_entry_encode (*fib_entry_index, &api_rpaths);
- send_ip6_fib_details (am, q,
- fib_table->ft_table_id,
- &pfx, api_rpaths, mp->context);
+ send_ip6_fib_details (am, q, fib_table, &pfx, api_rpaths, mp->context);
vec_free (api_rpaths);
}
path_flags |= FIB_ROUTE_PATH_UDP_ENCAP;
path.frp_udp_encap_id = next_hop_id;
}
+ if (path.frp_sw_if_index == ~0 && ip46_address_is_zero (&path.frp_addr)
+ && path.frp_fib_index != ~0)
+ {
+ path_flags |= FIB_ROUTE_PATH_DEAG;
+ }
path.frp_flags = path_flags;
u32 fib_index;
int rv;
ip4_main_t *im = &ip4_main;
- stats_main_t *sm = &stats_main;
int vnet_proxy_arp_add_del (ip4_address_t * lo_addr,
ip4_address_t * hi_addr,
u32 fib_index, int is_del);
uword *p;
- dslock (sm, 1 /* release hint */ , 6 /* tag */ );
+ stats_dslock_with_hint (1 /* release hint */ , 6 /* tag */ );
p = hash_get (im->fib_index_by_table_id, ntohl (mp->vrf_id));
fib_index, mp->is_add == 0);
out:
- dsunlock (sm);
+ stats_dsunlock ();
REPLY_MACRO (VL_API_PROXY_ARP_ADD_DEL_REPLY);
}
vnet_interface_main_t *im = &vnm->interface_main;
ip4_main_t *im4 = &ip4_main;
static u32 *sw_if_indices_to_shut;
- stats_main_t *sm = &stats_main;
fib_table_t *fib_table;
ip4_fib_t *fib;
u32 sw_if_index;
int rv = VNET_API_ERROR_NO_SUCH_FIB;
u32 target_fib_id = ntohl (mp->vrf_id);
- dslock (sm, 1 /* release hint */ , 8 /* tag */ );
+ stats_dslock_with_hint (1 /* release hint */ , 8 /* tag */ );
/* *INDENT-OFF* */
pool_foreach (fib_table, im4->fibs,
})); /* pool_foreach (fib) */
/* *INDENT-ON* */
- dsunlock (sm);
+ stats_dsunlock ();
return rv;
}
vnet_main_t *vnm = vnet_get_main ();
vnet_interface_main_t *im = &vnm->interface_main;
ip6_main_t *im6 = &ip6_main;
- stats_main_t *sm = &stats_main;
static u32 *sw_if_indices_to_shut;
fib_table_t *fib_table;
ip6_fib_t *fib;
int rv = VNET_API_ERROR_NO_SUCH_FIB;
u32 target_fib_id = ntohl (mp->vrf_id);
- dslock (sm, 1 /* release hint */ , 9 /* tag */ );
+ stats_dslock_with_hint (1 /* release hint */ , 9 /* tag */ );
/* *INDENT-OFF* */
pool_foreach (fib_table, im6->fibs,
})); /* pool_foreach (fib) */
/* *INDENT-ON* */
- dsunlock (sm);
+ stats_dsunlock ();
return rv;
}