X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Funix%2Fpcap.c;h=e91b8792c2aba47b9e84c45b6b67b6efb448e440;hb=f91080c01104a5999fe6c08e699b3426fea62dad;hp=bba225f74ab4a4f71747f4e641ae7f7744d6e909;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/unix/pcap.c b/src/vnet/unix/pcap.c index bba225f74ab..e91b8792c2a 100644 --- a/src/vnet/unix/pcap.c +++ b/src/vnet/unix/pcap.c @@ -88,26 +88,29 @@ pcap_close (pcap_main_t * pm) 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)); @@ -121,9 +124,13 @@ pcap_write (pcap_main_t * pm) 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; } } @@ -133,15 +140,16 @@ pcap_write (pcap_main_t * pm) 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)) { @@ -150,9 +158,9 @@ pcap_write (pcap_main_t * pm) } 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) @@ -167,9 +175,10 @@ pcap_write (pcap_main_t * pm) * @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; @@ -183,7 +192,8 @@ clib_error_t * pcap_read (pcap_main_t * pm) 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; } @@ -194,7 +204,7 @@ clib_error_t * pcap_read (pcap_main_t * pm) #define _(t,f) fh.f = clib_byte_swap_##t (fh.f); foreach_pcap_file_header; #undef _ - } + } if (fh.magic != 0xa1b2c3d4) { @@ -206,7 +216,10 @@ clib_error_t * pcap_read (pcap_main_t * pm) 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) { @@ -216,7 +229,8 @@ clib_error_t * pcap_read (pcap_main_t * pm) } 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; @@ -226,16 +240,30 @@ clib_error_t * pcap_read (pcap_main_t * pm) 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: + */