summaryrefslogtreecommitdiff
path: root/capture_opts.c
diff options
context:
space:
mode:
Diffstat (limited to 'capture_opts.c')
-rw-r--r--capture_opts.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/capture_opts.c b/capture_opts.c
index 313471f1b9..9d5620c0f2 100644
--- a/capture_opts.c
+++ b/capture_opts.c
@@ -66,6 +66,12 @@ capture_opts_init(capture_options *capture_opts)
capture_opts->default_options.linktype = -1; /* use interface default */
capture_opts->default_options.promisc_mode = TRUE;
capture_opts->default_options.if_type = IF_WIRED;
+#ifdef HAVE_EXTCAP
+ capture_opts->default_options.extcap = NULL;
+ capture_opts->default_options.extcap_fifo = NULL;
+ capture_opts->default_options.extcap_args = NULL;
+ capture_opts->default_options.extcap_pid = (GPid)-1;
+#endif
#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
capture_opts->default_options.buffer_size = DEFAULT_CAPTURE_BUFFER_SIZE;
#endif
@@ -138,6 +144,11 @@ capture_opts_log(const char *log_domain, GLogLevelFlags log_level, capture_optio
g_log(log_domain, log_level, "Snap length[%02d] (%u) : %d", i, interface_opts.has_snaplen, interface_opts.snaplen);
g_log(log_domain, log_level, "Link Type[%02d] : %d", i, interface_opts.linktype);
g_log(log_domain, log_level, "Promiscuous Mode[%02d]: %s", i, interface_opts.promisc_mode?"TRUE":"FALSE");
+#ifdef HAVE_EXTCAP
+ g_log(log_domain, log_level, "Extcap[%02d] : %s", i, interface_opts.extcap ? interface_opts.extcap : "(unspecified)");
+ g_log(log_domain, log_level, "Extcap FIFO[%02d] : %s", i, interface_opts.extcap_fifo ? interface_opts.extcap_fifo : "(unspecified)");
+ g_log(log_domain, log_level, "Extcap PID[%02d] : %d", i, interface_opts.extcap_pid);
+#endif
#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
g_log(log_domain, log_level, "Buffer size[%02d] : %d (MB)", i, interface_opts.buffer_size);
#endif
@@ -174,6 +185,10 @@ capture_opts_log(const char *log_domain, GLogLevelFlags log_level, capture_optio
g_log(log_domain, log_level, "Snap length[df] (%u) : %d", capture_opts->default_options.has_snaplen, capture_opts->default_options.snaplen);
g_log(log_domain, log_level, "Link Type[df] : %d", capture_opts->default_options.linktype);
g_log(log_domain, log_level, "Promiscuous Mode[df]: %s", capture_opts->default_options.promisc_mode?"TRUE":"FALSE");
+#ifdef HAVE_EXTCAP
+ g_log(log_domain, log_level, "Extcap[df] : %s", capture_opts->default_options.extcap ? capture_opts->default_options.extcap : "(unspecified)");
+ g_log(log_domain, log_level, "Extcap FIFO[df] : %s", capture_opts->default_options.extcap_fifo ? capture_opts->default_options.extcap_fifo : "(unspecified)");
+#endif
#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
g_log(log_domain, log_level, "Buffer size[df] : %d (MB)", capture_opts->default_options.buffer_size);
#endif
@@ -591,6 +606,12 @@ capture_opts_add_iface_opt(capture_options *capture_opts, const char *optarg_str
interface_opts.linktype = capture_opts->default_options.linktype;
interface_opts.promisc_mode = capture_opts->default_options.promisc_mode;
interface_opts.if_type = capture_opts->default_options.if_type;
+#ifdef HAVE_EXTCAP
+ interface_opts.extcap = g_strdup(capture_opts->default_options.extcap);
+ interface_opts.extcap_fifo = g_strdup(capture_opts->default_options.extcap_fifo);
+ interface_opts.extcap_args = NULL;
+ interface_opts.extcap_pid = (GPid)-1;
+#endif
#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
interface_opts.buffer_size = capture_opts->default_options.buffer_size;
#endif
@@ -1020,6 +1041,14 @@ capture_opts_del_iface(capture_options *capture_opts, guint if_index)
if (interface_opts.console_display_name != NULL)
g_free(interface_opts.console_display_name);
g_free(interface_opts.cfilter);
+#ifdef HAVE_EXTCAP
+ g_free(interface_opts.extcap);
+ g_free(interface_opts.extcap_fifo);
+ if (interface_opts.extcap_args)
+ g_hash_table_unref(interface_opts.extcap_args);
+ if (interface_opts.extcap_pid > 0)
+ g_spawn_close_pid(interface_opts.extcap_pid);
+#endif
#ifdef HAVE_PCAP_REMOTE
if (interface_opts.src_type == CAPTURE_IFREMOTE) {
g_free(interface_opts.remote_host);
@@ -1061,6 +1090,13 @@ collect_ifaces(capture_options *capture_opts)
interface_opts.has_snaplen = device.has_snaplen;
interface_opts.promisc_mode = device.pmode;
interface_opts.if_type = device.if_info.type;
+#ifdef HAVE_EXTCAP
+ interface_opts.extcap = g_strdup(device.if_info.extcap);
+ interface_opts.extcap_fifo = NULL;
+ interface_opts.extcap_args = device.external_cap_args_settings;
+ interface_opts.extcap_pid = (GPid)-1;
+ g_hash_table_ref(interface_opts.extcap_args);
+#endif
#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
interface_opts.buffer_size = device.buffer;
#endif