1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996, 1997
4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without
7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that the following conditions
8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * are met:
9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    documentation and/or other materials provided with the distribution.
14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 3. All advertising materials mentioning features or use of this software
15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    must display the following acknowledgement:
16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	This product includes software developed by the Computer Systems
17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	Engineering Group at Lawrence Berkeley Laboratory.
18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 4. Neither the name of the University nor of the Laboratory may be used
19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    to endorse or promote products derived from this software without
20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    specific prior written permission.
21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * SUCH DAMAGE.
33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.52.2.7 2007/06/11 09:52:05 guy Exp $ (LBL)
35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef lib_pcap_h
38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define lib_pcap_h
39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if defined(WIN32)
41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project  #include <pcap-stdinc.h>
42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#elif defined(MSDOS)
43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project  #include <sys/types.h>
44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project  #include <sys/socket.h>  /* u_int, u_char etc. */
45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* UN*X */
46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project  #include <sys/types.h>
47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project  #include <sys/time.h>
48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32/MSDOS/UN*X */
49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H
51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-bpf.h>
52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdio.h>
55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __cplusplus
57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern "C" {
58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_VERSION_MAJOR 2
61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_VERSION_MINOR 4
62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_ERRBUF_SIZE 256
64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Compatibility for systems that have a bpf.h that
67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * predates the bpf typedefs for 64-bit support.
68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if BPF_RELEASE - 0 < 199406
70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef	int bpf_int32;
71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef	u_int bpf_u_int32;
72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap pcap_t;
75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap_dumper pcap_dumper_t;
76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap_if pcap_if_t;
77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef struct pcap_addr pcap_addr_t;
78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * The first record in the file contains saved values for some
81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * of the flags used in the printout phases of tcpdump.
82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Many fields here are 32 bit ints so compilers won't insert unwanted
83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * padding; these files need to be interchangeable across architectures.
84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Do not change the layout of this structure, in any way (this includes
86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * changes that only affect the length of fields in this structure).
87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Also, do not change the interpretation of any of the members of this
89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * structure, in any way (this includes using values other than
90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * LINKTYPE_ values, as defined in "savefile.c", in the "linktype"
91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * field).
92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Instead:
94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	introduce a new structure for the new format, if the layout
96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	of the structure changed;
97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	send mail to "tcpdump-workers@tcpdump.org", requesting a new
99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	magic number for your new capture file format, and, when
100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	you get the new magic number, put it in "savefile.c";
101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	use that magic number for save files with the changed file
103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	header;
104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	make the code in "savefile.c" capable of reading files with
106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	the old file header as well as files with the new file header
107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	(using the magic number to determine the header format).
108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Then supply the changes to "patches@tcpdump.org", so that future
110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * versions of libpcap and programs that use it (such as tcpdump) will
111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * be able to read your new capture file format.
112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_file_header {
114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 magic;
115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_short version_major;
116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_short version_minor;
117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_int32 thiszone;	/* gmt to local correction */
118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 sigfigs;	/* accuracy of timestamps */
119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 snaplen;	/* max length saved portion of each pkt */
120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 linktype;	/* data link type (LINKTYPE_*) */
121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef enum {
124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       PCAP_D_INOUT = 0,
125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       PCAP_D_IN,
126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       PCAP_D_OUT
127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} pcap_direction_t;
128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Generic per-packet information, as supplied by libpcap.
131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * The time stamp can and should be a "struct timeval", regardless of
133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * whether your system supports 32-bit tv_sec in "struct timeval",
134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit
135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * and 64-bit applications.  The on-disk format of savefiles uses 32-bit
136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * tv_sec (and tv_usec); this structure is irrelevant to that.  32-bit
137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * and 64-bit versions of libpcap, even if they're on the same platform,
138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * should supply the appropriate version of "struct timeval", even if
139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * that's not what the underlying packet capture mechanism supplies.
140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_pkthdr {
142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct timeval ts;	/* time stamp */
143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 caplen;	/* length of portion present */
144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 len;	/* length this packet (off wire) */
145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * As returned by the pcap_stats()
149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_stat {
151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int ps_recv;		/* number of packets received */
152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int ps_drop;		/* number of packets dropped */
153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int ps_ifdrop;	/* drops by interface XXX not yet supported */
154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32
155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	u_int bs_capt;		/* number of packets that reach the application */
156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */
157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef MSDOS
160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * As returned by the pcap_stats_ex()
162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_stat_ex {
164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_packets;        /* total packets received       */
165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_packets;        /* total packets transmitted    */
166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_bytes;          /* total bytes received         */
167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_bytes;          /* total bytes transmitted      */
168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_errors;         /* bad packets received         */
169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_errors;         /* packet transmit problems     */
170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_dropped;        /* no space in Rx buffers       */
171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_dropped;        /* no space available for Tx    */
172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  multicast;         /* multicast packets received   */
173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  collisions;
174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       /* detailed rx_errors: */
176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_length_errors;
177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_over_errors;    /* receiver ring buff overflow  */
178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_crc_errors;     /* recv'd pkt with crc error    */
179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_frame_errors;   /* recv'd frame alignment error */
180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_fifo_errors;    /* recv'r fifo overrun          */
181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  rx_missed_errors;  /* recv'r missed packet         */
182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       /* detailed tx_errors */
184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_aborted_errors;
185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_carrier_errors;
186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_fifo_errors;
187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_heartbeat_errors;
188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project       u_long  tx_window_errors;
189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project     };
190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Item in a list of interfaces.
194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_if {
196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap_if *next;
197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	char *name;		/* name to hand to "pcap_open_live()" */
198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	char *description;	/* textual description of interface, or NULL */
199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap_addr *addresses;
200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_u_int32 flags;	/* PCAP_IF_ interface flags */
201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define PCAP_IF_LOOPBACK	0x00000001	/* interface is loopback */
204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Representation of an interface address.
207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct pcap_addr {
209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct pcap_addr *next;
210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *addr;		/* address */
211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *netmask;	/* netmask for that address */
212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *broadaddr;	/* broadcast address for that address */
213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct sockaddr *dstaddr;	/* P2P destination address for that address */
214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			     const u_char *);
218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*pcap_lookupdev(char *);
220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *);
221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_open_live(const char *, int, int, int, char *);
222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_open_dead(int, int);
223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_open_offline(const char *, char *);
224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_t	*pcap_fopen_offline(FILE *, char *);
225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_close(pcap_t *);
226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_loop(pcap_t *, int, pcap_handler, u_char *);
227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst u_char*
229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	pcap_next(pcap_t *, struct pcap_pkthdr *);
230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint 	pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_breakloop(pcap_t *);
232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_stats(pcap_t *, struct pcap_stat *);
233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_setfilter(pcap_t *, struct bpf_program *);
234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint 	pcap_setdirection(pcap_t *, pcap_direction_t);
235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_getnonblock(pcap_t *, char *);
236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_setnonblock(pcap_t *, int, char *);
237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_perror(pcap_t *, char *);
238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_inject(pcap_t *, const void *, size_t);
239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_sendpacket(pcap_t *, const u_char *, int);
240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_strerror(int);
241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*pcap_geterr(pcap_t *);
242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_compile(pcap_t *, struct bpf_program *, const char *, int,
243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    bpf_u_int32);
244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_compile_nopcap(int, int, struct bpf_program *,
245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    const char *, int, bpf_u_int32);
246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_freecode(struct bpf_program *);
247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_datalink(pcap_t *);
248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_list_datalinks(pcap_t *, int **);
249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_set_datalink(pcap_t *, int);
250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_datalink_name_to_val(const char *);
251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_datalink_val_to_name(int);
252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_datalink_val_to_description(int);
253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_snapshot(pcap_t *);
254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_is_swapped(pcap_t *);
255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_major_version(pcap_t *);
256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_minor_version(pcap_t *);
257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX */
259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectFILE	*pcap_file(pcap_t *);
260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_fileno(pcap_t *);
261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp);
264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectFILE	*pcap_dump_file(pcap_dumper_t *);
265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlong	pcap_dump_ftell(pcap_dumper_t *);
266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_dump_flush(pcap_dumper_t *);
267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_dump_close(pcap_dumper_t *);
268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_findalldevs(pcap_if_t **, char *);
271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	pcap_freealldevs(pcap_if_t *);
272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconst char *pcap_lib_version(void);
274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX this guy lives in the bpf tree */
276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectu_int	bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	bpf_validate(struct bpf_insn *f, int len);
278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar	*bpf_image(struct bpf_insn *, int);
279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid	bpf_dump(struct bpf_program *, int);
280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if defined(WIN32)
282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Win32 definitions
285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setbuff(pcap_t *p, int dim);
288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setmode(pcap_t *p, int mode);
289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_setmintocopy(pcap_t *p, int size);
290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WPCAP
292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Include file with the wpcap-specific extensions */
293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <Win32-Extensions.h>
294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WPCAP */
295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define MODE_CAPT 0
297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define MODE_STAT 1
298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define MODE_MON 2
299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#elif defined(MSDOS)
301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * MS-DOS definitions
304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint  pcap_stats_ex (pcap_t *, struct pcap_stat_ex *);
307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid pcap_set_wait (pcap_t *p, void (*yield)(void), int wait);
308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectu_long pcap_mac_packets (void);
309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* UN*X */
311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * UN*X definitions
314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint	pcap_get_selectable_fd(pcap_t *);
317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32/MSDOS/UN*X */
319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __cplusplus
321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
325