summaryrefslogtreecommitdiffstats
path: root/src/vnet/interface_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/interface_output.c')
-rw-r--r--src/vnet/interface_output.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c
index bf21587ae4d..250d0dbe251 100644
--- a/src/vnet/interface_output.c
+++ b/src/vnet/interface_output.c
@@ -43,6 +43,7 @@
#include <vnet/ip/ip6.h>
#include <vnet/udp/udp_packet.h>
#include <vnet/feature/feature.h>
+#include <vnet/classify/trace_classify.h>
typedef struct
{
@@ -813,13 +814,29 @@ static_always_inline void vnet_interface_pcap_tx_trace
else
sw_if_index = ~0;
+ vnet_main_t *vnm = vnet_get_main ();
n_left_from = frame->n_vectors;
from = vlib_frame_vector_args (frame);
while (n_left_from > 0)
{
+ int classify_filter_result;
u32 bi0 = from[0];
vlib_buffer_t *b0 = vlib_get_buffer (vm, bi0);
+ from++;
+ n_left_from--;
+
+ if (vec_len (vnm->classify_filter_table_indices))
+ {
+ classify_filter_result =
+ vnet_is_packet_traced_inline
+ (b0, vnm->classify_filter_table_indices[0],
+ 0 /* full classify */ );
+ if (classify_filter_result)
+ pcap_add_buffer (&vlib_global_main.pcap[VLIB_TX].pcap_main, vm,
+ bi0, 512);
+ continue;
+ }
if (sw_if_index_from_buffer)
sw_if_index = vnet_buffer (b0)->sw_if_index[VLIB_TX];
@@ -828,8 +845,6 @@ static_always_inline void vnet_interface_pcap_tx_trace
vlib_global_main.pcap[VLIB_TX].pcap_sw_if_index == sw_if_index)
pcap_add_buffer (&vlib_global_main.pcap[VLIB_TX].pcap_main, vm, bi0,
512);
- from++;
- n_left_from--;
}
}