vec_foreach (n, ns)
{
send_ip_neighbor_details
- (sw_if_index, mp->is_ipv6,
+ (n->key.sw_if_index, mp->is_ipv6,
((n->flags & IP6_NEIGHBOR_FLAG_STATIC) ? 1 : 0),
(u8 *) n->link_layer_address,
(u8 *) & (n->key.ip6_address.as_u8),
/* *INDENT-OFF* */
vec_foreach (n, ns)
{
- send_ip_neighbor_details (sw_if_index, mp->is_ipv6,
+ send_ip_neighbor_details (n->sw_if_index, mp->is_ipv6,
((n->flags & ETHERNET_ARP_IP4_ENTRY_FLAG_STATIC) ? 1 : 0),
(u8*) n->ethernet_address,
(u8*) & (n->ip4_address.as_u8),
ip4_main_t *im = &ip4_main;
fib_table_t *fib_table;
fib_node_index_t *lfeip;
- fib_prefix_t pfx;
+ const fib_prefix_t *pfx;
u32 fib_index;
fib_route_path_encode_t *api_rpaths;
vl_api_ip_fib_dump_walk_ctx_t ctx = {
vec_foreach (lfeip, ctx.feis)
{
- fib_entry_get_prefix (*lfeip, &pfx);
+ pfx = fib_entry_get_prefix (*lfeip);
fib_index = fib_entry_get_fib_index (*lfeip);
- fib_table = fib_table_get (fib_index, pfx.fp_proto);
+ fib_table = fib_table_get (fib_index, pfx->fp_proto);
api_rpaths = NULL;
fib_entry_encode (*lfeip, &api_rpaths);
- send_ip_fib_details (am, reg, fib_table, &pfx, api_rpaths, mp->context);
+ send_ip_fib_details (am, reg, fib_table, pfx, api_rpaths, mp->context);
vec_free (api_rpaths);
}
.entries = NULL,
};
fib_route_path_encode_t *api_rpaths;
- fib_prefix_t pfx;
+ const fib_prefix_t *pfx;
BV (clib_bihash_foreach_key_value_pair)
((BVT (clib_bihash) *) & im6->ip6_table[IP6_FIB_TABLE_NON_FWDING].
vec_foreach (fib_entry_index, ctx.entries)
{
- fib_entry_get_prefix (*fib_entry_index, &pfx);
+ pfx = fib_entry_get_prefix (*fib_entry_index);
api_rpaths = NULL;
fib_entry_encode (*fib_entry_index, &api_rpaths);
- send_ip6_fib_details (am, reg, fib_table, &pfx, api_rpaths, mp->context);
+ send_ip6_fib_details (am, reg, fib_table, pfx, api_rpaths, mp->context);
vec_free (api_rpaths);
}
path.frp_flags = path_flags;
- if (is_multipath)
- {
- stats_dslock_with_hint (1 /* release hint */ , 10 /* tag */ );
-
-
- vec_add1 (paths, path);
-
- if (is_add)
- fib_table_entry_path_add2 (fib_index,
- prefix,
- FIB_SOURCE_API, entry_flags, paths);
- else
- fib_table_entry_path_remove2 (fib_index,
- prefix, FIB_SOURCE_API, paths);
-
- vec_free (paths);
- stats_dsunlock ();
- return 0;
- }
-
stats_dslock_with_hint (1 /* release hint */ , 2 /* tag */ );
if (is_drop || is_local || is_classify || is_unreach || is_prohibit)
fib_table_entry_special_remove (fib_index, prefix, FIB_SOURCE_API);
}
}
+ else if (is_multipath)
+ {
+ vec_add1 (paths, path);
+
+ if (is_add)
+ fib_table_entry_path_add2 (fib_index,
+ prefix,
+ FIB_SOURCE_API, entry_flags, paths);
+ else
+ fib_table_entry_path_remove2 (fib_index,
+ prefix, FIB_SOURCE_API, paths);
+
+ vec_free (paths);
+ }
else
{
if (is_add)
.indices = NULL,
};
fib_node_index_t *feip;
- fib_prefix_t pfx;
+ const fib_prefix_t *pfx;
vl_api_registration_t *reg;
reg = vl_api_client_index_to_registration (mp->client_index);
vec_foreach (feip, ctx.indices)
{
- fib_entry_get_prefix (*feip, &pfx);
+ pfx = fib_entry_get_prefix (*feip);
send_ip6nd_proxy_details (reg,
mp->context,
- &pfx.fp_addr,
+ &pfx->fp_addr,
fib_entry_get_resolving_interface (*feip));
}
vl_api_send_msg (vl_reg, (u8 *) event);
}
}));
- /* *INDENT-ON* */
+ /* *INDENT-ON* */
+ vec_free (ra_events[i].prefixes);
}
}
vlib_process_put_event_data (vm, event_data);