nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* capture_opts.h |
2 | * Capture options (all parameters needed to do the actual capture) |
||
3 | * |
||
4 | * Wireshark - Network traffic analyzer |
||
5 | * By Gerald Combs <gerald@wireshark.org> |
||
6 | * Copyright 1998 Gerald Combs |
||
7 | * |
||
8 | * This program is free software; you can redistribute it and/or |
||
9 | * modify it under the terms of the GNU General Public License |
||
10 | * as published by the Free Software Foundation; either version 2 |
||
11 | * of the License, or (at your option) any later version. |
||
12 | * |
||
13 | * This program is distributed in the hope that it will be useful, |
||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
16 | * GNU General Public License for more details. |
||
17 | * |
||
18 | * You should have received a copy of the GNU General Public License |
||
19 | * along with this program; if not, write to the Free Software |
||
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||
21 | */ |
||
22 | |||
23 | |||
24 | /** @file |
||
25 | * |
||
26 | * Capture options (all parameters needed to do the actual capture) |
||
27 | * |
||
28 | */ |
||
29 | |||
30 | #ifndef __CAPTURE_OPTS_H__ |
||
31 | #define __CAPTURE_OPTS_H__ |
||
32 | |||
33 | #ifdef HAVE_SYS_TYPES_H |
||
34 | # include <sys/types.h> /* for gid_t */ |
||
35 | #endif |
||
36 | |||
37 | #include <caputils/capture_ifinfo.h> |
||
38 | |||
39 | #ifdef __cplusplus |
||
40 | extern "C" { |
||
41 | #endif /* __cplusplus */ |
||
42 | |||
43 | /* |
||
44 | * Long options. |
||
45 | * We do not currently have long options corresponding to all short |
||
46 | * options; we should probably pick appropriate option names for them. |
||
47 | * |
||
48 | * For long options with no corresponding short options, we define values |
||
49 | * outside the range of ASCII graphic characters, make that the last |
||
50 | * component of the entry for the long option, and have a case for that |
||
51 | * option in the switch statement. |
||
52 | * |
||
53 | * NOTE: |
||
54 | * for tshark, we're using a leading - in the optstring to prevent getopt() |
||
55 | * from permuting the argv[] entries, in this case, unknown argv[] entries |
||
56 | * will be returned as parameters to a dummy-option 1. |
||
57 | * In short: we must not use 1 here, which is another reason to use |
||
58 | * values outside the range of ASCII graphic characters. |
||
59 | */ |
||
60 | #define LONGOPT_NUM_CAP_COMMENT 128 |
||
61 | |||
62 | /* |
||
63 | * Non-capture long-only options should start here, to avoid collision |
||
64 | * with capture options. |
||
65 | */ |
||
66 | #define MIN_NON_CAPTURE_LONGOPT 129 |
||
67 | #define LONGOPT_DISABLE_PROTOCOL 130 |
||
68 | #define LONGOPT_ENABLE_HEURISTIC 131 |
||
69 | #define LONGOPT_DISABLE_HEURISTIC 132 |
||
70 | |||
71 | /* |
||
72 | * Options for capturing common to all capturing programs. |
||
73 | */ |
||
74 | #ifdef HAVE_PCAP_REMOTE |
||
75 | #define OPTSTRING_A "A:" |
||
76 | #else |
||
77 | #define OPTSTRING_A "" |
||
78 | #endif |
||
79 | |||
80 | #ifdef CAN_SET_CAPTURE_BUFFER_SIZE |
||
81 | #define LONGOPT_BUFFER_SIZE \ |
||
82 | {"buffer-size", required_argument, NULL, 'B'}, |
||
83 | #define OPTSTRING_B "B:" |
||
84 | #else |
||
85 | #define LONGOPT_BUFFER_SIZE |
||
86 | #define OPTSTRING_B "" |
||
87 | #endif |
||
88 | |||
89 | #ifdef HAVE_PCAP_CREATE |
||
90 | #define LONGOPT_MONITOR_MODE {"monitor-mode", no_argument, NULL, 'I'}, |
||
91 | #define OPTSTRING_I "I" |
||
92 | #else |
||
93 | #define LONGOPT_MONITOR_MODE |
||
94 | #define OPTSTRING_I "" |
||
95 | #endif |
||
96 | |||
97 | #define LONGOPT_CAPTURE_COMMON \ |
||
98 | {"capture-comment", required_argument, NULL, LONGOPT_NUM_CAP_COMMENT}, \ |
||
99 | {"autostop", required_argument, NULL, 'a'}, \ |
||
100 | {"ring-buffer", required_argument, NULL, 'b'}, \ |
||
101 | LONGOPT_BUFFER_SIZE \ |
||
102 | {"list-interfaces", no_argument, NULL, 'D'}, \ |
||
103 | {"interface", required_argument, NULL, 'i'}, \ |
||
104 | LONGOPT_MONITOR_MODE \ |
||
105 | {"list-data-link-types", no_argument, NULL, 'L'}, \ |
||
106 | {"no-promiscuous-mode", no_argument, NULL, 'p'}, \ |
||
107 | {"snapshot-length", required_argument, NULL, 's'}, \ |
||
108 | {"linktype", required_argument, NULL, 'y'}, \ |
||
109 | {"disable-protocol", required_argument, NULL, LONGOPT_DISABLE_PROTOCOL }, \ |
||
110 | {"enable-heuristic", required_argument, NULL, LONGOPT_ENABLE_HEURISTIC }, \ |
||
111 | {"disable-heuristic", required_argument, NULL, LONGOPT_DISABLE_HEURISTIC }, |
||
112 | |||
113 | #define OPTSTRING_CAPTURE_COMMON \ |
||
114 | "a:" OPTSTRING_A "b:" OPTSTRING_B "c:Df:i:" OPTSTRING_I "Lps:y:" |
||
115 | |||
116 | #ifdef HAVE_PCAP_REMOTE |
||
117 | /* Type of capture source */ |
||
118 | typedef enum { |
||
119 | CAPTURE_IFLOCAL, /**< Local network interface */ |
||
120 | CAPTURE_IFREMOTE /**< Remote network interface */ |
||
121 | } capture_source; |
||
122 | |||
123 | /* Type of RPCAPD Authentication */ |
||
124 | typedef enum { |
||
125 | CAPTURE_AUTH_NULL, /**< No authentication */ |
||
126 | CAPTURE_AUTH_PWD /**< User/password authentication */ |
||
127 | } capture_auth; |
||
128 | #endif |
||
129 | #ifdef HAVE_PCAP_SETSAMPLING |
||
130 | /** |
||
131 | * Method of packet sampling (dropping some captured packets), |
||
132 | * may require additional integer parameter, marked here as N |
||
133 | */ |
||
134 | typedef enum { |
||
135 | CAPTURE_SAMP_NONE, /**< No sampling - capture all packets */ |
||
136 | CAPTURE_SAMP_BY_COUNT, /**< Counter-based sampling - |
||
137 | capture 1 packet from every N */ |
||
138 | CAPTURE_SAMP_BY_TIMER /**< Timer-based sampling - |
||
139 | capture no more than 1 packet |
||
140 | in N milliseconds */ |
||
141 | } capture_sampling; |
||
142 | #endif |
||
143 | |||
144 | #ifdef HAVE_PCAP_REMOTE |
||
145 | struct remote_host_info { |
||
146 | gchar *remote_host; /**< Host name or network address for remote capturing */ |
||
147 | gchar *remote_port; /**< TCP port of remote RPCAP server */ |
||
148 | gint auth_type; /**< Authentication type */ |
||
149 | gchar *auth_username; /**< Remote authentication parameters */ |
||
150 | gchar *auth_password; /**< Remote authentication parameters */ |
||
151 | gboolean datatx_udp; |
||
152 | gboolean nocap_rpcap; |
||
153 | gboolean nocap_local; |
||
154 | }; |
||
155 | |||
156 | struct remote_host { |
||
157 | gchar *r_host; /**< Host name or network address for remote capturing */ |
||
158 | gchar *remote_port; /**< TCP port of remote RPCAP server */ |
||
159 | gint auth_type; /**< Authentication type */ |
||
160 | gchar *auth_username; /**< Remote authentication parameters */ |
||
161 | gchar *auth_password; /**< Remote authentication parameters */ |
||
162 | }; |
||
163 | |||
164 | typedef struct remote_options_tag { |
||
165 | capture_source src_type; |
||
166 | struct remote_host_info remote_host_opts; |
||
167 | #ifdef HAVE_PCAP_SETSAMPLING |
||
168 | capture_sampling sampling_method; |
||
169 | int sampling_param; |
||
170 | #endif |
||
171 | } remote_options; |
||
172 | #endif /* HAVE_PCAP_REMOTE */ |
||
173 | |||
174 | typedef struct interface_tag { |
||
175 | gchar *name; |
||
176 | gchar *display_name; |
||
177 | gchar *friendly_name; |
||
178 | guint type; |
||
179 | gchar *addresses; |
||
180 | gint no_addresses; |
||
181 | gchar *cfilter; |
||
182 | GList *links; |
||
183 | gint active_dlt; |
||
184 | gboolean pmode; |
||
185 | gboolean has_snaplen; |
||
186 | int snaplen; |
||
187 | gboolean local; |
||
188 | #ifdef CAN_SET_CAPTURE_BUFFER_SIZE |
||
189 | gint buffer; |
||
190 | #endif |
||
191 | #ifdef HAVE_PCAP_CREATE |
||
192 | gboolean monitor_mode_enabled; |
||
193 | gboolean monitor_mode_supported; |
||
194 | #endif |
||
195 | #ifdef HAVE_PCAP_REMOTE |
||
196 | remote_options remote_opts; |
||
197 | #endif |
||
198 | guint32 last_packets; |
||
199 | guint32 packet_diff; |
||
200 | if_info_t if_info; |
||
201 | gboolean selected; |
||
202 | gboolean hidden; |
||
203 | gboolean locked; |
||
204 | #ifdef HAVE_EXTCAP |
||
205 | /* External capture cached data */ |
||
206 | GHashTable *external_cap_args_settings; |
||
207 | #endif |
||
208 | } interface_t; |
||
209 | |||
210 | typedef struct link_row_tag { |
||
211 | gchar *name; |
||
212 | gint dlt; |
||
213 | } link_row; |
||
214 | |||
215 | #ifdef _WIN32 |
||
216 | #define INVALID_EXTCAP_PID INVALID_HANDLE_VALUE |
||
217 | #else |
||
218 | #define INVALID_EXTCAP_PID (GPid)-1 |
||
219 | #endif |
||
220 | |||
221 | typedef struct interface_options_tag { |
||
222 | gchar *name; /* the name of the interface provided to winpcap/libpcap to specify the interface */ |
||
223 | gchar *descr; |
||
224 | gchar *console_display_name; /* the name displayed in the console, also the basis for autonamed pcap filenames */ |
||
225 | gchar *cfilter; |
||
226 | gboolean has_snaplen; |
||
227 | int snaplen; |
||
228 | int linktype; |
||
229 | gboolean promisc_mode; |
||
230 | interface_type if_type; |
||
231 | #ifdef HAVE_EXTCAP |
||
232 | gchar *extcap; |
||
233 | gchar *extcap_fifo; |
||
234 | GHashTable *extcap_args; |
||
235 | GPid extcap_pid; /* pid of running process or INVALID_EXTCAP_PID */ |
||
236 | gpointer extcap_userdata; |
||
237 | guint extcap_child_watch; |
||
238 | #endif |
||
239 | #ifdef CAN_SET_CAPTURE_BUFFER_SIZE |
||
240 | int buffer_size; |
||
241 | #endif |
||
242 | gboolean monitor_mode; |
||
243 | #ifdef HAVE_PCAP_REMOTE |
||
244 | capture_source src_type; |
||
245 | gchar *remote_host; |
||
246 | gchar *remote_port; |
||
247 | capture_auth auth_type; |
||
248 | gchar *auth_username; |
||
249 | gchar *auth_password; |
||
250 | gboolean datatx_udp; |
||
251 | gboolean nocap_rpcap; |
||
252 | gboolean nocap_local; |
||
253 | #endif |
||
254 | #ifdef HAVE_PCAP_SETSAMPLING |
||
255 | capture_sampling sampling_method; |
||
256 | int sampling_param; |
||
257 | #endif |
||
258 | } interface_options; |
||
259 | |||
260 | /** Capture options coming from user interface */ |
||
261 | typedef struct capture_options_tag { |
||
262 | /* general */ |
||
263 | GArray *ifaces; /**< the interfaces to use for the |
||
264 | next capture, entries are of |
||
265 | type interface_options */ |
||
266 | GArray *all_ifaces; /**< all interfaces, entries are |
||
267 | of type interface_t */ |
||
268 | int ifaces_err; /**< if all_ifaces is null, the error |
||
269 | when it was fetched, if any */ |
||
270 | gchar *ifaces_err_info; /**< error string for that error */ |
||
271 | guint num_selected; |
||
272 | |||
273 | /* |
||
274 | * Options to be applied to all interfaces. |
||
275 | * |
||
276 | * Some of these can be set from the GUI, others can't; setting |
||
277 | * the link-layer header type, for example, doesn't necessarily |
||
278 | * make sense, as different interfaces may support different sets |
||
279 | * of link-layer header types. |
||
280 | * |
||
281 | * Some that can't be set from the GUI can be set from the command |
||
282 | * line, by specifying them before any interface is specified. |
||
283 | * This includes the link-layer header type, so if somebody asks |
||
284 | * for a link-layer header type that an interface on which they're |
||
285 | * capturing doesn't support, we should report an error and fail |
||
286 | * to capture. |
||
287 | * |
||
288 | * These can be overridden per-interface. |
||
289 | */ |
||
290 | interface_options default_options; |
||
291 | |||
292 | gboolean saving_to_file; /**< TRUE if capture is writing to a file */ |
||
293 | gchar *save_file; /**< the capture file name */ |
||
294 | gboolean group_read_access; /**< TRUE is group read permission needs to be set */ |
||
295 | gboolean use_pcapng; /**< TRUE if file format is pcapng */ |
||
296 | |||
297 | /* GUI related */ |
||
298 | gboolean real_time_mode; /**< Update list of packets in real time */ |
||
299 | gboolean show_info; /**< show the info dialog. GTK+ only. */ |
||
300 | gboolean restart; /**< restart after closing is done */ |
||
301 | gchar *orig_save_file; /**< the original capture file name (saved for a restart) */ |
||
302 | |||
303 | /* multiple files (and ringbuffer) */ |
||
304 | gboolean multi_files_on; /**< TRUE if ring buffer in use */ |
||
305 | |||
306 | gboolean has_file_duration; /**< TRUE if ring duration specified */ |
||
307 | gint32 file_duration; /**< Switch file after n seconds */ |
||
308 | gboolean has_ring_num_files; /**< TRUE if ring num_files specified */ |
||
309 | guint32 ring_num_files; /**< Number of multiple buffer files */ |
||
310 | |||
311 | /* autostop conditions */ |
||
312 | gboolean has_autostop_files; /**< TRUE if maximum number of capture files |
||
313 | are specified */ |
||
314 | gint32 autostop_files; /**< Maximum number of capture files */ |
||
315 | |||
316 | gboolean has_autostop_packets; /**< TRUE if maximum packet count is |
||
317 | specified */ |
||
318 | int autostop_packets; /**< Maximum packet count */ |
||
319 | gboolean has_autostop_filesize; /**< TRUE if maximum capture file size |
||
320 | is specified */ |
||
321 | guint32 autostop_filesize; /**< Maximum capture file size */ |
||
322 | gboolean has_autostop_duration; /**< TRUE if maximum capture duration |
||
323 | is specified */ |
||
324 | gint32 autostop_duration; /**< Maximum capture duration */ |
||
325 | |||
326 | gchar *capture_comment; /** capture comment to write to the |
||
327 | output file */ |
||
328 | |||
329 | /* internally used (don't touch from outside) */ |
||
330 | gboolean output_to_pipe; /**< save_file is a pipe (named or stdout) */ |
||
331 | gboolean capture_child; /**< hidden option: Wireshark child mode */ |
||
332 | } capture_options; |
||
333 | |||
334 | /* initialize the capture_options with some reasonable values */ |
||
335 | extern void |
||
336 | capture_opts_init(capture_options *capture_opts); |
||
337 | |||
338 | /* set a command line option value */ |
||
339 | extern int |
||
340 | capture_opts_add_opt(capture_options *capture_opts, int opt, const char *optarg, gboolean *start_capture); |
||
341 | |||
342 | /* log content of capture_opts */ |
||
343 | extern void |
||
344 | capture_opts_log(const char *log_domain, GLogLevelFlags log_level, capture_options *capture_opts); |
||
345 | |||
346 | /* print interface capabilities, including link layer types */ |
||
347 | extern void |
||
348 | capture_opts_print_if_capabilities(if_capabilities_t *caps, char *name, |
||
349 | gboolean monitor_mode); |
||
350 | |||
351 | /* print list of interfaces */ |
||
352 | extern void |
||
353 | capture_opts_print_interfaces(GList *if_list); |
||
354 | |||
355 | /* trim the snaplen entry */ |
||
356 | extern void |
||
357 | capture_opts_trim_snaplen(capture_options *capture_opts, int snaplen_min); |
||
358 | |||
359 | /* trim the ring_num_files entry */ |
||
360 | extern void |
||
361 | capture_opts_trim_ring_num_files(capture_options *capture_opts); |
||
362 | |||
363 | /* pick default interface if none was specified */ |
||
364 | extern int |
||
365 | capture_opts_default_iface_if_necessary(capture_options *capture_opts, |
||
366 | const char *capture_device); |
||
367 | |||
368 | extern void |
||
369 | capture_opts_del_iface(capture_options *capture_opts, guint if_index); |
||
370 | |||
371 | extern void |
||
372 | collect_ifaces(capture_options *capture_opts); |
||
373 | |||
374 | extern void |
||
375 | capture_opts_free_interface_t(interface_t *device); |
||
376 | |||
377 | /* Default capture buffer size in Mbytes. */ |
||
378 | #define DEFAULT_CAPTURE_BUFFER_SIZE 2 |
||
379 | |||
380 | #ifdef __cplusplus |
||
381 | } |
||
382 | #endif /* __cplusplus */ |
||
383 | |||
384 | #endif /* capture_opts.h */ |
||
385 | |||
386 | /* |
||
387 | * Editor modelines - http://www.wireshark.org/tools/modelines.html |
||
388 | * |
||
389 | * Local variables: |
||
390 | * c-basic-offset: 4 |
||
391 | * tab-width: 8 |
||
392 | * indent-tabs-mode: nil |
||
393 | * End: |
||
394 | * |
||
395 | * vi: set shiftwidth=4 tabstop=8 expandtab: |
||
396 | * :indentSize=4:tabSize=8:noTabs=true: |
||
397 | */ |