a = p ? pool_elt_at_index (lm->if_address_pool, p[0]) : 0;
/* Verify given length. */
- if ((a && (address_length != a->address_length)) || (address_length == 0))
+ if ((a && (address_length != a->address_length)) ||
+ (address_length == 0) ||
+ (lm->is_ip6 && address_length > 128) ||
+ (!lm->is_ip6 && address_length > 32))
{
vnm->api_errno = VNET_API_ERROR_ADDRESS_LENGTH_MISMATCH;
return clib_error_create
void
ip_lookup_init (ip_lookup_main_t * lm, u32 is_ip6)
{
- /* ensure that adjacency is cacheline aligned and sized */
- STATIC_ASSERT (STRUCT_OFFSET_OF (ip_adjacency_t, cacheline0) == 0,
- "Cache line marker must be 1st element in struct");
- STATIC_ASSERT (STRUCT_OFFSET_OF (ip_adjacency_t, cacheline1) ==
- CLIB_CACHE_LINE_BYTES,
- "Data in cache line 0 is bigger than cache line size");
-
- /* Preallocate three "special" adjacencies */
- lm->adjacency_heap = adj_pool;
-
if (!lm->fib_result_n_bytes)
lm->fib_result_n_bytes = sizeof (uword);
u8 *
format_ip_lookup_next (u8 * s, va_list * args)
{
- ip_lookup_next_t n = va_arg (*args, ip_lookup_next_t);
+ /* int promotion of ip_lookup_next_t */
+ ip_lookup_next_t n = va_arg (*args, int);
char *t = 0;
switch (n)
u8 *
format_ip_adjacency_packet_data (u8 * s, va_list * args)
{
- vnet_main_t *vnm = va_arg (*args, vnet_main_t *);
u32 adj_index = va_arg (*args, u32);
u8 *packet_data = va_arg (*args, u8 *);
u32 n_packet_data_bytes = va_arg (*args, u32);
switch (adj->lookup_next_index)
{
case IP_LOOKUP_NEXT_REWRITE:
- s = format (s, "%U",
- format_vnet_rewrite_header,
- vnm->vlib_main, &adj->rewrite_header, packet_data,
- n_packet_data_bytes);
+ case IP_LOOKUP_NEXT_MCAST:
+ s =
+ format (s, "%U", format_hex_bytes, packet_data, n_packet_data_bytes);
break;
default:
0, 0},
};
-u32
-fib_table_id_find_fib_index (fib_protocol_t proto, u32 table_id)
-{
- ip4_main_t *im4 = &ip4_main;
- ip6_main_t *im6 = &ip6_main;
- uword *p;
-
- switch (proto)
- {
- case FIB_PROTOCOL_IP4:
- p = hash_get (im4->fib_index_by_table_id, table_id);
- break;
- case FIB_PROTOCOL_IP6:
- p = hash_get (im6->fib_index_by_table_id, table_id);
- break;
- default:
- p = NULL;
- break;
- }
- if (NULL != p)
- {
- return (p[0]);
- }
- return (~0);
-}
-
clib_error_t *
vnet_ip_route_cmd (vlib_main_t * vm,
unformat_input_t * main_input, vlib_cli_command_t * cmd)
unformat_mpls_unicast_label, &rpath.frp_local_label))
{
rpath.frp_weight = 1;
+ rpath.frp_eos = MPLS_NON_EOS;
rpath.frp_proto = FIB_PROTOCOL_MPLS;
rpath.frp_sw_if_index = ~0;
vec_add1 (rpaths, rpath);
}
else
{
- fib_index = fib_table_id_find_fib_index (prefixs[0].fp_proto, table_id);
+ fib_index = fib_table_find (prefixs[0].fp_proto, table_id);
if (~0 == fib_index)
{
/*
* the CLI parsing stored table Ids, swap to FIB indicies
*/
- fi = fib_table_id_find_fib_index (prefixs[i].fp_proto,
- rpaths[i].frp_fib_index);
+ fi = fib_table_find (prefixs[i].fp_proto,
+ rpaths[i].frp_fib_index);
if (~0 == fi)
{
else if (eflags)
{
mfib_table_entry_update (fib_index, &pfx, MFIB_SOURCE_CLI,
- eflags);
+ MFIB_RPF_ID_NONE, eflags);
}
else
{