X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fclassify%2Fvnet_classify.c;h=bb9e52a0db33315833c4db3ff2647517975596c5;hb=196fce2b62c0d215722dd233aa8bf70a43aa0a66;hp=de11a107ef037573795fae1edcf39042aba4b304;hpb=71a70d73f34f7c057dd95dbca39fb8e602087a75;p=vpp.git diff --git a/src/vnet/classify/vnet_classify.c b/src/vnet/classify/vnet_classify.c index de11a107ef0..bb9e52a0db3 100755 --- a/src/vnet/classify/vnet_classify.c +++ b/src/vnet/classify/vnet_classify.c @@ -1697,6 +1697,7 @@ classify_filter_command_fn (vlib_main_t * vm, 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; @@ -1709,13 +1710,16 @@ classify_filter_command_fn (vlib_main_t * vm, { 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, @@ -1728,9 +1732,6 @@ classify_filter_command_fn (vlib_main_t * vm, 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"); @@ -1740,9 +1741,13 @@ classify_filter_command_fn (vlib_main_t * vm, 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"); @@ -2949,13 +2954,11 @@ vnet_classify_init (vlib_main_t * vm) 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;