clib_error_t *
pcap_write (pcap_main_t * pm)
{
- clib_error_t * error = 0;
+ clib_error_t *error = 0;
- if (! (pm->flags & PCAP_MAIN_INIT_DONE))
+ if (!(pm->flags & PCAP_MAIN_INIT_DONE))
{
pcap_file_header_t fh;
int n;
- if (! pm->file_name)
+ if (!pm->file_name)
pm->file_name = "/tmp/vnet.pcap";
- pm->file_descriptor = open (pm->file_name, O_CREAT | O_TRUNC | O_WRONLY, 0664);
+ pm->file_descriptor =
+ open (pm->file_name, O_CREAT | O_TRUNC | O_WRONLY, 0664);
if (pm->file_descriptor < 0)
{
- error = clib_error_return_unix (0, "failed to open `%s'", pm->file_name);
+ error =
+ clib_error_return_unix (0, "failed to open `%s'", pm->file_name);
goto done;
}
pm->flags |= PCAP_MAIN_INIT_DONE;
pm->n_packets_captured = 0;
pm->n_pcap_data_written = 0;
+ clib_spinlock_init (&pm->lock);
/* Write file header. */
- memset (&fh, 0, sizeof (fh));
+ clib_memset (&fh, 0, sizeof (fh));
fh.magic = 0xa1b2c3d4;
fh.major_version = 2;
fh.minor_version = 4;
if (n != sizeof (fh))
{
if (n < 0)
- error = clib_error_return_unix (0, "write file header `%s'", pm->file_name);
+ error =
+ clib_error_return_unix (0, "write file header `%s'",
+ pm->file_name);
else
- error = clib_error_return (0, "short write of file header `%s'", pm->file_name);
+ error =
+ clib_error_return (0, "short write of file header `%s'",
+ pm->file_name);
goto done;
}
}
int n = vec_len (pm->pcap_data) - pm->n_pcap_data_written;
n = write (pm->file_descriptor,
- vec_elt_at_index (pm->pcap_data, pm->n_pcap_data_written), n);
+ vec_elt_at_index (pm->pcap_data, pm->n_pcap_data_written),
+ n);
if (n < 0 && unix_error_is_fatal (errno))
{
error = clib_error_return_unix (0, "write `%s'", pm->file_name);
goto done;
}
- pm->n_pcap_data_written += n;
- }
+ pm->n_pcap_data_written += n;
+ }
if (pm->n_pcap_data_written >= vec_len (pm->pcap_data))
{
}
if (pm->n_packets_captured >= pm->n_packets_to_capture)
- pcap_close(pm);
+ pcap_close (pm);
- done:
+done:
if (error)
{
if (pm->file_descriptor >= 0)
* @return rc - clib_error_t
*
*/
-clib_error_t * pcap_read (pcap_main_t * pm)
+clib_error_t *
+pcap_read (pcap_main_t * pm)
{
- clib_error_t * error = 0;
+ clib_error_t *error = 0;
int fd, need_swap, n;
pcap_file_header_t fh;
pcap_packet_header_t ph;
if (read (fd, &fh, sizeof (fh)) != sizeof (fh))
{
- error = clib_error_return_unix (0, "read file header `%s'", pm->file_name);
+ error =
+ clib_error_return_unix (0, "read file header `%s'", pm->file_name);
goto done;
}
#define _(t,f) fh.f = clib_byte_swap_##t (fh.f);
foreach_pcap_file_header;
#undef _
- }
+ }
if (fh.magic != 0xa1b2c3d4)
{
pm->max_packet_bytes = 0;
while ((n = read (fd, &ph, sizeof (ph))) != 0)
{
- u8 * data;
+ u8 *data;
+ u64 timestamp;
+ u32 timestamp_sec;
+ u32 timestamp_usec;
if (need_swap)
{
}
data = vec_new (u8, ph.n_bytes_in_packet);
- if (read (fd, data, ph.n_packet_bytes_stored_in_file) != ph.n_packet_bytes_stored_in_file)
+ if (read (fd, data, ph.n_packet_bytes_stored_in_file) !=
+ ph.n_packet_bytes_stored_in_file)
{
error = clib_error_return (0, "short read `%s'", pm->file_name);
goto done;
pm->min_packet_bytes = pm->max_packet_bytes = ph.n_bytes_in_packet;
else
{
- pm->min_packet_bytes = clib_min (pm->min_packet_bytes, ph.n_bytes_in_packet);
- pm->max_packet_bytes = clib_max (pm->max_packet_bytes, ph.n_bytes_in_packet);
+ pm->min_packet_bytes =
+ clib_min (pm->min_packet_bytes, ph.n_bytes_in_packet);
+ pm->max_packet_bytes =
+ clib_max (pm->max_packet_bytes, ph.n_bytes_in_packet);
}
+ timestamp_sec = ph.time_in_sec;
+ timestamp_usec = ph.time_in_usec;
+ timestamp = ((u64) timestamp_sec) * 1000000 + (u64) timestamp_usec;
vec_add1 (pm->packets_read, data);
+ vec_add1 (pm->timestamps, timestamp);
}
- done:
+done:
if (fd >= 0)
close (fd);
return error;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */