summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian E. Hopps <chopps@chopps.org>2019-09-27 14:35:32 -0400
committerDamjan Marion <dmarion@me.com>2019-12-17 18:40:14 +0000
commit19871f25394fa9a4bfb55006092cbcc28b446c04 (patch)
tree77b064d89d67b50c998a54a3f0e71adb0f9ecbed
parent0812aea046209dc990ec704258570f46d3fa74c8 (diff)
pg: don't leak open files in packet-generator
Fix pg code to close it's open file descriptors before zero'ing the pcap_main structure for re-use. Ticket: VPP-1780 Type: fix Signed-off-by: Christian E. Hopps <chopps@chopps.org> Change-Id: I32945c6476ae83b8d210ee67ac78db3e8f786f46
-rw-r--r--src/vnet/pg/cli.c3
-rw-r--r--src/vppinfra/pcap_funcs.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/src/vnet/pg/cli.c b/src/vnet/pg/cli.c
index c43ff903e75..f78bb37bf61 100644
--- a/src/vnet/pg/cli.c
+++ b/src/vnet/pg/cli.c
@@ -93,7 +93,10 @@ pg_capture (pg_capture_args_t * a)
pi = pool_elt_at_index (pg->interfaces, a->dev_instance);
vec_free (pi->pcap_file_name);
+ if ((pi->pcap_main.flags & PCAP_MAIN_INIT_DONE))
+ pcap_close (&pi->pcap_main);
clib_memset (&pi->pcap_main, 0, sizeof (pi->pcap_main));
+ pi->pcap_main.file_descriptor = -1;
if (a->is_enabled == 0)
return 0;
diff --git a/src/vppinfra/pcap_funcs.h b/src/vppinfra/pcap_funcs.h
index a3a3072f955..125c3bd2517 100644
--- a/src/vppinfra/pcap_funcs.h
+++ b/src/vppinfra/pcap_funcs.h
@@ -17,6 +17,7 @@
#define included_vppinfra_pcap_funcs_h
/** Write out data to output file. */
+clib_error_t *pcap_close (pcap_main_t * pm);
clib_error_t *pcap_write (pcap_main_t * pm);
/** Read data from file. */