when use pcap cli to capture pcakets into two files rx01.pcap && rx02.pcap,
the first time:
1)pcap rx trace on max 100 intfc any file rx01.pcap
2)......the process of capture data to buffer......
3)pcap rx trace off
the second time:
4)pcap rx trace on max 100 intfc any file rx02.pcap
5)......the process of capture data to buffer......
6)pcap rx trace off
the pcap_write function bug in this two lines
pm->n_packets_captured = 0;
if (pm->n_packets_captured >= pm->n_packets_to_capture) referring to calling pcap_close()
will result in that the twice pcap cli both writes the packets
into rx01.pcap, but nothing into rx02.pcap. Beside, the rx02.pcap
file will not be created.
solution: separate the pcap_close() out of pcap_write()
Change-Id: Iedeb46f9cf0a4cb12449fd75a4014f95f3bb3fa8
Signed-off-by: Jack Xu <jack.c.xu@ericsson.com>
{
pm->n_packets_to_capture = pm->n_packets_captured;
error = pcap_write (pm);
{
pm->n_packets_to_capture = pm->n_packets_captured;
error = pcap_write (pm);
+ if (pm->file_descriptor >= 0)
+ pcap_close (pm);
if (error)
clib_error_report (error);
else
if (error)
clib_error_report (error);
else
vm->pcap[rx_tx].pcap_main.n_packets_to_capture =
vm->pcap[rx_tx].pcap_main.n_packets_captured;
error = pcap_write (&vm->pcap[rx_tx].pcap_main);
vm->pcap[rx_tx].pcap_main.n_packets_to_capture =
vm->pcap[rx_tx].pcap_main.n_packets_captured;
error = pcap_write (&vm->pcap[rx_tx].pcap_main);
+ if (vm->pcap[rx_tx].pcap_main.file_descriptor >= 0)
+ pcap_close (&vm->pcap[rx_tx].pcap_main);
if (error)
clib_error_report (error);
else
if (error)
clib_error_report (error);
else
im->pcap_main.n_packets_to_capture =
im->pcap_main.n_packets_captured;
error = pcap_write (&im->pcap_main);
im->pcap_main.n_packets_to_capture =
im->pcap_main.n_packets_captured;
error = pcap_write (&im->pcap_main);
+ if (im->pcap_main.file_descriptor >= 0)
+ pcap_close (&im->pcap_main);
if (error)
clib_error_report (error);
else
if (error)
clib_error_report (error);
else
}
if (pif->pcap_file_name != 0)
pcap_write (&pif->pcap_main);
}
if (pif->pcap_file_name != 0)
pcap_write (&pif->pcap_main);
+ if (pif->pcap_main.file_descriptor >= 0
+ && pif->pcap_main.n_packets_captured >=
+ pif->pcap_main.n_packets_to_capture)
+ pcap_close (&pif->pcap_main);
vlib_buffer_free (vm, vlib_frame_vector_args (frame), n_buffers);
if (PREDICT_FALSE (pif->lockp != 0))
vlib_buffer_free (vm, vlib_frame_vector_args (frame), n_buffers);
if (PREDICT_FALSE (pif->lockp != 0))
pm->n_pcap_data_written = 0;
}
pm->n_pcap_data_written = 0;
}
- if (pm->n_packets_captured >= pm->n_packets_to_capture)
- pcap_close (pm);
-
/** Read data from file. */
clib_error_t *pcap_read (pcap_main_t * pm);
/** Read data from file. */
clib_error_t *pcap_read (pcap_main_t * pm);
+/** Close the file created by pcap_write function. */
+clib_error_t *pcap_close (pcap_main_t * pm);
+
/**
* @brief Add packet
*
/**
* @brief Add packet
*