/** ToS bits */
u8 tos;
/** packet timestamp */
- f64 timestamp;
+ u64 timestamp;
/** size of the buffer */
u16 buffer_size;
} flowperpkt_trace_t;
flowperpkt_trace_t *t = va_arg (*args, flowperpkt_trace_t *);
s = format (s,
- "FLOWPERPKT: sw_if_index %d, tos %0x2, timestamp %.6f, size %d",
+ "FLOWPERPKT: sw_if_index %d, tos %0x2, timestamp %lld, size %d",
t->sw_if_index, t->tos, t->timestamp, t->buffer_size);
return s;
}
* @param fm flowperpkt_main_t * flow-per-packet main structure pointer
* @param sw_if_index u32 interface handle
* @param tos u8 ToS bits from the packet
- * @param timestamp f64 timestamp, floating-point seconds since vpp started
+ * @param timestamp u64 timestamp, nanoseconds since 1/1/70
* @param length u16 ip length of the packet
* @param do_flush int 1 = flush all cached records, 0 = construct a record
*/
add_to_flow_record (vlib_main_t * vm,
flowperpkt_main_t * fm,
u32 sw_if_index,
- u8 tos, f64 timestamp, u16 length, int do_flush)
+ u8 tos, u64 timestamp, u16 length, int do_flush)
{
u32 my_cpu_number = vm->cpu_index;
flow_report_main_t *frm = &flow_report_main;
vlib_buffer_t *b0;
u16 offset;
u32 bi0;
+ vlib_buffer_free_list_t *fl;
/* Find or allocate a buffer */
b0 = fm->buffers_per_worker[my_cpu_number];
/* $$$$ drop counter? */
if (vlib_buffer_alloc (vm, &bi0, 1) != 1)
return;
+
+ /* Initialize the buffer */
b0 = fm->buffers_per_worker[my_cpu_number] = vlib_get_buffer (vm, bi0);
+ fl =
+ vlib_buffer_get_free_list (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
+ vlib_buffer_init_for_free_list (b0, fl);
+ VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b0);
offset = 0;
}
else
add_to_flow_record (vm, fm, 0 /* sw_if_index */ ,
0 /* ToS */ ,
- 0.0 /* timestamp */ ,
+ 0ULL /* timestamp */ ,
0 /* length */ ,
1 /* do_flush */ );
}
ip_lookup_main_t *lm = &im->lookup_main;
vnet_feature_config_main_t *cm = &lm->feature_config_mains[VNET_IP_TX_FEAT];
flowperpkt_main_t *fm = &flowperpkt_main;
- f64 now = vlib_time_now (vm);
+ u64 now;
+
+ now = (u64) ((vlib_time_now (vm) - fm->vlib_time_0) * 1e9);
+ now += fm->nanosecond_time_0;
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
udp_header_t * udp;
vlib_main_t * vm = frm->vlib_main;
flow_report_stream_t * stream;
+ vlib_buffer_free_list_t *fl;
ASSERT (buffer_indexp);
b0 = vlib_get_buffer (vm, bi0);
+ /* Initialize the buffer */
+ fl = vlib_buffer_get_free_list (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
+ vlib_buffer_init_for_free_list (b0, fl);
+ VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b0);
+
ASSERT (vec_len (fr->rewrite) < VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES);
clib_memcpy (b0->data, fr->rewrite, vec_len (fr->rewrite));