int current_data_offset = 0;
u32 sw_if_index = ~0;
int pkt_trace = 0;
+ int pcap = 0;
int i;
vnet_classify_table_t *t;
u8 *mask = 0;
{
if (unformat (input, "del"))
is_add = 0;
- else if (unformat (input, "pcap %=", &sw_if_index, 0))
- ;
+ else if (unformat (input, "pcap %=", &pcap, 1))
+ sw_if_index = 0;
else if (unformat (input, "trace"))
pkt_trace = 1;
else if (unformat (input, "%U",
unformat_vnet_sw_interface, vnm, &sw_if_index))
- ;
+ {
+ if (sw_if_index == 0)
+ return clib_error_return (0, "Local interface not supported...");
+ }
else if (unformat (input, "buckets %d", &nbuckets))
;
else if (unformat (input, "mask %U", unformat_classify_mask,
break;
}
- if (sw_if_index == 0)
- return clib_error_return (0, "Local interface not supported...");
-
if (is_add && mask == 0 && table_index == ~0)
return clib_error_return (0, "Mask required");
if (is_add && match == ~0 && table_index == ~0)
return clib_error_return (0, "match count required");
- if (sw_if_index == ~0 && pkt_trace == 0)
+ if (sw_if_index == ~0 && pkt_trace == 0 && pcap == 0)
return clib_error_return (0, "Must specify trace, pcap or interface...");
+ if (pkt_trace && pcap)
+ return clib_error_return
+ (0, "Packet trace and pcap are mutually exclusive...");
+
if (pkt_trace && sw_if_index != ~0)
return clib_error_return (0, "Packet trace filter is per-system");
vnet_classify_register_unformat_acl_next_index_fn (unformat_acl_next_node);
/* Filter set 0 is grounded... */
- pool_get (cm->filter_sets, set);
+ pool_get_zero (cm->filter_sets, set);
set->refcnt = 0x7FFFFFFF;
- vec_validate (set->table_indices, 0);
- set->table_indices[0] = ~0;
/* Initialize the pcap filter set */
vec_validate (cm->filter_set_by_sw_if_index, 0);
- cm->filter_set_by_sw_if_index[0] = ~0;
+ cm->filter_set_by_sw_if_index[0] = 0;
/* Initialize the packet tracer filter set */
vlib_global_main.trace_filter.trace_filter_set_index = ~0;