1 | /* |
---|
2 | * Copyright (c) 1994, 1995, 1996 |
---|
3 | * The Regents of the University of California. All rights reserved. |
---|
4 | * |
---|
5 | * Redistribution and use in source and binary forms, with or without |
---|
6 | * modification, are permitted provided that the following conditions |
---|
7 | * are met: |
---|
8 | * 1. Redistributions of source code must retain the above copyright |
---|
9 | * notice, this list of conditions and the following disclaimer. |
---|
10 | * 2. Redistributions in binary form must reproduce the above copyright |
---|
11 | * notice, this list of conditions and the following disclaimer in the |
---|
12 | * documentation and/or other materials provided with the distribution. |
---|
13 | * 3. All advertising materials mentioning features or use of this software |
---|
14 | * must display the following acknowledgement: |
---|
15 | * This product includes software developed by the Computer Systems |
---|
16 | * Engineering Group at Lawrence Berkeley Laboratory. |
---|
17 | * 4. Neither the name of the University nor of the Laboratory may be used |
---|
18 | * to endorse or promote products derived from this software without |
---|
19 | * specific prior written permission. |
---|
20 | * |
---|
21 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
---|
22 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
23 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
24 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
---|
25 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
26 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
27 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
28 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
29 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
30 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
31 | * SUCH DAMAGE. |
---|
32 | * |
---|
33 | * @(#) $Header: /tcpdump/master/libpcap/pcap-int.h,v 1.94 2008-09-16 00:20:23 guy Exp $ (LBL) |
---|
34 | */ |
---|
35 | |
---|
36 | #ifndef pcap_int_h |
---|
37 | #define pcap_int_h |
---|
38 | |
---|
39 | #include <pcap/pcap.h> |
---|
40 | |
---|
41 | #ifdef __cplusplus |
---|
42 | extern "C" { |
---|
43 | #endif |
---|
44 | |
---|
45 | #ifdef HAVE_LIBDLPI |
---|
46 | #include <libdlpi.h> |
---|
47 | #endif |
---|
48 | |
---|
49 | #ifdef WIN32 |
---|
50 | #include <Packet32.h> |
---|
51 | extern CRITICAL_SECTION g_PcapCompileCriticalSection; |
---|
52 | #endif /* WIN32 */ |
---|
53 | |
---|
54 | #ifdef MSDOS |
---|
55 | #include <fcntl.h> |
---|
56 | #include <io.h> |
---|
57 | #endif |
---|
58 | |
---|
59 | #ifdef HAVE_SNF_API |
---|
60 | #include <snf.h> |
---|
61 | #endif |
---|
62 | |
---|
63 | #if (defined(_MSC_VER) && (_MSC_VER <= 1200)) /* we are compiling with Visual Studio 6, that doesn't support the LL suffix*/ |
---|
64 | |
---|
65 | /* |
---|
66 | * Swap byte ordering of unsigned long long timestamp on a big endian |
---|
67 | * machine. |
---|
68 | */ |
---|
69 | #define SWAPLL(ull) ((ull & 0xff00000000000000) >> 56) | \ |
---|
70 | ((ull & 0x00ff000000000000) >> 40) | \ |
---|
71 | ((ull & 0x0000ff0000000000) >> 24) | \ |
---|
72 | ((ull & 0x000000ff00000000) >> 8) | \ |
---|
73 | ((ull & 0x00000000ff000000) << 8) | \ |
---|
74 | ((ull & 0x0000000000ff0000) << 24) | \ |
---|
75 | ((ull & 0x000000000000ff00) << 40) | \ |
---|
76 | ((ull & 0x00000000000000ff) << 56) |
---|
77 | |
---|
78 | #else /* A recent Visual studio compiler or not VC */ |
---|
79 | |
---|
80 | /* |
---|
81 | * Swap byte ordering of unsigned long long timestamp on a big endian |
---|
82 | * machine. |
---|
83 | */ |
---|
84 | #define SWAPLL(ull) ((ull & 0xff00000000000000LL) >> 56) | \ |
---|
85 | ((ull & 0x00ff000000000000LL) >> 40) | \ |
---|
86 | ((ull & 0x0000ff0000000000LL) >> 24) | \ |
---|
87 | ((ull & 0x000000ff00000000LL) >> 8) | \ |
---|
88 | ((ull & 0x00000000ff000000LL) << 8) | \ |
---|
89 | ((ull & 0x0000000000ff0000LL) << 24) | \ |
---|
90 | ((ull & 0x000000000000ff00LL) << 40) | \ |
---|
91 | ((ull & 0x00000000000000ffLL) << 56) |
---|
92 | |
---|
93 | #endif /* _MSC_VER */ |
---|
94 | |
---|
95 | /* |
---|
96 | * Savefile |
---|
97 | */ |
---|
98 | typedef enum { |
---|
99 | NOT_SWAPPED, |
---|
100 | SWAPPED, |
---|
101 | MAYBE_SWAPPED |
---|
102 | } swapped_type_t; |
---|
103 | |
---|
104 | /* |
---|
105 | * Used when reading a savefile. |
---|
106 | */ |
---|
107 | struct pcap_sf { |
---|
108 | FILE *rfile; |
---|
109 | int (*next_packet_op)(pcap_t *, struct pcap_pkthdr *, u_char **); |
---|
110 | int swapped; |
---|
111 | size_t hdrsize; |
---|
112 | swapped_type_t lengths_swapped; |
---|
113 | int version_major; |
---|
114 | int version_minor; |
---|
115 | bpf_u_int32 ifcount; /* number of interfaces seen in this capture */ |
---|
116 | u_int tsresol; /* time stamp resolution */ |
---|
117 | u_int tsscale; /* scaling factor for resolution -> microseconds */ |
---|
118 | u_int64_t tsoffset; /* time stamp offset */ |
---|
119 | }; |
---|
120 | |
---|
121 | /* |
---|
122 | * Used when doing a live capture. |
---|
123 | */ |
---|
124 | struct pcap_md { |
---|
125 | struct pcap_stat stat; |
---|
126 | /*XXX*/ |
---|
127 | int use_bpf; /* using kernel filter */ |
---|
128 | u_long TotPkts; /* can't oflow for 79 hrs on ether */ |
---|
129 | u_long TotAccepted; /* count accepted by filter */ |
---|
130 | u_long TotDrops; /* count of dropped packets */ |
---|
131 | long TotMissed; /* missed by i/f during this run */ |
---|
132 | long OrigMissed; /* missed by i/f before this run */ |
---|
133 | char *device; /* device name */ |
---|
134 | int timeout; /* timeout for buffering */ |
---|
135 | int must_do_on_close; /* stuff we must do when we close */ |
---|
136 | struct pcap *next; /* list of open pcaps that need stuff cleared on close */ |
---|
137 | #ifdef linux |
---|
138 | int sock_packet; /* using Linux 2.0 compatible interface */ |
---|
139 | int cooked; /* using SOCK_DGRAM rather than SOCK_RAW */ |
---|
140 | int ifindex; /* interface index of device we're bound to */ |
---|
141 | int lo_ifindex; /* interface index of the loopback device */ |
---|
142 | u_int packets_read; /* count of packets read with recvfrom() */ |
---|
143 | bpf_u_int32 oldmode; /* mode to restore when turning monitor mode off */ |
---|
144 | char *mondevice; /* mac80211 monitor device we created */ |
---|
145 | u_char *mmapbuf; /* memory-mapped region pointer */ |
---|
146 | size_t mmapbuflen; /* size of region */ |
---|
147 | int vlan_offset; /* offset at which to insert vlan tags; if -1, don't insert */ |
---|
148 | u_int tp_version; /* version of tpacket_hdr for mmaped ring */ |
---|
149 | u_int tp_hdrlen; /* hdrlen of tpacket_hdr for mmaped ring */ |
---|
150 | u_char *oneshot_buffer; /* buffer for copy of packet */ |
---|
151 | long proc_dropped; /* packets reported dropped by /proc/net/dev */ |
---|
152 | #endif /* linux */ |
---|
153 | |
---|
154 | #ifdef HAVE_DAG_API |
---|
155 | #ifdef HAVE_DAG_STREAMS_API |
---|
156 | u_char *dag_mem_bottom; /* DAG card current memory bottom pointer */ |
---|
157 | u_char *dag_mem_top; /* DAG card current memory top pointer */ |
---|
158 | #else /* HAVE_DAG_STREAMS_API */ |
---|
159 | void *dag_mem_base; /* DAG card memory base address */ |
---|
160 | u_int dag_mem_bottom; /* DAG card current memory bottom offset */ |
---|
161 | u_int dag_mem_top; /* DAG card current memory top offset */ |
---|
162 | #endif /* HAVE_DAG_STREAMS_API */ |
---|
163 | int dag_fcs_bits; /* Number of checksum bits from link layer */ |
---|
164 | int dag_offset_flags; /* Flags to pass to dag_offset(). */ |
---|
165 | int dag_stream; /* DAG stream number */ |
---|
166 | int dag_timeout; /* timeout specified to pcap_open_live. |
---|
167 | * Same as in linux above, introduce |
---|
168 | * generally? */ |
---|
169 | #endif /* HAVE_DAG_API */ |
---|
170 | #ifdef HAVE_SNF_API |
---|
171 | snf_handle_t snf_handle; /* opaque device handle */ |
---|
172 | snf_ring_t snf_ring; /* opaque device ring handle */ |
---|
173 | int snf_timeout; |
---|
174 | int snf_boardnum; |
---|
175 | #endif /*HAVE_SNF_API*/ |
---|
176 | |
---|
177 | #ifdef HAVE_ZEROCOPY_BPF |
---|
178 | /* |
---|
179 | * Zero-copy read buffer -- for zero-copy BPF. 'buffer' above will |
---|
180 | * alternative between these two actual mmap'd buffers as required. |
---|
181 | * As there is a header on the front size of the mmap'd buffer, only |
---|
182 | * some of the buffer is exposed to libpcap as a whole via bufsize; |
---|
183 | * zbufsize is the true size. zbuffer tracks the current zbuf |
---|
184 | * assocated with buffer so that it can be used to decide which the |
---|
185 | * next buffer to read will be. |
---|
186 | */ |
---|
187 | u_char *zbuf1, *zbuf2, *zbuffer; |
---|
188 | u_int zbufsize; |
---|
189 | u_int zerocopy; |
---|
190 | u_int interrupted; |
---|
191 | struct timespec firstsel; |
---|
192 | /* |
---|
193 | * If there's currently a buffer being actively processed, then it is |
---|
194 | * referenced here; 'buffer' is also pointed at it, but offset by the |
---|
195 | * size of the header. |
---|
196 | */ |
---|
197 | struct bpf_zbuf_header *bzh; |
---|
198 | #endif /* HAVE_ZEROCOPY_BPF */ |
---|
199 | }; |
---|
200 | |
---|
201 | /* |
---|
202 | * Stuff to do when we close. |
---|
203 | */ |
---|
204 | #define MUST_CLEAR_PROMISC 0x00000001 /* clear promiscuous mode */ |
---|
205 | #define MUST_CLEAR_RFMON 0x00000002 /* clear rfmon (monitor) mode */ |
---|
206 | #define MUST_DELETE_MONIF 0x00000004 /* delete monitor-mode interface */ |
---|
207 | |
---|
208 | struct pcap_opt { |
---|
209 | int buffer_size; |
---|
210 | char *source; |
---|
211 | int promisc; |
---|
212 | int rfmon; |
---|
213 | int tstamp_type; |
---|
214 | }; |
---|
215 | |
---|
216 | /* |
---|
217 | * Ultrix, DEC OSF/1^H^H^H^H^H^H^H^H^HDigital UNIX^H^H^H^H^H^H^H^H^H^H^H^H |
---|
218 | * Tru64 UNIX, and some versions of NetBSD pad FDDI packets to make everything |
---|
219 | * line up on a nice boundary. |
---|
220 | */ |
---|
221 | #ifdef __NetBSD__ |
---|
222 | #include <rtems/bsd/sys/param.h> /* needed to declare __NetBSD_Version__ */ |
---|
223 | #endif |
---|
224 | |
---|
225 | #if defined(ultrix) || defined(__osf__) || (defined(__NetBSD__) && __NetBSD_Version__ > 106000000) |
---|
226 | #define PCAP_FDDIPAD 3 |
---|
227 | #endif |
---|
228 | |
---|
229 | typedef int (*activate_op_t)(pcap_t *); |
---|
230 | typedef int (*can_set_rfmon_op_t)(pcap_t *); |
---|
231 | typedef int (*read_op_t)(pcap_t *, int cnt, pcap_handler, u_char *); |
---|
232 | typedef int (*inject_op_t)(pcap_t *, const void *, size_t); |
---|
233 | typedef int (*setfilter_op_t)(pcap_t *, struct bpf_program *); |
---|
234 | typedef int (*setdirection_op_t)(pcap_t *, pcap_direction_t); |
---|
235 | typedef int (*set_datalink_op_t)(pcap_t *, int); |
---|
236 | typedef int (*getnonblock_op_t)(pcap_t *, char *); |
---|
237 | typedef int (*setnonblock_op_t)(pcap_t *, int, char *); |
---|
238 | typedef int (*stats_op_t)(pcap_t *, struct pcap_stat *); |
---|
239 | #ifdef WIN32 |
---|
240 | typedef int (*setbuff_op_t)(pcap_t *, int); |
---|
241 | typedef int (*setmode_op_t)(pcap_t *, int); |
---|
242 | typedef int (*setmintocopy_op_t)(pcap_t *, int); |
---|
243 | #endif |
---|
244 | typedef void (*cleanup_op_t)(pcap_t *); |
---|
245 | |
---|
246 | struct pcap { |
---|
247 | #ifdef WIN32 |
---|
248 | ADAPTER *adapter; |
---|
249 | LPPACKET Packet; |
---|
250 | int nonblock; |
---|
251 | #else |
---|
252 | int fd; |
---|
253 | int selectable_fd; |
---|
254 | int send_fd; |
---|
255 | #endif /* WIN32 */ |
---|
256 | |
---|
257 | #ifdef HAVE_LIBDLPI |
---|
258 | dlpi_handle_t dlpi_hd; |
---|
259 | #endif |
---|
260 | int snapshot; |
---|
261 | int linktype; /* Network linktype */ |
---|
262 | int linktype_ext; /* Extended information stored in the linktype field of a file */ |
---|
263 | int tzoff; /* timezone offset */ |
---|
264 | int offset; /* offset for proper alignment */ |
---|
265 | int activated; /* true if the capture is really started */ |
---|
266 | int oldstyle; /* if we're opening with pcap_open_live() */ |
---|
267 | |
---|
268 | int break_loop; /* flag set to force break from packet-reading loop */ |
---|
269 | |
---|
270 | #ifdef PCAP_FDDIPAD |
---|
271 | int fddipad; |
---|
272 | #endif |
---|
273 | |
---|
274 | #ifdef MSDOS |
---|
275 | void (*wait_proc)(void); /* call proc while waiting */ |
---|
276 | #endif |
---|
277 | |
---|
278 | struct pcap_sf sf; |
---|
279 | struct pcap_md md; |
---|
280 | struct pcap_opt opt; |
---|
281 | |
---|
282 | /* |
---|
283 | * Read buffer. |
---|
284 | */ |
---|
285 | int bufsize; |
---|
286 | u_char *buffer; |
---|
287 | u_char *bp; |
---|
288 | int cc; |
---|
289 | |
---|
290 | /* |
---|
291 | * Place holder for pcap_next(). |
---|
292 | */ |
---|
293 | u_char *pkt; |
---|
294 | |
---|
295 | /* We're accepting only packets in this direction/these directions. */ |
---|
296 | pcap_direction_t direction; |
---|
297 | |
---|
298 | /* |
---|
299 | * Methods. |
---|
300 | */ |
---|
301 | activate_op_t activate_op; |
---|
302 | can_set_rfmon_op_t can_set_rfmon_op; |
---|
303 | read_op_t read_op; |
---|
304 | inject_op_t inject_op; |
---|
305 | setfilter_op_t setfilter_op; |
---|
306 | setdirection_op_t setdirection_op; |
---|
307 | set_datalink_op_t set_datalink_op; |
---|
308 | getnonblock_op_t getnonblock_op; |
---|
309 | setnonblock_op_t setnonblock_op; |
---|
310 | stats_op_t stats_op; |
---|
311 | |
---|
312 | /* |
---|
313 | * Routine to use as callback for pcap_next()/pcap_next_ex(). |
---|
314 | */ |
---|
315 | pcap_handler oneshot_callback; |
---|
316 | |
---|
317 | #ifdef WIN32 |
---|
318 | /* |
---|
319 | * These are, at least currently, specific to the Win32 NPF |
---|
320 | * driver. |
---|
321 | */ |
---|
322 | setbuff_op_t setbuff_op; |
---|
323 | setmode_op_t setmode_op; |
---|
324 | setmintocopy_op_t setmintocopy_op; |
---|
325 | #endif |
---|
326 | cleanup_op_t cleanup_op; |
---|
327 | |
---|
328 | /* |
---|
329 | * Placeholder for filter code if bpf not in kernel. |
---|
330 | */ |
---|
331 | struct bpf_program fcode; |
---|
332 | |
---|
333 | char errbuf[PCAP_ERRBUF_SIZE + 1]; |
---|
334 | int dlt_count; |
---|
335 | u_int *dlt_list; |
---|
336 | int tstamp_type_count; |
---|
337 | u_int *tstamp_type_list; |
---|
338 | |
---|
339 | struct pcap_pkthdr pcap_header; /* This is needed for the pcap_next_ex() to work */ |
---|
340 | }; |
---|
341 | |
---|
342 | /* |
---|
343 | * This is a timeval as stored in a savefile. |
---|
344 | * It has to use the same types everywhere, independent of the actual |
---|
345 | * `struct timeval'; `struct timeval' has 32-bit tv_sec values on some |
---|
346 | * platforms and 64-bit tv_sec values on other platforms, and writing |
---|
347 | * out native `struct timeval' values would mean files could only be |
---|
348 | * read on systems with the same tv_sec size as the system on which |
---|
349 | * the file was written. |
---|
350 | */ |
---|
351 | |
---|
352 | struct pcap_timeval { |
---|
353 | bpf_int32 tv_sec; /* seconds */ |
---|
354 | bpf_int32 tv_usec; /* microseconds */ |
---|
355 | }; |
---|
356 | |
---|
357 | /* |
---|
358 | * This is a `pcap_pkthdr' as actually stored in a savefile. |
---|
359 | * |
---|
360 | * Do not change the format of this structure, in any way (this includes |
---|
361 | * changes that only affect the length of fields in this structure), |
---|
362 | * and do not make the time stamp anything other than seconds and |
---|
363 | * microseconds (e.g., seconds and nanoseconds). Instead: |
---|
364 | * |
---|
365 | * introduce a new structure for the new format; |
---|
366 | * |
---|
367 | * send mail to "tcpdump-workers@lists.tcpdump.org", requesting |
---|
368 | * a new magic number for your new capture file format, and, when |
---|
369 | * you get the new magic number, put it in "savefile.c"; |
---|
370 | * |
---|
371 | * use that magic number for save files with the changed record |
---|
372 | * header; |
---|
373 | * |
---|
374 | * make the code in "savefile.c" capable of reading files with |
---|
375 | * the old record header as well as files with the new record header |
---|
376 | * (using the magic number to determine the header format). |
---|
377 | * |
---|
378 | * Then supply the changes by forking the branch at |
---|
379 | * |
---|
380 | * https://github.com/mcr/libpcap/issues |
---|
381 | * |
---|
382 | * and issuing a pull request, so that future versions of libpcap and |
---|
383 | * programs that use it (such as tcpdump) will be able to read your new |
---|
384 | * capture file format. |
---|
385 | */ |
---|
386 | |
---|
387 | struct pcap_sf_pkthdr { |
---|
388 | struct pcap_timeval ts; /* time stamp */ |
---|
389 | bpf_u_int32 caplen; /* length of portion present */ |
---|
390 | bpf_u_int32 len; /* length this packet (off wire) */ |
---|
391 | }; |
---|
392 | |
---|
393 | /* |
---|
394 | * How a `pcap_pkthdr' is actually stored in savefiles written |
---|
395 | * by some patched versions of libpcap (e.g. the ones in Red |
---|
396 | * Hat Linux 6.1 and 6.2). |
---|
397 | * |
---|
398 | * Do not change the format of this structure, in any way (this includes |
---|
399 | * changes that only affect the length of fields in this structure). |
---|
400 | * Instead, introduce a new structure, as per the above. |
---|
401 | */ |
---|
402 | |
---|
403 | struct pcap_sf_patched_pkthdr { |
---|
404 | struct pcap_timeval ts; /* time stamp */ |
---|
405 | bpf_u_int32 caplen; /* length of portion present */ |
---|
406 | bpf_u_int32 len; /* length this packet (off wire) */ |
---|
407 | int index; |
---|
408 | unsigned short protocol; |
---|
409 | unsigned char pkt_type; |
---|
410 | }; |
---|
411 | |
---|
412 | /* |
---|
413 | * User data structure for the one-shot callback used for pcap_next() |
---|
414 | * and pcap_next_ex(). |
---|
415 | */ |
---|
416 | struct oneshot_userdata { |
---|
417 | struct pcap_pkthdr *hdr; |
---|
418 | const u_char **pkt; |
---|
419 | pcap_t *pd; |
---|
420 | }; |
---|
421 | |
---|
422 | int yylex(void); |
---|
423 | |
---|
424 | #ifndef min |
---|
425 | #define min(a, b) ((a) > (b) ? (b) : (a)) |
---|
426 | #endif |
---|
427 | |
---|
428 | /* XXX should these be in pcap.h? */ |
---|
429 | int pcap_offline_read(pcap_t *, int, pcap_handler, u_char *); |
---|
430 | int pcap_read(pcap_t *, int cnt, pcap_handler, u_char *); |
---|
431 | |
---|
432 | #ifndef HAVE_STRLCPY |
---|
433 | #define strlcpy(x, y, z) \ |
---|
434 | (strncpy((x), (y), (z)), \ |
---|
435 | ((z) <= 0 ? 0 : ((x)[(z) - 1] = '\0')), \ |
---|
436 | strlen((y))) |
---|
437 | #endif |
---|
438 | |
---|
439 | #include <stdarg.h> |
---|
440 | |
---|
441 | #if !defined(HAVE_SNPRINTF) |
---|
442 | #define snprintf pcap_snprintf |
---|
443 | extern int snprintf (char *, size_t, const char *, ...); |
---|
444 | #endif |
---|
445 | |
---|
446 | #if !defined(HAVE_VSNPRINTF) |
---|
447 | #define vsnprintf pcap_vsnprintf |
---|
448 | extern int vsnprintf (char *, size_t, const char *, va_list ap); |
---|
449 | #endif |
---|
450 | |
---|
451 | /* |
---|
452 | * Routines that most pcap implementations can use for non-blocking mode. |
---|
453 | */ |
---|
454 | #if !defined(WIN32) && !defined(MSDOS) |
---|
455 | int pcap_getnonblock_fd(pcap_t *, char *); |
---|
456 | int pcap_setnonblock_fd(pcap_t *p, int, char *); |
---|
457 | #endif |
---|
458 | |
---|
459 | /* |
---|
460 | * Internal interfaces for "pcap_create()". |
---|
461 | * |
---|
462 | * "pcap_create_interface()" is the routine to do a pcap_create on |
---|
463 | * a regular network interface. There are multiple implementations |
---|
464 | * of this, one for each platform type (Linux, BPF, DLPI, etc.), |
---|
465 | * with the one used chosen by the configure script. |
---|
466 | * |
---|
467 | * "pcap_create_common()" allocates and fills in a pcap_t, for use |
---|
468 | * by pcap_create routines. |
---|
469 | */ |
---|
470 | pcap_t *pcap_create_interface(const char *, char *); |
---|
471 | pcap_t *pcap_create_common(const char *, char *); |
---|
472 | int pcap_do_addexit(pcap_t *); |
---|
473 | void pcap_add_to_pcaps_to_close(pcap_t *); |
---|
474 | void pcap_remove_from_pcaps_to_close(pcap_t *); |
---|
475 | void pcap_cleanup_live_common(pcap_t *); |
---|
476 | int pcap_not_initialized(pcap_t *); |
---|
477 | int pcap_check_activated(pcap_t *); |
---|
478 | |
---|
479 | /* |
---|
480 | * Internal interfaces for "pcap_findalldevs()". |
---|
481 | * |
---|
482 | * "pcap_findalldevs_interfaces()" finds interfaces using the |
---|
483 | * "standard" mechanisms (SIOCGIFCONF, "getifaddrs()", etc.). |
---|
484 | * |
---|
485 | * "pcap_platform_finddevs()" is a platform-dependent routine to |
---|
486 | * add devices not found by the "standard" mechanisms. |
---|
487 | * |
---|
488 | * "pcap_add_if()" adds an interface to the list of interfaces, for |
---|
489 | * use by various "find interfaces" routines. |
---|
490 | */ |
---|
491 | int pcap_findalldevs_interfaces(pcap_if_t **, char *); |
---|
492 | int pcap_platform_finddevs(pcap_if_t **, char *); |
---|
493 | int add_addr_to_iflist(pcap_if_t **, const char *, u_int, struct sockaddr *, |
---|
494 | size_t, struct sockaddr *, size_t, struct sockaddr *, size_t, |
---|
495 | struct sockaddr *, size_t, char *); |
---|
496 | int pcap_add_if(pcap_if_t **, const char *, u_int, const char *, char *); |
---|
497 | struct sockaddr *dup_sockaddr(struct sockaddr *, size_t); |
---|
498 | int add_or_find_if(pcap_if_t **, pcap_if_t **, const char *, u_int, |
---|
499 | const char *, char *); |
---|
500 | |
---|
501 | #ifdef WIN32 |
---|
502 | char *pcap_win32strerror(void); |
---|
503 | #endif |
---|
504 | |
---|
505 | int install_bpf_program(pcap_t *, struct bpf_program *); |
---|
506 | |
---|
507 | int pcap_strcasecmp(const char *, const char *); |
---|
508 | |
---|
509 | #ifdef __cplusplus |
---|
510 | } |
---|
511 | #endif |
---|
512 | |
---|
513 | #endif |
---|