int
svs_table_delete (fib_protocol_t fproto, u32 table_id)
{
- u32 fib_index;
+ u32 fib_index, ii;
fib_index = fib_table_find (fproto, table_id);
+ vec_foreach_index (ii, svs_itf_db[fproto])
+ {
+ if (svs_itf_db[fproto][ii] == fib_index)
+ return VNET_API_ERROR_INSTANCE_IN_USE;
+ }
+
if (~0 == fib_index)
return VNET_API_ERROR_NO_SUCH_FIB;
int
svs_disable (fib_protocol_t fproto, u32 table_id, u32 sw_if_index)
{
+ fib_prefix_t pfx = {
+ .fp_proto = fproto,
+ };
u32 fib_index;
fib_index = fib_table_find (fproto, table_id);
if (~0 == fib_index)
return VNET_API_ERROR_NO_SUCH_FIB;
- if (sw_if_index <= vec_len (svs_itf_db[fproto]))
+ if (sw_if_index >= vec_len (svs_itf_db[fproto]))
return VNET_API_ERROR_INVALID_SW_IF_INDEX;
svs_itf_db[fproto][sw_if_index] = ~0;
"svs-ip4" :
"svs-ip6"), sw_if_index, 0, NULL, 0);
+ fib_table_entry_special_remove (fib_index, &pfx, FIB_SOURCE_PLUGIN_LOW);
+
return (0);
}
ip6_header_t *ip0;
ip0 = vlib_buffer_get_current (b0);
- lbi0 = ip6_fib_table_fwding_lookup (&ip6_main,
- svs_itf_db[fproto]
+ lbi0 = ip6_fib_table_fwding_lookup (svs_itf_db[fproto]
[sw_if_index0],
&ip0->src_address);
}