X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fipfix-export%2Fflow_report_classify.c;h=f004e9a0806fa3e58091ea35ad2611699ffcb0ed;hb=deb6f784edbaddd2e60e0d6ac9927f17c4214ad2;hp=449bf228ce944c7fa6833c82560539f6f6d9fc98;hpb=b7b929931a07fbb27b43d5cd105f366c3e29807e;p=vpp.git diff --git a/src/vnet/ipfix-export/flow_report_classify.c b/src/vnet/ipfix-export/flow_report_classify.c index 449bf228ce9..f004e9a0806 100644 --- a/src/vnet/ipfix-export/flow_report_classify.c +++ b/src/vnet/ipfix-export/flow_report_classify.c @@ -15,6 +15,7 @@ #include #include #include +#include /* Common prefix of tcp and udp headers * containing only source and destination port fields */ @@ -197,8 +198,7 @@ ipfix_classify_send_flows (flow_report_main_t * frm, t = pool_elt_at_index (vcm->tables, table->classify_table_index); - while (clib_atomic_test_and_set (t->writer_lock)) - ; + clib_spinlock_lock (&t->writer_lock); for (i = 0; i < t->nbuckets; i++) { @@ -226,7 +226,7 @@ ipfix_classify_send_flows (flow_report_main_t * frm, u32 copy_len = sizeof (ip4_header_t) + sizeof (udp_header_t) + sizeof (ipfix_message_header_t); - clib_memcpy (b0->data, fr->rewrite, copy_len); + clib_memcpy_fast (b0->data, fr->rewrite, copy_len); b0->current_data = 0; b0->current_length = copy_len; b0->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID; @@ -261,7 +261,7 @@ ipfix_classify_send_flows (flow_report_main_t * frm, #define _(field,mask,item,length) \ if (clib_bitmap_get (fr->fields_to_send, field_index)) \ { \ - clib_memcpy (b0->data + next_offset, &field, \ + clib_memcpy_fast (b0->data + next_offset, &field, \ length); \ next_offset += length; \ } \ @@ -272,8 +272,8 @@ ipfix_classify_send_flows (flow_report_main_t * frm, /* Add packetTotalCount manually */ { u64 packets = clib_host_to_net_u64 (v->hits); - clib_memcpy (b0->data + next_offset, &packets, - sizeof (packets)); + clib_memcpy_fast (b0->data + next_offset, &packets, + sizeof (packets)); next_offset += sizeof (packets); } records_this_buffer++; @@ -385,7 +385,7 @@ flush: bi0 = ~0; } - clib_atomic_release (t->writer_lock); + clib_spinlock_unlock (&t->writer_lock); return f; }