From Clemens Auer:
[obnox/wireshark/wip.git] / capture_opts.h
index ed797e6ea709f6af4466283f1606a89f38177df2..478d41be54c64cc3137e3ece2b6b3c3aeebb753f 100644 (file)
@@ -24,7 +24,7 @@
 
 
 /** @file
- *  
+ *
  *  Capture options (all parameters needed to do the actual capture)
  *
  */
 #ifndef __CAPTURE_OPTS_H__
 #define __CAPTURE_OPTS_H__
 
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>            /* for gid_t */
+#endif
+
+#include "capture_ifinfo.h"
 
 /* Current state of capture engine. XXX - differentiate states */
 typedef enum {
@@ -40,6 +45,34 @@ typedef enum {
     CAPTURE_RUNNING         /**< capture child signalled ok, capture is running now */
 } capture_state;
 
+#ifdef HAVE_PCAP_REMOTE
+/* Type of capture source */
+typedef enum {
+    CAPTURE_IFLOCAL,        /**< Local network interface */
+    CAPTURE_IFREMOTE        /**< Remote network interface */
+} capture_source;
+
+/* Type of RPCAPD Authentication */
+typedef enum {
+    CAPTURE_AUTH_NULL,      /**< No authentication */
+    CAPTURE_AUTH_PWD        /**< User/password authentication */
+} capture_auth;
+
+#ifdef HAVE_PCAP_SETSAMPLING
+/**
+ * Method of packet sampling (dropping some captured packets),
+ * may require additional integer parameter, marked here as N
+ */
+typedef enum {
+    CAPTURE_SAMP_NONE,      /**< No sampling - capture all packets */
+    CAPTURE_SAMP_BY_COUNT,  /**< Counter-based sampling -
+                                 capture 1 packet from every N */
+    CAPTURE_SAMP_BY_TIMER   /**< Timer-based sampling -
+                                 capture no more than 1 packet
+                                 in N milliseconds */
+} capture_sampling;
+#endif
+#endif
 
 /** Capture options coming from user interface */
 typedef struct capture_options_tag {
@@ -48,8 +81,32 @@ typedef struct capture_options_tag {
     gboolean has_cfilter;           /**< TRUE if capture filter specified on command line */
     gchar    *cfilter;              /**< Capture filter string */
     gchar    *iface;                /**< the network interface to capture from */
-
-#ifdef _WIN32
+    gchar    *iface_descr;         /**< A human readable description of iface.
+                                     *< NOTE: capture_opts.c is not able to
+                                     *< set this field because doing so
+                                     *< requires too many dependencies.
+                                     *< Readers of this field should use
+                                     *< get_iface_description() from
+                                     *< "capture_ui_utils.h" to access it. */
+#ifdef HAVE_PCAP_REMOTE
+    capture_source src_type;        /**< Capturing on remote interface */
+    gchar    *remote_host;          /**< Host name or network address
+                                     *< for remote capturing */
+    gchar    *remote_port;          /**< TCP port of remote RPCAP server */
+
+    capture_auth  auth_type;
+    gchar    *auth_username;
+    gchar    *auth_password;        /**< Remote authentication parameters */
+
+    gboolean datatx_udp;            /**< Whether to use UDP for data transfer */
+    gboolean nocap_rpcap;           /**< Whether to capture RPCAP own traffic */
+    gboolean nocap_local;           /**< TODO: Whether to capture local traffic */
+#ifdef HAVE_PCAP_SETSAMPLING
+    capture_sampling sampling_method; /**< PCAP packet sampling method */
+    int sampling_param;             /**< PCAP packet sampling parameter */
+#endif
+#endif
+#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
     int      buffer_size;           /**< the capture buffer size (MB) */
 #endif
     gboolean has_snaplen;           /**< TRUE if maximum capture packet length
@@ -58,8 +115,11 @@ typedef struct capture_options_tag {
     gboolean promisc_mode;          /**< Capture in promiscuous mode */
     int      linktype;              /**< Data link type to use, or -1 for
                                          "use default" */
+    gboolean monitor_mode;          /**< Capture in monitor mode, if available */
     gboolean saving_to_file;        /**< TRUE if capture is writing to a file */
     gchar    *save_file;            /**< the capture file name */
+    gboolean group_read_access;     /**< TRUE is group read permission needs to be set */
+    gboolean use_pcapng;            /**< TRUE if file format is pcapng */
 
     /* GUI related */
     gboolean real_time_mode;        /**< Update list of packets in real time */
@@ -92,17 +152,21 @@ typedef struct capture_options_tag {
 
     /* internally used (don't touch from outside) */
     int fork_child;                 /**< If not -1, in parent, process ID of child */
+    int fork_child_status;          /**< Child exit status */
 #ifdef _WIN32
     int signal_pipe_write_fd;       /**< the pipe to signal the child */
 #endif
     capture_state state;            /**< current state of the capture engine */
     gboolean output_to_pipe;        /**< save_file is a pipe (named or stdout) */
+#ifndef _WIN32
+    uid_t owner;                    /**< owner of the cfile */
+    gid_t group;                    /**< group of the cfile */
+#endif
 } capture_options;
 
-
 /* initialize the capture_options with some reasonable values */
 extern void
-capture_opts_init(capture_options *capture_opts, void *cfile);
+capture_opts_init(capture_options *capture_opts, void *cf);
 
 /* set a command line option value */
 extern int
@@ -112,20 +176,21 @@ capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg,
 extern void
 capture_opts_log(const char *log_domain, GLogLevelFlags log_level, capture_options *capture_opts);
 
-/* list link layer types */
-extern int
-capture_opts_list_link_layer_types(capture_options *capture_opts);
+/* print interface capabilities, including link layer types */
+extern void
+capture_opts_print_if_capabilities(if_capabilities_t *caps,
+                                   gboolean monitor_mode);
 
-/* list interfaces */
-extern int
-capture_opts_list_interfaces(void);
+/* print list of interfaces */
+extern void
+capture_opts_print_interfaces(GList *if_list);
 
 /* trim the snaplen entry */
-extern void 
+extern void
 capture_opts_trim_snaplen(capture_options *capture_opts, int snaplen_min);
 
 /* trim the ring_num_files entry */
-extern void 
+extern void
 capture_opts_trim_ring_num_files(capture_options *capture_opts);
 
 /* trim the interface entry */